Elasticsearch,按精确字符串匹配排序

时间:2016-01-22 10:04:54

标签: elasticsearch

我想对结果进行排序,例如,如果某个特定字段(让我们说' first_name')等于一个确切的值(让我们说' Bob&# 39;),然后首先返回这些文件。

这将导致first_name完全' Bob'的所有文档将首先返回,然后返回所有其他文档。请注意,我并不打算排除first_name不是“Bob”的文档,只是对它们进行排序,以便它们在所有Bobs之后返回。

我理解Elasticsearch中的数字或字母排序是如何工作的,但我无法找到涵盖此类排序的文档的任何部分。

这是可能的,如果是的话,怎么样?

1 个答案:

答案 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因子来提升它。