2016-08-10 27 views
1

集約を実行する際にnGramフィルタを超える方法はありますか?弾性検索:集約したngramフィルタ

私は定義されたnグラムのフィルタがあります。

"ngram_filter": { 
      "type": "ngram", 
      "min_gram": "1", 
      "max_gram": "100" 
     } 

をし、私はそれに定義されたこのフィルタを持つフィールド上の集約にしたい:

私はバケットがフィルタリングされた結果を得る:

"buckets": [ 
     { 
      "key": "_", 
      "doc_count": 394 
     }, 
     { 
      "key": "a", 
      "doc_count": 365 
     }, 
     { 
      "key": "m", 
      "doc_count": 357 
     }, 
     { 
      "key": "i", 
      "doc_count": 344 
     }, 
     { 
      "key": "_d", 
      "doc_count": 341 
     }, 
     { 
      "key": "d", 
      "doc_count": 341 
     }, 
     { 
      "key": "e", 
      "doc_count": 319 
     }, 
     { 
      "key": "r", 
      "doc_count": 289 
     }, 
     { 
      "key": "l", 
      "doc_count": 260 
     }, 
     { 
      "key": "l_", 
      "doc_count": 221 
     } 
    ] 

また、私はngramアナライザを変更したくない...

答えて

1

カスタムnGramアナライザが設定されている場合は、元の用語(standardアナライザを使用するか、フィールドはnot_analyzed)または集計に含める必要があるサブフィールドを追加する必要があります。集計がfield.sub_fieldフィールドを指している必要があります。

[OK]を、マッピングを変更せずに、(原因これは、サブフィールドのアプローチと比較してどのくらいの速へ)このサブ最適な解決策を試してください:

{ 
    "aggs": { 
    "whatever": { 
     "terms": { 
     "script": "_source['yourFieldName']" 
     } 
    } 
    } 
} 
+0

私はnグラム・アナライザものマッピングを変更することはできません。フィールド...私は集計がアナライザを上回るようにesクエリを構築する方法が必要です....ありがとう – user3392362

+0

私の答えは準最適解で更新されました。 –

+0

thx ...スクリプトソリューションは、マッピングを変更する際のポイントを強化するのを容易にします:) – user3392362