ElasticSearch已过滤查询

时间:2017-02-08 14:46:47

标签: c# .net elasticsearch

我创建了一个弹性搜索索引,简单搜索的结果如下:

{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 11,
    "max_score": 1,
    "hits": [
      {
        "_index": "shop-bestellung",
        "_type": "bestellung",
        "_id": "dc144b04-8e73-4ea5-9f73-95c01768fd26",
        "_score": 1,
        "_source": {
          "id": "dc144b04-8e73-4ea5-9f73-95c01768fd26",
          "bestellnummer": "B-20170302-026",
          "shopid": "0143d767-8986-432a-a15d-00e1c4862b24",
          "shopname": "DeeDa",
          "erstelltVon": "5663bb4b-fc44-46ca-b875-a3487b588b24",
          "bestellername": "Max Mann",
          "bestelldatum": "2017-01-30T23:00:00Z",
          "bestellpositionen": []
        }
      }
    ]
  }
}

我尝试创建一个过滤器,它应该包含以下三个限制:

  • 查询文字
  • 日期范围
  • 过滤特定字段:“erstelltVon”

我的过滤器仅包含查询文本和日期范围:

{  
   "query":{  
      "query_string":{  
         "fields":[  
            "bestellnummer",
            "bestellername",
            "bestelldatum",
            "erstelltVon",
            "bestellpositionen.artikelname",
            "bestellpositionen.artikelnummer",
            "bestellpositionen.referenznummer"
         ],
         "query":"*"
      }
   },
    "filter": {
        "range" : {
            "bestelldatum" : {
                "gte": "2017-02-04T23:00:00Z",
                "lte": "now",
                "time_zone": "+01:00"
            }
        }
    }
}

我想添加第三个过滤器:

“erstelltVon”:“5663bb4b-fc44-46ca-b875-a3487b588b24”

我该怎么做?

1 个答案:

答案 0 :(得分:2)

您需要使用boolean filter

以下是如何使用它:

  "filter": {
    "bool" : {
      "must": [
        // FIRST FILTER
        {
          "range" : {
            "bestelldatum" : {
              "gte": "2017-02-04T23:00:00Z",
              "lte": "now",
              "time_zone": "+01:00"
            }
          }
        },
        {
          // YOUR OTHER FILTER HERE
        }
      ]
    }

改变"必须"到"应该"如果你想使用OR而不是AND。