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个因子提升它。