请考虑以下索引为3个单独文档的职位:
[ "Software Developer Analyst, Senior",
"Software Developer and Analyst - iOS, iPad, . Net",
"Software Developer" ]
在现实世界中,“软件开发人员”有数百种版本,因此,如果自动完成功能仅返回10个文档,则很可能会被掩埋。
是否可以进行某种排序以偏爱完全匹配?
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-completion.html
答案 0 :(得分:0)
完成建议程序使用FST(在索引时建立的特殊内存数据结构)进行快速搜索,因此有可能仅在索引时才影响以后查询的结果(请参阅与您的问题有关的issue在GitHub上。)
您可以为自己的建议者添加context
。例如,可能是category
字段,其中将包含特定软件开发人员的功能。应该以某种方式从将要建立索引的数据中检索这些功能:
PUT jobs/_doc/1
{
"suggest": "Software Developer and Analyst - iOS, iPad, . Net",
"category": ["apple", "ios", "ipad", "dotnet"]
}
在查询时,应先尝试从用户输入中检索此类功能,然后再将其发送到ES。例如,如果用户键入“ java senior software developer”,则可以将此输入转换为查询
POST jobs/_search
{
"suggest": {
"jobs_suggestion" : {
"prefix" : "java senior software developer",
"completion" : {
"field" : "suggest",
"size": 10,
"contexts": {
"category_context": [ "java", "senior" ]
}
}
}
}
}
当然,这种方法需要对索引数据和搜索查询进行复杂的初步分析。
另一种选择是在索引时间为工作职位分配权重,但我认为这不适合您的情况。