【问题标题】:Elasticsearch returns unmatched resultsElasticsearch 返回不匹配的结果
【发布时间】:2026-02-04 04:15:01
【问题描述】:

我是 ELlasticsearch 的新手,在 ES 返回分析字段的不匹配结果方面需要您的帮助。 我有一个自定义分析器如下:

 "analyzer": {
            "testing_analyzer": {
               "type": "custom",
               "char_filter": "html_strip",
               "tokenizer": "standard",
               "filter": [
                  "lowercase",
                  "asciifolding",
                  "snowball",
                  "stop"
               ]
            },
            "testing_search_analyzer": {
               "type": "custom",
               "char_filter": "html_strip",
               "tokenizer": "standard",
               "filter": [
                  "lowercase",
                  "asciifolding"
               ]
            }
         }

我已将此分析器设置为索引和搜索中的字段,如下所示。

"name":
{
"type": "string",
"analyzer": "testing_analyzer",
"search_analyzer": "testing_search_analyzer"
}

但是当搜索名称“università di bologna”时,它返回的第一个结果记录具有相同的匹配,但其他一些记录不匹配(下面的结果中的第二个记录):

记录1:

 [ "Università di Bologna", "University of Bologna", "CNR", "Università di Pisa", "University of Pisa", "Mineraria e Delle Tecnologie Ambientali" ]

记录2:

[ "University of Salerno", "Università di Salerno" ]

查询:

 {
   "fields": [
      "doc_id",
      "name"
   ],
   "query": {
      "match": {
         "name": "Università di bologna"
      }
   }
}

有什么帮助吗?!

【问题讨论】:

  • testing_search_analyzer 是如何定义的?
  • "testing_search_analyzer": { "type": "custom", "char_filter": "html_strip" , "tokenizer": "standard", "filter": [ "lowercase", "asciifolding"] },
  • 你也可以显示查询吗?
  • curl -XGET 'localhost:9200/users/_search?pretty=true' -d ' { "fields" : ["doc_id" , "name"], "query": { "match": { "name": "Università迪博洛尼亚" } } }'

标签: elasticsearch


【解决方案1】:

结果符合预期。 默认情况下,匹配查询会对tokenizer 生成的标记进行“或”运算。

尝试将查询更改为以下内容:

{
   "fields": [
      "doc_id",
      "name"
   ],
   "query": {
      "match": {
         "name": {
            "query": "Università di bologna",
            "operator": "and"
         }
      }
   }
}

【讨论】:

  • 按照说明添加“and”运算符后就可以了!!!太感谢了。顺便说一句,为什么不添加“and”运算符,一些没有精确搜索词的记录的得分比精确匹配的记录高?
  • 尝试开启explain,它可能暗示为什么会发生这种情况
  • 如果答案是有帮助的,请点赞并接受谢谢:)
  • 确定np!看起来它没有被接受 :) 但只要你有机会,谢谢。
  • 刚刚做了 :) 请您确认一下吗?
最近更新 更多