ElasticSearch 中的奇怪搜索

Strange search in ElasticSearch

提问人:d7d1cd 提问时间:11/16/2023 最后编辑:d7d1cd 更新时间:11/17/2023 访问量:38

问:

我在elasticsearch中有某种数据集。执行以下查询时

curl -XPOST 'localhost:9200/_search?pretty' -d
'{
    "query": {
        "query_string": { 
            "fields": ["258"],
            "query": "*toco*"
        }
    }
}'

我得到一个结果,其中字段 258 是 [PhotoComment]。但是,如果将查询更改为:

curl -XPOST 'localhost:9200/_search?pretty' -d
'{
    "query": {
        "query_string": { 
            "fields": ["258"],
            "query": "*omme*"
        }
    }
}'

则搜索结果为空。

解释为什么会这样?

弹性搜索

评论

0赞 Val 11/16/2023
您能否分享字段 258 的映射以及该字段的配置索引时间和搜索时间分析器?
0赞 d7d1cd 11/16/2023
映射 “258” : { “type” : “string”, “index” : “analyzed”, “norms” : { “enabled” : false } }
0赞 Val 11/16/2023
非常旧的版本,比如 2.x 的东西,对吧?
0赞 d7d1cd 11/16/2023
是,版本 2.3
0赞 Val 11/16/2023
您的两个查询在最近的 8.x 版本上都正常工作,并按预期返回文档

答:

0赞 d7d1cd 11/17/2023 #1

我设法找到了这种奇怪行为的原因。它位于分析中使用的过滤器之一中。设置如下:

"analysis": {
     "analyzer": {
         "default": {
             "type": "custom",
             "tokenizer": "standard",
             "filter": [
                 "lowercase",
                 "english_stemmer",
             ]
         }
     },
     "filter": {
         "english_stemmer": {
             "type": "snowball",
             "language": "English"
         }
     }
}

调用分析器显示,过滤器“english_stemmer”后面的文本“[PhotoComment]”变为“photocom”,文本“*omme*”变为“omm”。因此,后者不包括在“photocom”中,并且找不到记录。

我没有找到解释为什么“english_stemmer”过滤器会以这种方式运行。