我想在ES中实现自动完成功能,我已经遵循了ES文档中的this教程
我的索引是:
{
"properties" : {
"suggest" : {
"type" : "completion"
},
"titleKeyword" : {
"type": "keyword"
}
}
}
}
我在titleKeyword
字段中输入文本值
然后我像下面这样查询
{
"suggest" : {
"my-suggestion" : {
"text" : "iphone",
"term" : {
"field" : "titleKeyword"
}
}
}
}
结果是:
...
"suggest": {
"my-suggestion": [
{
"text": "iphone",
"offset": 0,
"length": 6,
"options": []
}
]
}
预期结果是
options:[iphone x, iphone 11, iphone 11 pro, iphone 7]
Note:标题是完整的句子,例如“ iPhone x 64GB黑色”
据我从文档中了解到的,在创建文档时,我必须在“高级”中给出建议,这对我而言是不可能的,没有任何方法可以实现此功能而无需手动添加建议?
谢谢
根据您的要求,可以使用this SO answer字段轻松地解决(看起来就像您正在使用text
类型),并且可以使用简单的匹配查询,如下所示:
keyword
为{ "mappings": { "properties": { "model_name": { "type": "text" } } } }
的所有四种类型编制索引>
iphone
搜索查询({ "model_name" : "iphone x" } { "model_name" : "iphone 11" } { "model_name" : "iphone 11 pro" } { "model_name" : "iphone 7" }
将带来所有四个文档)
iphone
搜索结果
{ "query": { "match": { "model_name": { "query": "iphone" } } } }