例如,如果我有以下文档:
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/