2016-07-19 8 views
0

私は、ex:{"name": "Sam-sung"} {"name": "Motion:Systems"}のために、分析された形でブランド名を保管する特定の文書を持っています。私はこれらのブランドをタイムスタンプの下で集約したいと思うケースがあります。 弾性検索:分析フィールドの集計クエリを分析できない可能性がありますか?

{ 
"size": 0, 
"aggs": { 
    "filtered_aggs": { 
    "filter": { 
    "range": { 
     "@timestamp":{ 
     "gte":"2016-07-18T14:23:41.459Z", 
     "lte":"2016-07-18T14:53:10.017Z" 
     } 
    } 
    }, 
    "aggs": { 
    "execute_time": { 
     "terms": { 
     "field": "brands", 
     "size": 0 
     } 
     } 
    } 
    } 
} 
} 

、続くものの、戻り結果が

{ 
... 
"aggregations": { 
    "states": { 
    "buckets": [ 
     { 
      "key": "Sam", 
      "doc_count": 5 
     }, 
     { 
      "key": "sung", 
      "doc_count": 5 
     }, 
     { 
      "key": "Motion", 
      "doc_count": 1 
     }, 
     { 
      "key": "Systems", 
      "doc_count": 1 
     } 
     ] 
    } 
    } 
} 

になりますが、私は結果にしたいとしての私のクエリは

{ 
... 
"aggregations": { 
    "states": { 
    "buckets": [ 
     { 
      "key": "Sam-sung", 
      "doc_count": 5 
     }, 
     { 
      "key": "Motion:Systems", 
      "doc_count": 1 
     } 
     ] 
    } 
    } 
} 

は私がいないことができますする方法はありますされます弾性検索で分析フィールドの分析クエリ?

答えて

0

brandsフィールドにnot_analyzedサブフィールドを追加し、そのフィールドに集計する必要があります。

PUT /index/_mapping/type 
{ 
    "properties": { 
     "brands": { 
     "type": "string", 
     "fields": { 
      "raw": { 
       "type": "string", 
       "index": "not_analyzed" 
      } 
     } 
     } 
    } 
} 

その後、あなたは完全に新しいサブフィールドbrands.rawを移入するためにあなたのデータのインデックスを再作成する必要があります。

最後に、あなたはこれにあなたのクエリを変更することができます。

POST index/_search 
{ 
"size": 0, 
"aggs": { 
    "filtered_aggs": { 
    "filter": { 
    "range": { 
     "@timestamp":{ 
     "gte":"2016-07-18T14:23:41.459Z", 
     "lte":"2016-07-18T14:53:10.017Z" 
     } 
    } 
    }, 
    "aggs": { 
    "execute_time": { 
     "terms": { 
     "field": "brands.raw", 
     "size": 0 
     } 
     } 
    } 
    } 
} 
} 
+0

をあなたはこれを試してみましたか?それは動作しましたか? – Val