2016-05-11 5 views
1

私はelasticsearchを使用しています。私はdocの中に以下のフィールドを持っています。 "sale_start" 日付と "sale_end" 日付が間にある場合elasticsearchデータ範囲が異なる2つのフィールドで照会する方法

:私はのようにあるべきデータを照会する

sale_start

sale_end

SALE_PRICE

selling_price

現在の日付

「sale_start」日付あれば、それはSALE_PRICE

と価格帯の条件と一致する必要がありますし、「sale_end」日付が現在の日付

の間ではありません、それは私がselling_price

と価格帯の条件と一致する必要があります多くを検索しましたが、このような条件を書く方法を見つけることができませんでした。私はelasticsearchにも新しいです。私が得た場合には事前に感謝

答えて

1

はあなたの要件が正しく、それはこのように表現することができます

  • bool/shouldは、主に2つの例が含まれています
    1. 現在の日付nowは区間です[ sale_start,sale_end]、およびsale_priceは価格の範囲内です。私は任意に区間[1、1000]を選択したことに注意してください。ただし、自由に変更することができます。
    2. 現在の日付nowは、sale_startの前か、sale_endの後のいずれかであり、selling_priceは[1,1000]の価格帯です。

問合せ:

{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "bool": { 
      "must": [ 
       { 
       "range": { 
        "sale_start": { 
        "lt": "now" 
        } 
       } 
       }, 
       { 
       "range": { 
        "sale_end": { 
        "gt": "now" 
        } 
       } 
       }, 
       { 
       "range": { 
        "sale_price": { 
        "gt": 1, 
        "lt": 1000 
        } 
       } 
       } 
      ] 
      } 
     }, 
     { 
      "bool": { 
      "should": [ 
       { 
       "range": { 
        "sale_start": { 
        "gt": "now" 
        } 
       } 
       }, 
       { 
       "range": { 
        "sale_end": { 
        "lt": "now" 
        } 
       } 
       } 
      ], 
      "must": [ 
       { 
       "range": { 
        "selling_price": { 
        "gt": 1, 
        "lt": 1000 
        } 
       } 
       } 
      ] 
      } 
     } 
     ] 
    } 
    } 
} 
+0

はあなたのためにこの仕事をしましたか? – Val

関連する問題