我希望对结果进行排序,使得如果一个特定字段(比如'first_name')等于某个确切的值(比如'Bob'),那么这些文档会首先被返回。
这将导致所有名字为'Bob'的文档被首先返回,然后才是其他文档。请注意,我不打算排除那些名字不是'Bob'的文档,只是将它们排序,以便在所有Bobs之后返回。
我了解如何在Elasticsearch中进行数字或字母排序,但我找不到文档中涵盖这种类型排序的部分。
这是否可能实现,如果可以,应该怎么做?
我希望对结果进行排序,使得如果一个特定字段(比如'first_name')等于某个确切的值(比如'Bob'),那么这些文档会首先被返回。
这将导致所有名字为'Bob'的文档被首先返回,然后才是其他文档。请注意,我不打算排除那些名字不是'Bob'的文档,只是将它们排序,以便在所有Bobs之后返回。
我了解如何在Elasticsearch中进行数字或字母排序,但我找不到文档中涵盖这种类型排序的部分。
这是否可能实现,如果可以,应该怎么做?
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)。
来自该书:
查询时间加权是您可以用来调整相关性的主要工具。任何类型的查询都接受一个boost参数。将boost设置为2并不仅仅是将最终的_score翻倍;实际应用的boost值会经过标准化和一些内部优化。然而,这意味着具有boost值为2的子句比具有boost值为1的子句重要两倍。
这意味着,如果您还希望“Fred”在Bob之前出现,您可以在上面的示例中使用3倍因子进行增强。