【问题标题】:Elasticsearch matched results on top and remaining after themElasticsearch 匹配结果在顶部并保留在它们之后
【发布时间】:2021-09-20 12:28:56
【问题描述】:

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

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

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

以上查询结果只匹配。但我需要所有匹配结果的结果。还有sortcreated_at。怎么做?

我试过了:

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

但结果总是为零。

【问题讨论】:

    标签: elasticsearch elasticsearch-dsl


    【解决方案1】:

    您可以通过 should 使用布尔查询。

    由于您想要所有文档,您可以使用match_allshould 只影响评分,不影响是否包含文档。

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

    此外,sort 可以采用一个数组,因此您可以传入多个参数,根据这些参数对结果进行排序。

    【讨论】:

    • 当我从 Kibana 尝试它时。与您在回答中提到的不同,应该采取数组。应该在里面问另一个查询词。
    • 我已经修正了语法,现在检查。
    • 我认为标签也需要更改。
    • 我试过结果为零..更新的问题请检查。
    • 你可以试试 match_all 吗?我改变了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多