弹性搜索:带聚合的ngram过滤器

时间:2016-08-10 08:49:28

标签: elasticsearch

在进行聚合时,有没有办法超越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 个答案:

答案 0 :(得分:1)

对于该字段,您需要设置自定义nGram分析器,您需要添加一个应保留“原始”术语的子字段(使用standard分析器或字段应为not_analyzed)或您在汇总中所需的条款。然后,您的汇总应指向您的field.sub_field字段。

好的,尝试这个次优解决方案(由于这与子场方法相比有多快),而不改变映射:

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