首页 > 解决方案 > elasticsearch中的同义词与复数短语不匹配

问题描述

在 Elasticsearch 上看到同义词的奇怪行为:

假设我的同义词文件具有以下内容:

orange => apples & oranges

当我搜索橙色时:

POST my_index/_search
{
  "suggest" : {
    "name_suggest" : {
      "text" : "orange",
      "completion" : {
        "field" : "name_suggest",
        "size" : 7,
        "fuzzy" :{}
      }
    }
  }
}

它与名称为“apples & oranges”的文档不匹配

但是,如果我搜索“apples &”

POST new_sector_index,org_index/_search
{
  "suggest" : {
    "name_suggest" : {
      "text" : "apples &",
      "completion" : {
        "field" : "name_suggest",
        "size" : 7,
        "fuzzy" :{}
      }
    }
  }
}

它确实与名称为“apples & oranges”的文档匹配

即使我在文件中定义了同义词,我也无法理解为什么“橙色”不匹配。我知道同义词的索引正确,因为同一文件中的其他同义词正在工作。

另外,想提一下我正在使用带有lowercase,stopkstem过滤器和标记器的 synonym_analyzer whitespace。我可以想象 apples & oranges 被称为 'apple', '&' , 'orange' 因此不匹配,但在这种情况下,只是短语 'apples &' 也不应该匹配?

标签: elasticsearch

解决方案


与号 (&) 的使用导致了奇怪的行为。

如果我只是在同义词文件中执行以下操作,

orange => apples

它正确返回名称为“apples & oranges”的预期文档

不知道为什么apples & oranges在同义词中不起作用。我尝试删除stopkstem过滤,但行为保持不变


推荐阅读