gpt4 book ai didi

elasticsearch - copy_to 和自定义分析器不工作

转载 作者:行者123 更新时间:2023-12-04 03:38:41 27 4
gpt4 key购买 nike

(我正在使用 Elasticsearch 1.5.2 的全新副本执行此操作)

我已经定义了一个自定义分析器并且它正在工作:

curl -XPUT 127.0.0.1:9200/test -d '{
"settings": {
"index": {
"analysis": {
"tokenizer": {
"UrlTokenizer": {
"type": "pattern",
"pattern": "https?://([^/]+)",
"group": 1
}
},
"analyzer": {
"accesslogs": {
"tokenizer": "UrlTokenizer"
}
}
}
}
}
}'; echo

curl '127.0.0.1:9200/test/_analyze?analyzer=accesslogs&text=http://192.168.1.1/123?a=2#1111' | json_pp

现在我将它应用于索引:

curl -XPUT 127.0.0.1:9200/test/accesslogs/_mapping -d '{
"accesslogs" : {
"properties" : {
"referer" : { "type" : "string", "copy_to" : "referer_domain" },
"referer_domain": {
"type": "string",
"analyzer": "accesslogs"
}
}
}
}'; echo

从映射中我可以看到它们都被应用了。

现在我尝试插入一些数据,

curl 127.0.0.1:9200/test/accesslogs/ -d '{
"referer": "http://192.168.1.1/aaa.php",
"response": 100
}';echo

copy_to 字段,又名 referer_domain 没有生成,如果我尝试添加一个具有该名称的字段,则分词器也不会应用。

有什么想法吗?

最佳答案

copy_to 有效,但是,您假设因为您没有看到正在生成的字段,所以它不存在。

当您返回文档时(例如使用 GET/test/accesslogs/1),您看不到 _source 下的字段。这包含已编入索引的原始 文档。而且您没有索引任何 referer_domain 字段,只有 refererresponse。这就是您看不到它的原因。

但 Elasticsearch 确实在倒排索引中创建了该字段。如果存储了它,您可以使用它来查询、计算或检索。

让我举例说明我的陈述:

  • 您可以查询该字段,您将根据它返回结果。如果你真的想查看倒排索引中存储了什么,你可以这样做:
GET /test/accesslogs/_search
{
"fielddata_fields": ["referer","response","referer_domain"]
}
  • 如果您存储该字段,您还可以检索该字段:
  "referer_domain": {
"type": "string",
"analyzer": "accesslogs",
"store" : true
}

用这个:

GET /test/accesslogs/_search
{
"fields": ["referer","response","referer_domain"]
}

总之,copy_to 修改了索引 文档,而不是 文档。您可以查询具有该字段的文档,它会起作用,因为查询会查看倒排索引。如果您想检索该字段,您还需要存储它。但是您不会在 _source 字段中看到该字段,因为 _source 是已被索引的初始文档。并且初始文档不包含 referer_domain

关于elasticsearch - copy_to 和自定义分析器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30433189/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com