如何在弹性搜索中限制然后排序

时间:2015-08-20 11:39:14

标签: elasticsearch

我想首先将弹性搜索返回的结果(按_score排序)限制为1000,然后按特定字段对这1000个结果进行排序。

SQL中的一个例子是 -

select name,count,score 
from 
  (select name,count,score from users order by score limit 1000) A 
order by count

如何在弹性搜索中执行此操作?

2 个答案:

答案 0 :(得分:1)

您可以使用辅助排序选项来实现此目的。按以下顺序排序

  1. _score(elasticsearch score)
  2. sort_field(根据您的Q计算)
  3. Bellow查询将搜索文档并首先使用elasticsearch计算得分值进行排序,然后第二级排序将应用于字段计数,大小(限制)将为1000,因此只有1000个文档返回给您。

    <强>示例

    {
      "size": 1000,
      "query": {
        "match_all": {}
      },
      "sort": [
        "_score",
        {
          "count": {
            "order": "asc"
          }
        }
      ],
      "fields": [
        "name",
        "count",
        "score"
      ]
    }
    

答案 1 :(得分:0)

尝试以下查询

{
"filtered" : {
    "filter" : {
         "limit" : {"value" : 100}
     },
    "sort" : [
        {"score " : {"order" : "asc"}}
    ]
    "query" : {
        "term" : { "name" : "shay" }
    }
  }
}