2016-08-10 123 views
1

有什麼辦法在聚合時超越nGram過濾器嗎?彈性搜索:具有聚合的ngram過濾器

我有一個定義的ngram過濾器:

"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

對於那個fi如果您有自定義nGram分析器,您需要添加一個應該保留「原始」術語(使用standard分析器或字段應該是not_analyzed)或您希望在您的聚合中使用的術語的子字段。然後你的聚合應該指向你的field.sub_field字段。

好的,嘗試這種次優解(由於這是如何快速相比子場的方法),在不改變映射:

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

我不能改變的ngram分析器,也不適用於映射字段...我需要一種方法來建立ES查詢,以使聚合超過分析器....謝謝 – user3392362

+0

更新我的答案與次優解決方案。 –

+0

thx ...腳本解決方案將使其更容易加強改變映射的重點:) – user3392362