Elasticsearch关键字和小写和聚合

时间:2017-04-19 10:02:44

标签: elasticsearch

我以前使用映射"关键字"存储了一些字段。但是,它们具有案例敏感性。

要解决此问题,可以使用分析仪,例如

{
  "index": {
    "analysis": {
      "analyzer": {
        "keyword_lowercase": {
          "tokenizer": "keyword",
          "filter": [
            "lowercase"
          ]
        }
      }
    }
  }
}

带有映射

{
  "properties": {
    "field": {
      "type": "string",
      "analyzer": "keyword_lowercase"
    }
  }
}

但是,聚合术语不起作用。

  

引起:java.lang.IllegalArgumentException:默认情况下,在文本字段上禁用Fielddata。在[a]上设置fielddata = true,以便通过反转倒排索引来在内存中加载fielddata。请注意,这可能会占用大量内存。

它适用于映射type = keyword,但是type = keyword不允许使用分析器。

如何将其作为小写关键字编入索引,但仍然可以在不设置fielddata = true的情况下使用聚合?

1 个答案:

答案 0 :(得分:9)

如果您使用的是ES 5.2或更高版本,现在可以将normalizers用于keyword字段。只需声明您的索引设置和映射,就可以了。

PUT index
{
  "settings": {
    "analysis": {
      "normalizer": {
        "keyword_lowercase": {
          "type": "custom",
          "filter": ["lowercase"]
        }
      }
    }
  },
  "mappings": {
    "type": {
      "properties": {
        "field": {
          "type": "keyword",
          "normalizer": "keyword_lowercase"
        }
      }
    }
  }
}