Elasticsearch,按确切字符串匹配排序
问题描述:
我想对结果进行排序,以便如果某个特定字段(比如'first_name')等于确切值(比如'Bob'),那么首先返回那些文档。Elasticsearch,按确切字符串匹配排序
这将导致所有的文档,其中first_name正好是'Bob',会先返回,然后是所有其他文档。请注意,我并不打算排除first_name不是“Bob”的文档,只需对它们进行排序,使它们在所有Bob之后返回。
我明白Elasticsearch是如何进行数字或字母排序的,但是我找不到涵盖这种排序类型的文档的任何部分。
这是可能的,如果是这样,如何?
答
一个解决方案是操纵名字字段中包含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:
查询的时间提升的主要工具,您可以使用调整 相关性。任何类型的查询都会接受一个提升参数。设置一个 增加2不会简单地加倍最后的_score;应用的实际提升值 经过规范化和一些内部优化。然而,它确实意味着,随着2 升压的条款是两倍重要的,因为与1
升压的条款含义,如果你也想“弗雷德”的到来提前鲍勃你可以只在上面的例子中用3个因子提升它。