Elasticsearch完成建议,自定义排序

时间:2014-10-18 09:30:54

标签: autocomplete elasticsearch

有没有办法在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名。

0 个答案:

没有答案