1 在项目中,产品已经上线一段时间,出现新的需求,需要解决查询的时候,忽略大小写的问题。本人用于测试的索引结构如下
PUT test_v1.000
{"settings": {"number_of_replicas": 1,"number_of_shards": 5},"mappings": {"product": {"properties": {"name":{"type": "keyword"},"sex":{"type": "keyword"},"content":{"type": "text","fields": {"keyword":{"ignore_above": 32766,"type": "keyword"}}}}}},"aliases": {"test": {}}
}
2 在test索引里面新增几条数据,用于查询使用
​PUT test/product/_bulk
{"index":{"_id":5}}
{ "name": "New York5","sex":"男","content":"ES5.X版本以后,keyword支持的最大长度为32766个UTF-8字节数(至于多少个字符数需要根据业务场景定,建议参考最新版本的官方文档说明),text对字符长度没有限制。New York5"}
{"index":{"_id":6}}
{ "name": "new York6","sex":"男","content":"ES5.X版本以后,keyword支持的最大长度为32766个UTF-8字节数(至于多少个字符数需要根据业务场景定,建议参考最新版本的官方文档说明),text对字符长度没有限制。new York6"}
{"index":{"_id":7}}
{ "name": "New york7","sex":"男","content":"ES5.X版本以后,keyword支持的最大长度为32766个UTF-8字节数(至于多少个字符数需要根据业务场景定,建议参考最新版本的官方文档说明),text对字符长度没有限制。New york7"}
{"index":{"_id":8}}
{ "name": "NEW YORK8","sex":"男","content":"ES5.X版本以后,keyword支持的最大长度为32766个UTF-8字节数(至于多少个字符数需要根据业务场景定,建议参考最新版本的官方文档说明),text对字符长度没有限制。NEW YORK8"}
3 想查询name以及content.keyword里面的数据,但是需要忽略大小写的问题,测试如下,由于此时elasticsearch的mapping未做任何处理,是不会自动忽略大小写的,所以此时下面的查询语句,应该只能查询两条数据,id为2和6的数据。截图如下
POST test/_search
{"query": {"bool": {"must": [{"query_string": {"fields": ["content.keyword","name"],"query": "*new*"}}]}}
}
4 对于elasticsearch查询忽略大小写的问题,官方给出了一个解决方案,使用normalizer来解决,normalizer是keyword的一个属性,可以对keyword生成的单一term,query_string做进一步的处理,比如lowercase,小写转换,使用方式和自定义分词器有相似之处,需要自定义,具体步骤如下。
5 此时由于elasticsearch的索引已经建好,由于es的规则,只能新增字段,不能删除或者修改已经存在的字段,可以动态更新原有索引的setting,动态更新setting,需要先关闭索引,执行玩更新操作以后,再开启索引,步骤如下
​POST test/_closePUT test/_settings
{"index": {"analysis": {"normalizer": {"lowercase_normalizer": {"type": "custom","char_filter": [],"filter": ["lowercase"]}}}}
}POST test/_open
6 查看原有test的索引setting,如下图,发现设置已经生效,这个时候,动态添加新的字段(keyword类型),既可使用lowercase_normalizer,实现忽略大小写的操作。
动态添加一个字段 author,如下,然后查看mapping,发现已经生效,并且author比其他keyword字段多一个属性normalizer
​PUT test/product/_mapping
{"properties": {"author": {"type": "keyword","normalizer": "lowercase_normalizer"}}
}
7 新增一条数据,并且测试,看查询author字段的时候,忽略大小写的操作是否已经实现,具体插入数据不再展示,自行插入数据,查询语句以及结果如下。发现查询da也能将包含DA的数据查询出来,说明已经实现了新增字段忽略大小写的操作。但是对老数据老字段,这种方式并不能解决问题,所以只能新增索引,将老数据同步过去,让我们继续往下操作
8 新建一个新索引,设置normalizer属性,命令如下
PUT xsj_test_v1.000
{"settings": {"number_of_replicas": 1,"number_of_shards": 5,"analysis": {"normalizer": {"lowercase_normalizer": {"type": "custom","char_filter": [],"filter": ["lowercase"]}}}},"mappings": {"product": {"properties": {"name":{"type": "keyword","normalizer": "lowercase_normalizer"},"sex":{"type": "keyword","normalizer": "lowercase_normalizer"},"author":{"type": "keyword","normalizer": "lowercase_normalizer"},"content":{"type": "text","fields": {"keyword":{"ignore_above": 32766,"type": "keyword","normalizer": "lowercase_normalizer"}}}}}},"aliases": {"xsj_test": {}}
}
9 新建完xsj_test索引以后,同步test的数据过来,命令如下

​POST /_reindex
{"source": {"index": "test"},"dest": {"index": "xsj_test"}
}

10 测试name以及content.keyword字段,看是否忽略大小写操作已经生效。查询命令以及结果如下,发现query_string查询的时候,忽略大小写的操作已经生效,并且老数据也可以忽略大小写查询。
​POST xsj_test/product/_search
{"query": {"bool": {"must": [{"query_string": {"fields": ["name","author","content.keyword"],"query": "*new*"}}]}}
}

elasticsearch 实现查询忽略大小写相关推荐

  1. Oracle查询忽略大小写的实现方法

    转自:http://database.51cto.com/art/201010/231561.htm Oracle查询有时候要受到一些条件的制约,比如大小写.下面为您介绍了一个实现Oracle查询忽略 ...

  2. mysql模糊查询忽略大小写

    //问题:mysql的字符集改成严格区分大小写后,模糊搜索的时候不能忽略大小写. //解决方案:把数据库字段转为小写,like后的参数也都转为小写 SELECT* FROMgoods WHERELOW ...

  3. 模糊查询忽略大小写解决方案

    问题描述: 通常在数据库存入的英文数据会有大小写混合的情况,在模糊查询时数据库对关键字的大小写不明感,我们需要对数据进行处理才能正确的搜索出数据. 例如:数据库中英文名称存入的Tom 搜索关键字:To ...

  4. MySQL查询时通过修改字段的排序规则来忽略大小写的操作讲解

    在MySQL中,有可能会遇到查询大小写的问题. 这个时候可以修改字段的排序规则来达到忽略大小写的目的; 或者用alert语句修改也可以 ? 1 2 ALTER TABLE `tableName` MO ...

  5. 实现模糊查询并忽略大小写

    开发工具与关键技术:Visual Studio.MVC 作者:幻奏 撰写时间:2019.7.13 我们在实现查询功能的时候,常常会用到模糊查询.这个呀,可是很重要的,当用户输入条件查询时,我们就要显示 ...

  6. java mongo忽略大小写,MongoDB:是否可以进行不区分大小写的查询?

    例子: > db.stuff.save({"foo":"bar"}); > db.stuff.find({"foo":" ...

  7. linux grep 查询多个字符 或 忽略大小写

    或: 方法1:grep -E '123|abc' filename  // 找出文件(filename)中包含123或者包含abc的行 方法2:egrep '123|abc' filename     ...

  8. mysql忽略大小写jpa解决_春数据JPA查询生成忽略大小写,以避免列数据

    我使用的是春天的数据JPA获取使用ignoreCase属性数据为大写:春数据JPA查询生成忽略大小写,以避免列数据 Employee类: import javax.persistence.Entity ...

  9. sql 忽略大小写_Flink使用Calcite解析Sql做维表关联(一)

    点击箭头处"蓝色字",关注我们哦!! 维表关联是离线计算或者实时计算里面常见的一种处理逻辑,常常用于字段补齐.规则过滤等,一般情况下维表数据放在MySql等数据库里面,对于离线计算 ...

最新文章

  1. TrackMouseEvent介绍
  2. 中国工商银行已使用OceanBase!
  3. python游戏编程书籍-《Python游戏编程快速上手》一1.3 如何使用本书
  4. centos mysql pmm_【MySQL】MySQL监控利器PMM
  5. Open Flash Chart 初体验
  6. 瞎扯数学分析-微积分
  7. 已经显现了出来的飞秋下载
  8. Linux DNS视图脑裂的实例操作(四)
  9. php限制只能中文,php如何实现一个账号只能有一个人登录
  10. php全局化标签,PHP – 在整个应用程序中使类对象全局化?
  11. ECMAScript 2021 特性
  12. 怎么把activeform生成的相关的js全给删除 版本yii2.0+[证实可行]
  13. 2020辅警考试计算机知识题,2019年辅警考试题库:计算机概述-计算机软件系统
  14. Informatic 9.0 client和server 安装配置
  15. 威纶通定时循环操作宏_「精品详解」威纶通触摸屏宏指令应用(三)
  16. 基于广度优先搜索的六度空间理论的验证
  17. 计算机组成与结构 英语,计算机组成与结构,Computer organization and architecture,音标,读音,翻译,英文例句,英语词典...
  18. Android studio profiler中的Shallow size和retained sizes是什么意思
  19. 三元(三目)运算符解释
  20. 分布式消息队列RocketMQ(一)安装与启动

热门文章

  1. c#如何wmf图片转换成png图片_C#图片格式转换(支持bmp/gif/jpeg/png/tiff/wmf文件)
  2. python 将列表中的英文或者拼音转换为中文
  3. 华为/华三交换机配置SSH免密登录
  4. Coding and Paper Letter(五十三)
  5. TCPUDP压力测试工具
  6. 零基础搭建基于知识图谱的电影问答系统
  7. 常见的概率公式及其推导(马尔科夫HMM系列课程拓展)
  8. java解压obb_obb文件怎么解压 打开obb文件的注意事项 - 驱动管家
  9. Cookie,sessionstorage,localstorage,Token ,JWT,session的区别
  10. 星环科技如何站稳脚跟?