有没有办法在Elasticsearch功能“完成建议器”中实现自定义排序,而不在索引期间提供包含“权重”属性的单独字段?
我的目标是根据字符串长度(或相似的相关性)对建议进行排序,以便短字的得分高于较长的字。
以下是我想要提供自动完成功能的字段的映射示例:
...
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
}
]
...
我正在尝试这样做,因为我在应用程序的搜索字段上使用自动完成功能。我在搜索字段下方的下拉菜单中显示了10个最高点击率。我的问题是当我有很多技能可供选择时,当我输入字母“C”时,编程语言“C”的实际技能得分低于较长的单词,因此没有显示在我的下拉列表中前10名。