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 tank
和bella tank
建议的得分相同,即使我的索引中只存在bella tank
。它似乎根本不关心令牌的共同出现。
我唯一的选择是使用multifields创建name
的非分析版本,还是我做错了?
答案 0 :(得分:1)
您需要在建议的字段上使用shingle filter。多字段非常适合这种情况,因为您可能不希望用带状疱疹搜索。您最多可以使用max_shingle_size
。
肯定是bug,文档没有提到这一点。
了解wikipedia如何设置其建议分析器。它不完美,但它是一个良好的开端。