Elasticsearch:搜索忽略大小写和重音的关键字(通过聚合)

时间:2018-10-17 14:17:50

标签: elasticsearch kibana

我可以像这样在索引上搜索特定的关键字:

GET */_search/?
{
  "query": {
    "match_all": {}
  },
  "size": 0,
  "aggs": {
    "TECH.keyword": {
      "terms": {
        "field": "TECH.keyword",
        "include": ".*mine.*",
        "order": {
          "_count": "desc"
        },
        "size": 20
      }
    }
  }
}

使用此查询,我可以获取在其TECH.keyword字段中按“ "_count": "desc"排序”的所有具有“ mine”的条目。这样就可以了。

实际的问题是索引在mine字段中可能包含MineMINEminé甚至TECH.keyword。我想全部归还。

有没有一种方法可以搜索忽略大小写和重音的关键字?

当前映射为:

"TECH": {
  "type": "text",
  "fields": {
    "keyword": {
      "type": "keyword",
      "ignore_above": 256
    }
  }
},

1 个答案:

答案 0 :(得分:1)

您应该可以使用normalizer完成此操作。您不能在analyzer字段上使用keyword,但是可以使用normalizer。它允许您使用lowercaseasciifolding

https://www.elastic.co/guide/en/elasticsearch/reference/6.4/normalizer.html

PUT index
{
  "settings": {
    "analysis": {
      "normalizer": {
        "my_normalizer": {
          "type": "custom",
          "char_filter": [],
          "filter": ["lowercase", "asciifolding"]
        }
      }
    }
  },
  "mappings": {
    "_doc": {
      "properties": {
        "foo": {
          "type": "keyword",
          "normalizer": "my_normalizer"
        }
      }
    }
  }
}