Elasticsearch关键字和小写和聚合

J2B*_*J2B 5 elasticsearch

我以前存储了一些带有映射"keyword"的字段.但是,它们具有案例敏感性.

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

{
  "index": {
    "analysis": {
      "analyzer": {
        "keyword_lowercase": {
          "tokenizer": "keyword",
          "filter": [
            "lowercase"
          ]
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

与映射

{
  "properties": {
    "field": {
      "type": "string",
      "analyzer": "keyword_lowercase"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Val*_*Val 13

如果您使用的是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"
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • "实验性"是另一种说法"如果不是没有错误就不要怪我们",但不要担心,这样会留下来. (2认同)