小编典典

Elasticsearch关键字以及小写和聚合

elasticsearch

我以前用映射“关键字”存储了一些字段。但是,它们是区分大小写的。

为了解决这个问题,可以使用分析仪,例如

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

与映射

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

但是,按期进行汇总不起作用。

原因:java.lang.IllegalArgumentException:默认情况下,在文本字段上禁用Fielddata。在[a]上设置fielddata
= true,以通过反转取反的索引将字段数据加载到内存中。请注意,这可能会占用大量内存。

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

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


阅读 462

收藏
2020-06-22

共1个答案

小编典典

如果您使用的是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"
        }
      }
    }
  }
}
2020-06-22