Elasticsearch 匹配的结果排在最前面,排在后面

Elasticsearch matched results on top and remaining after them

我正在我的应用程序中使用 elasticsearch,我是 Elasticsearch 的新手。

我有一个名为 files 的索引,其中有一些 tags 与之关联。我想使用 tags 查询它们。可能是这样的

{
  "query": {
    "terms": {
      "tags": [
        "xxx",
        "yyy"
      ]
    }
  },
  "sort": [
    {
      "created_at": {
        "order": "desc"
      }
    }
  ]
}    

以上查询结果仅为符合条件的。但我需要所有匹配结果的结果。还有 sort created_at。怎么做?

我试过这个:

{
  "query": {
    "bool": {
      "should": [
        {
          "terms": {
            "name": [
              "cool",
              "co"
            ]
          }
        }
      ],
      "minimum_should_match": 0
    }
  },
  "sort": [
    {
      "_score": {
        "order": "desc"
      }
    },
    {
      "created_at": {
        "order": "desc"
      }
    }
  ]
}

但结果总是零。

您可以使用 should 的 bool 查询。

既然你想要所有的文档,你可以使用一个match_allshould只影响评分,不影响是否包含文档。

{
  "query": {
    "bool": {
    "must" :
     {
               "match_all": { }
            }
    },
    "should": [
 {  "terms" : {
      "tags": [
        "xxx",
        "yyy"
      ]
    } }]
  },
    "sort": [
        { "_score": 
           { "order": "desc" 
         }
        },
        { "created_at":  
         { "order": "desc" 
        } 
       }       
    ]
}  

另外,sort 可以接受一个数组,这样你就可以传入多个参数来对结果进行排序。