首页 文章

Elasticsearch关键字和小写和聚合

提问于
浏览
4

我以前使用映射“keyword”存储了一些字段 . 但是,它们具有案例敏感性 .

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

{
  "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不允许使用分析器 .

How do I index it as a lowercase keyword but still make it possible to use aggregation without setting fielddata=true?

1 回答

  • 5

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

相关问题