2

我有一个分析器可以将 IBM 转换如下: 1: ibm[0, 5] 1: i[0, 1] 2: b[2, 3] 3: m[4, 5] 3: ibm[0, 5 ]。因此,IBM 被索引为 ibm、ibm 和 ibm。

我的理解是查询搜索也会被分析。我的问题是当搜索词是 IBM 时预期的行为是什么?我期待 Elastic Search 能找到 IBM 和 IBM 等文档,但它没有找到后者。我的期望是搜索 IBM 将等同于搜索 ibm OR ibm OR ib m。那是因为这些标记是由分析器添加的。如果搜索词是 IBM,则找到两个文档,这意味着分析器在索引时按预期工作。但是添加令牌的分析器在搜索时的预期行为是什么?

这是具体的调用:

POST http://hostl.com:9200/entities/_search?pretty=true HTTP/1.1 接受:application/json 内容类型:application/json 主机:kodkods:9200 内容长度:218 预期:100-继续

{
  "size": 500,
  "query": {
    "query_string": {
      "query": "I.B.M.",
      "default_field": "contents",
      "default_operator": "and",
      "analyzer": "analyzer_text_english"
    }
  }
}

先感谢您。

4

1 回答 1

0

你的分析器可能是罪魁祸首,运行 curl localhost:9200/entities/_analyze -D "IBM",看看你想出了什么。

我敢打赌,它会将其分解为单独的字母 I、B 和 M,并分别搜索包含所有这些字母的文档。这样像“IB going M”这样的文档就会匹配

我建议您将单词分隔符上的 catenate_all 设置设置为 true,这应该可以解决问题

于 2013-06-04T07:32:56.980 回答