Autocomplete Elasticsearch完成建议,自定义订购
是否有一种方法可以在Elasticsearch功能“Completion suggester”中实现自定义排序,而无需在索引期间提供包含“权重”属性的单独字段 我的目标是根据字符串长度(或类似的相关性)对建议进行排序,以便短单词的得分高于长单词 下面是我想提供自动完成功能的字段的映射示例:Autocomplete Elasticsearch完成建议,自定义订购,autocomplete,
elasticsearch,Autocomplete,
elasticsearch,是否有一种方法可以在Elasticsearch功能“Completion suggester”中实现自定义排序,而无需在索引期间提供包含“权重”属性的单独字段 我的目标是根据字符串长度(或类似的相关性)对建议进行排序,以便短单词的得分高于长单词 下面是我想提供自动完成功能的字段的映射示例: ... skills: { type: "nested", include_in_parent: true, properties: { name: {
...
skills: {
type: "nested",
include_in_parent: true,
properties: {
name: {
type: "multi_field",
fields: {
name: {type: "string"},
original: {type : "string", analyzer : "string_lowercase", include_in_all : false},
suggest: {type: "completion", index_analyzer: "simple", search_analyzer: "simple"}
}
}
}
}
...
这里我提供了几个不同的字段,“原始”字段用于在查询中过滤,“建议”字段用于完成建议
索引时我的数据可能如下所示:
...
"skills": [
{
"name": "C",
"source": [
"linkedin"
]
},
{
"name": "Computer Science",
"source": [
"stackoverflow"
]
},
]
...
...
"skills_suggest": [
{
"input": ["C"],
"output": "C",
"weight" : 100
},
{
"input": ["Computer Science"],
"output": "Computer Science",
"weight" : 50
}
]
...
我试图避免的是,在编制索引时必须提供一个额外字段,并自己为其添加权重,如下所示:
...
"skills": [
{
"name": "C",
"source": [
"linkedin"
]
},
{
"name": "Computer Science",
"source": [
"stackoverflow"
]
},
]
...
...
"skills_suggest": [
{
"input": ["C"],
"output": "C",
"weight" : 100
},
{
"input": ["Computer Science"],
"output": "Computer Science",
"weight" : 50
}
]
...
我之所以尝试这样做,是因为我在应用程序中的搜索字段上使用了自动完成功能。我在搜索字段下方的下拉列表中显示了10个最高点击率。我的问题是,当我有这么多技能可供选择时,当我输入字母“C”时,编程语言“C”的实际技能得分低于较长的单词,因此没有出现在我的前10名下拉列表中