Elastic 默认是区分大小写查询的,比如:
{ "foo": "BÀR" }
查询的时候 通过“bar”是查询不到的,需要在
"settings": { "analysis": { "normalizer": { "my_normalizer": { "type": "custom", "filter": ["lowercase", "asciifolding"] } } } }, "mappings": { "type": { "properties": { "foo": { "type": "keyword", "normalizer": "my_normalizer" } } } }
案例:
PUT /products { "settings": { "analysis": { "normalizer": { "my_normalizer": { "type": "custom", "filter": ["lowercase", "asciifolding"] } } } } } POST /products/doc/_mapping { "_source": {"enabled": true}, "dynamic": true, "properties" : { "id" : {"type" : "text","fields": {"raw": {"type": "keyword","ignore_above": 256}}}, "hash" : {"type" : "text","fields": {"raw": {"type": "keyword","ignore_above": 256}}}, "name" : {"type" : "keyword","doc_values":true,"normalizer": "my_normalizer"}, "type" : {"type" : "keyword","doc_values":true}, "fileids": {"type": "text","fields": {"raw": {"type": "keyword","ignore_above": 256}}}, "createTime": {"type": "date"}, "updateTime": {"type": "date"}, "info" : { "properties":{ "id":{ "type":"text","fields": {"raw": {"type": "keyword","ignore_above": 256}}}, "label":{"type":"keyword","doc_values":true,"normalizer": "my_normalizer"}, "format":{ "type":"keyword","doc_values":true,"normalizer": "my_normalizer"}, "value" : {"type" : "text","fields": {"raw": {"type": "keyword","ignore_above": 256}}} } } } }
这样就可以解决大小写的问题。
ES 6.0 官网资料:https://www.elastic.co/guide/en/elasticsearch/reference/6.0/normalizer.html