elasticsearch - Elasticsearch 自动完成建议器
问题描述
我想在 ES 中实现自动完成功能我已经按照ES 文档中的本教程进行操作
我的索引是:
{
"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]
注意:标题是完整的句子,例如“iPhone x 64gb black”
据我从文档中了解到,我必须在创建文档时“提前”给出建议,这在我的情况下是不可能的,有没有办法在不手动提出建议的情况下实现此功能?
谢谢
解决方案
对于这个简单的要求,无需使用难以理解的 Elasticsearch 建议器,其中的某些部分仍在开发中,有关构建高级自动完成时要注意的事项的更多信息在我的这个 SO 答案中。
满足您的要求,可以使用text
字段(看起来您正在使用keyword
类型)和简单的匹配查询轻松解决,如下所示:
索引定义
{
"mappings": {
"properties": {
"model_name": {
"type": "text"
}
}
}
}
索引所有 4 种类型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"
}
}
}
}
搜索结果
{
"_index": "so_auto",
"_type": "_doc",
"_id": "1",
"_score": 0.110377684,
"_source": {
"model_name": "iphone x"
}
},
{
"_index": "so_auto",
"_type": "_doc",
"_id": "2",
"_score": 0.110377684,
"_source": {
"model_name": "iphone 11"
}
},
{
"_index": "so_auto",
"_type": "_doc",
"_id": "4",
"_score": 0.110377684,
"_source": {
"model_name": "iphone 7"
}
},
{
"_index": "so_auto",
"_type": "_doc",
"_id": "3",
"_score": 0.09271726,
"_source": {
"model_name": "iphone 11 pro"
}
}
]
推荐阅读
- exception - Flutter:应用程序崩溃并出现运行时异常 - 已提交回复
- c# - 使用 EF 和 Postgresql 的用户定义顺序
- java - JNI 和构造函数
- android - 从改造响应中获取错误的数据类型
- swiftui - 在 SwiftUI 中使用自己的 ButtonStyle 在 tvOS 上无法选择按钮
- jenkins - 使用 jenkins 将 github 提交的代码自动拉到服务器
- kendo-ui - 将 kendo UI 树视图与 kendo ui 网格绑定
- playframework - Play WSClient url 无法访问
- html - 填充 html 自动搜索框并获取结果
- javascript - 我可以允许从客户端动态加载 JS 模块吗?