2014-10-31 76 views
2

我有一個ES索引,其中包含來自某些科學實驗的參數數據。按關鍵字長度篩選「術語聚合」

我有以下條款聚集:

{ 
    "aggs": { 
     "variables": { 
      "terms": { 
       "field": "value", 
       "size": 100 
      } 
     } 
    }, 
    "size": 0 
} 

它返回這樣的結果:

{ 
    "took" : 3, 
    "timed_out" : false, 
    "_shards" : { 
     "total" : 5, 
     "successful" : 5, 
     "failed" : 0 
    }, 
    "hits" : { 
     "total" : 9928, 
     "max_score" : 0.0, 
     "hits" : [ ] 
    }, 
    "aggregations" : { 
     "variables" : { 
      "buckets" : [ { 
       "key" : "00", 
       "doc_count" : 158 
      }, { 
       "key" : "1", 
       "doc_count" : 158 
      }, { 
       "key" : "2", 
       "doc_count" : 158 
      }, { 
       "key" : "pressure", 
       "doc_count" : 158 
      }, { 
       "key" : "seconds", 
       "doc_count" : 158 
      }, { 
       "key" : "since", 
       "doc_count" : 158 
      }, { 
       "key" : "s", 
        "doc_count" : 156 
      }, { 
       "key" : "speed", 
        "doc_count" : 127 
      }, { 
       "key" : "sample", 
        "doc_count" : 121 
      }, { 
       "key" : "a", 
        "doc_count" : 104 
      } ] 
     } 
    } 
} 

我想要做的就是告訴ElasticSearch忽略所有的鍵,其長度小於5 ;

例如過濾掉"key": "a","key": "s"等等。

這可能嗎?

回答

1

好了,我解決了這個問題。我重新索引使用自定義分析器中的數據,其內容如下:

PUT $host/$index

{ 
    "settings": { 
     "analysis": { 
      "filter": { 
       "min_length_5_filter": { 
        "type": "length", 
        "min": 5, 
        "max": 256 
       } 
      }, 
      "analyzer": { 
       "variable_name_analyzer": { 
        "type": "custom", 
        "tokenizer": "lowercase", 
        "filter": ["min_length_5_filter"] 
       } 
      } 
     } 
    } 
} 

,然後在索引映射:

PUT $host/$index/_mapping/$mapping_name

... 
"parameters": { 
    "properties": { 
     "name": { 
      "type": "string", 
      "analyzer": "variable_name_analyzer" 
     }, 
     "value": { 
      "type": "string", 
      "analyzer": "variable_name_analyzer" 
     } 
    } 
}, 
... 

使用上面的方法,使用最小長度過濾標記化的字符串使我可以刪除大量的垃圾值,現在「術語聚合」工作真的很好。希望這可以幫助別人!

1

我認爲你應該使用一個Regexp Filter有通緝的結果:

"filter": { 
     "regexp":{ 
      "value" : ".{2,}" 
     } 
    } 
+0

好的建議,謝謝! 問題是變量存儲在句子中;例如「1970-1-01 00:00:00之前的秒」或「風速(每小時英里數)」。 相反,我會嘗試使用自定義分析器來索引不同的詞,並篩選長度小於5個字符的任何鍵。 – 2014-10-31 15:00:49