2017-02-08 13 views
1

私は弾性検索インデックスを作成し、簡単な検索の結果は次のようになります。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": [] 
         } 
         } 
        ] 
        } 
    } 
    

    私は3つの制限を次の必要がありconsitsフィルタを作成しようとしました特定のフィールドにテキスト

  • 日付範囲
  • フィルタ: "erstelltVon"

マイフィルタクエリテキストと日付範囲の唯一のconsits:

{ 
    "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" 
      } 
     } 
    } 
} 

私は第3のフィルタを追加したいと思います:

"erstelltVon": "5663bb4b-fc44-46ca-b875-a3487b588b24を"

どうすればいいですか?

答えて

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で使用したい場合:ここで

は、それを使用する方法です。

関連する問題