排序顺序elasticsearch等相关

时间:2017-04-21 07:37:32

标签: elasticsearch

我有以下文件:
GET /books

[{
    "title": "a book",
    "certified": true,
    "publisherId": 1
},
{   
    "title": "book a",
    "certified": false
    "publisherId": 2
}]

当我在title上进行简单的查询字符串查询时,我希望在_score上订购结果。
如果_score相等,则应首先显示认证的书籍 如果_score相等且书籍已通过认证,则应首先显示 publisherId 1 的图书。

如何在ES中实现这些类型的决胜局规则/排序规则?

我想做这样的事情,但显然它不起作用:

{
    "query": {},
    "sort": [
        {"_score": {"order": "desc"},
        {"term": {"certified": true}},
        {"term": {"publisherId": "1"}}
    ]
}

1 个答案:

答案 0 :(得分:1)

您可以根据bool/shouldcertified约束使用publisherId查询来提升文档。

如果您删除以下查询中的bool/should,则所有文档的评分方式都相同。添加bool/should会增强certifiedpublisherId: 1

的文档
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "title": {
              "query": "book",
              "boost": 3
            }
          }
        }
      ],
      "should": [
        {
          "term": {
            "certified": true
          }
        },
        {
          "term": {
            "publisherId": 1
          }
        }
      ]
    }
  },
  "sort": [
    {
      "_score": {
        "order": "desc"
      }
    }
  ]
}