赞
踩
对于elasticsearch查询忽略大小写的问题,官方给出了一个解决方案,使用normalizer来解决,normalizer是keyword的一个属性,可以对keyword生成的单一term,query_string做进一步的处理,比如lowercase,小写转换,使用方式和自定义分词器有相似之处,需要自定义,具体步骤如下。所以keyword 才可以配置normalizer.
已有的索引,如何忽略大小写?
注意:
对已有索引中字段,增加normalizer属性, 新增数据或者更新的数据,查询是生效的.
但是历史数据, 如果不更新,则不生效的. 所以你需要reindex处理
如果你的系统,可以重新同步一次数据,即更新当前ES里面数据,就不需要reindex了
第一步: 以动态更新原有索引的setting,动态更新setting,需要先关闭索引,执行玩更新操作以后,再开启索引
- #关闭索引
- POST project_zcy/_close
- #在setting增加lowercase_normalizer (名字自定义)
- PUT project_zcy/_settings
- {
- "index": {
- "analysis": {
- "normalizer": {
- "lowercase_normalizer": {
- "type": "custom",
- "char_filter": [],
- "filter": [
- "lowercase"
- ]
- }
- }
- }
- }
- }
- #打开索引
- POST project_zcy/_open

第二步: 动态对一个字段 增加normalizer, 后续查询时候,要调整为institute_code_zcy.keywordquery
而不是institute_code_zcy.keyword
- 原来:
- {
- "properties":{
- "institute_code_zcy" : {
- "type" : "text",
- "fields" : {
- "keyword" : {
- "type" : "keyword",
- "ignore_above" : 256,
- }
-
- }
- }
- }
- }
-
-
- PUT project_zcy/_mapping
- {
- "properties":{
- "institute_code_zcy" : {
- "type" : "text",
- "fields" : {
- "keywordquery" : {
- "type" : "keyword",
- "ignore_above" : 256,
- "normalizer" : "lowercase_normalizer"
- }
-
- }
- }
- }
- }
-
- 结果:
- {
- "properties":{
- "institute_code_zcy" : {
- "type" : "text",
- "fields" : {
- "keyword" : {
- "type" : "keyword",
- "ignore_above" : 256,
- },
- "keywordquery" : {
- "type" : "keyword",
- "ignore_above" : 256,
- "normalizer" : "lowercase_normalizer"
- }
-
- }
- }
- }
- }

第三步:
重新同步一次数据到ES, 这样历史数据才生效
第一步: 新建新的索引
- PUT /project_zz
- {
- "mappings" : {
- "properties" : {
- "alarm" : {
- "type" : "text",
- "fields" : {
- "keyword" : {
- "type" : "keyword",
- "ignore_above" : 256
- }
- }
- },
- "dept_code" : {
- "type" : "text",
- "fields" : {
- "keyword" : {
- "type" : "keyword",
- "ignore_above" : 256,
- "normalizer" : "lowercase_normalizer"
- }
- }
- },
- "institute_code" : {
- "type" : "text",
- "fields" : {
- "keyword" : {
- "type" : "keyword",
- "ignore_above" : 256,
- "normalizer" : "lowercase_normalizer"
- }
- }
- },
- "update_time" : {
- "type" : "date",
- "format" : "yyyy-MM-dd HH:mm:ss"
- }
- }
- },
- "settings" : {
- "index" : {
- "number_of_shards" : "1",
- "analysis" : {
- "normalizer" : {
- "lowercase_normalizer" : {
- "filter" : [
- "lowercase"
- ],
- "type" : "custom",
- "char_filter" : [ ]
- }
- }
- },
- "number_of_replicas" : "1"
-
- }
- }
-
- }

第二步: 重建索引
- POST _reindex
- {
- "source": {"index": "project_zcy"},
- "dest": {"index": "project_zz"}
- }
我们查询的时候: 大小写就能忽略查询到结果了
- GET /project_zcy/_search
- {
- "query": {
- "term": {
- "institute_code.keyword": {
- "value": "ORg211111"
- }
- }
- },
- "_source": "institute_code"
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。