我想对结果进行排序,例如,如果某个特定字段(让我们说' first_name')等于一个确切的值(让我们说' Bob&# 39;),然后首先返回这些文件。
这将导致first_name完全' Bob'的所有文档将首先返回,然后返回所有其他文档。请注意,我并不打算排除first_name不是“Bob”的文档,只是对它们进行排序,以便它们在所有Bobs之后返回。
我理解Elasticsearch中的数字或字母排序是如何工作的,但我无法找到涵盖此类排序的文档的任何部分。
这是可能的,如果是的话,怎么样?
答案 0 :(得分:2)
一种解决方案是在名字字段中操纵包含Bob的结果的分数。
例如:
POST /test/users
{
"name": "Bob"
}
POST /test/users
{
"name": "Alice"
}
GET /test/users/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"name": {
"query": "Bob",
"boost" : 2
}
}
},
{
"match_all": {}
}
]
}
}
}
将按顺序返回Bob和Alice(分别大约为1和0.2)。
来自the book:
查询时间提升是您可以用来调整的主要工具 关联。任何类型的查询都接受boost参数。设置一个 2的提升不会简单地加倍最终的_score;实际的提升 应用的值通过标准化和一些内部 优化。但是,它确实意味着一个增强为2的子句 是一个增强1的子句的两倍重要。
意思是如果你也想让“Fred”领先于Bob,你可以在上面的例子中用3因子来提升它。