如何影响Elasticsearch自动建议查询首先返回完全匹配?

时间:2018-09-12 15:28:05

标签: elasticsearch

请考虑以下索引为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

1 个答案:

答案 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" ]
                }
            }
        }
    }
}

当然,这种方法需要对索引数据和搜索查询进行复杂的初步分析。

另一种选择是在索引时间为工作职位分配权重,但我认为这不适合您的情况。