例如,如果我有以下文档:

1. Casa Road
2. Jalan Casa

假设我的查询字词是“cas” ...在搜索时,两个文档的得分均相同。我希望casa出现的较早(即此处的文档1),并在查询输出中排名第一。

我正在使用edgeNGram分析器。另外,我正在使用聚合,因此无法使用查询后发生的常规排序。

最佳答案

您可以使用Bool Query来增强以搜索查询开头的项目:

{
    "bool" : {
        "must" : {
            "match" : { "name" : "cas" }
        },
        "should": {
            "prefix" : { "name" : "cas" }
        },
    }
}

我假设您提供的值在name字段中,并且未对该字段进行分析。如果进行了分析,则可以查看此answer以获取更多想法。

它的工作方式是:
  • 这两个文档都将与must子句中的查询匹配,并且将获得相同的分数。如果文档与must查询不匹配,则不会包含该文档。
  • 只有带有以cas开头的术语的文档才能匹配should子句中的查询,从而使其得分更高。如果文档与should查询不匹配,则不会排除该文档。
  • 关于elasticsearch - elasticsearch:如何将出现的第一个单词或短语排名更高,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32713281/

    10-10 08:12