Elasticsearch短语建议

时间:2015-08-28 16:33:22

标签: elasticsearch

elasticsearch documentation声明:

  

在实践中,这个建议者将能够根据共现和频率更好地决定选择哪些令牌。

我的索引中有一个文档,其中包含名称字段,内容为Bella Tank

要测试短语suggester,我发送以下查询:

curl -XPOST 'localhost:9200/my_index/_search?pretty' -d '{
  "suggest" : {
    "text" : "Bell Tank",
    "suggestion": {
      "phrase": {
        "field": "name",
        "size": 3
      }
    }
  }
}'

我收到的3条建议是:

"suggest" : {
  "suggestion" : [ {
    "text" : "Bell Tank",
    "offset" : 0,
    "length" : 9,
    "options" : [ {
      "text" : "ball tank",
      "score" : 0.03721739
    }, {
      "text" : "bella tank",
      "score" : 0.03721739
    }, {
      "text" : "bess tank",
      "score" : 0.034840018
    } ]
  } ]
}

如您所见,ball tankbella tank建议的得分相同,即使我的索引中只存在bella tank。它似乎根本不关心令牌的共同出现。

我唯一的选择是使用multifields创建name的非分析版本,还是我做错了?

1 个答案:

答案 0 :(得分:1)

您需要在建议的字段上使用shingle filter。多字段非常适合这种情况,因为您可能不希望用带状疱疹搜索。您最多可以使用max_shingle_size

肯定是bug,文档没有提到这一点。

了解wikipedia如何设置其建议分析器。它不完美,但它是一个良好的开端。