2016-08-05 11 views
0

日付フィールドがdateFieldのいずれの文書でも、year(dateField) = 2016となっています。要するに弾性検索:1年以内の文書

、私はあなただけの単年度をチェックしたい場合は2016年

答えて

3

dateFieldを通知したすべての文書を取得する必要があり、最も簡単な方法は、あなたがいることを確認したrangeフィルタを使用することですdateField 1月1日と2016年の12月31日の間にある:

POST index/_search 
{ 
    "query": { 
    "bool": { 
     "filter": [ 
     { 
      "range": { 
      "dateField": { 
       "gte": "2016-01-01T00:00:00.000Z", 
       "lt": "2017-01-01T00:00:00.000Z" 
      } 
      } 
     } 
     ] 
    } 
    } 
} 

次の2つの他のソリューションがあります:あなたはを作成

  1. をインデックス作成時に、ドキュメント内のフィールドあなたが最初のオプションは、よりパフォーマンスですが、あなたの場合には

検索時にscriptフィルタを使用

  • termまたはrangeクエリ/フィルタを使用して、それを検索することができますので、 2番目のオプションを試してみたい場合は、次のようになります。

    POST index/_search 
    { 
        "query": { 
        "bool": { 
         "filter": [ 
         { 
          "script": { 
          "script": { 
           "inline": "doc.dateField.date.getYear() == year", 
           "params": { 
           "year": 2016 
           } 
          } 
          } 
         } 
         ] 
        } 
        } 
    }