【发布时间】:2019-05-02 21:03:53
【问题描述】:
我正在我的应用程序中实现 Completion Suggester,这是我的要求:
我使用的是 Elasticsearch 5.5.3(支持多种类型)。我的 Elasticsearch 中有大约 10 种类型,每种类型都有大约 10 个字符串字段。我想要做的是制作一个搜索框,当用户开始使用完成提示器输入时,它将完成短语(这 10 种类型的任何字段)。最好的方法是什么?使用 _all 字段是个好主意吗?
【问题讨论】:
我正在我的应用程序中实现 Completion Suggester,这是我的要求:
我使用的是 Elasticsearch 5.5.3(支持多种类型)。我的 Elasticsearch 中有大约 10 种类型,每种类型都有大约 10 个字符串字段。我想要做的是制作一个搜索框,当用户开始使用完成提示器输入时,它将完成短语(这 10 种类型的任何字段)。最好的方法是什么?使用 _all 字段是个好主意吗?
【问题讨论】:
是的,使用completion 类型的"custom all field" 字段是完全可行的
首先,创建包含所有类型的索引,并确保copy 类型为completion 的自定义字段中的每个字段:
PUT my_index
{
"mappings": {
"type1": {
"properties": {
"field1": {
"type": "text",
"copy_to": "my_all"
},
"field2": {
"type": "text",
"copy_to": "my_all"
},
"my_all": {
"type": "completion"
}
}
},
"type1": {
"properties": {
"field1": {
"type": "text",
"copy_to": "my_all"
},
"field2": {
"type": "text",
"copy_to": "my_all"
},
"my_all": {
"type": "completion"
}
}
}
}
}
然后,您将像这样查询完成数据(即不指定任何映射类型并使用常见的my_all 字段):
POST my_index/_search
{
"suggest": {
"my-suggest": {
"prefix": "bla",
"completion": {
"field": "my_all"
}
}
}
}
【讨论】: