【ElasticSearch查询忽略大小写】

这篇具有很好参考价值的文章主要介绍了【ElasticSearch查询忽略大小写】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ElasticSearch查询忽略大小写
问题场景:
	在项目中使用ES作为数据存储结构,但是很多时候我们在刚开始创建索引的时候都不知道这个字段是否以后会作为条件对数据进行查询,
	所以创建的时候很多时候都是“text”类型或者是“keyword”类型,这就导致我们在后期想要对该字段作为条件进行大小写不敏感+模糊搜索
	时实现不了我们想要的效果,但是ES在创建完索引后不支持直接对字段类型进行修改,所以只能采取另外一种办法对字段属性进行修改。
1、常用文档类型(数据查询字段)
1.1 text类型:用于全文索引,该类型的字段在数据进行存储的时候会根据当前ES已设置的分词方式进行分词,例如:IK(没有设置的情况
默认采用standard分词)
1.2 keyword类型:该类型的字段在数据进行存储的时候不进行分词,这时候就出现了为什么keyword类型的字段对大小写敏感的问题了,
因为不进行分词,存储的时候是大写就是大写,存储的时候是小写就是小写,不支持存储的时候是大写,但是搜索的时候采用小写对其
进行检索,设置此类型最重要的是如果要对字段进行过滤,排序、聚合等操作时,需要将其设置为keyword类型。
2、问题解决思路
1、查看当前字段是否对索引进行大小写处理
2、新建备份索引,备份原来的索引下的数据
3、将原来的索引下的数据同步到备份索引下
4、删除原来的索引
5、修改原索引属性结构,重建原同名索引
6、将备份索引下的数据同步至新建索引下
7、验证是否成功
8、删除备份索引
2.1 查看当前索引下是否进行分词
GET '索引名称'/_analyze
{
  "field": "title",
  "text": "TEST测试"
}

在Kinaba中执行上述语句,结果如下:

{
  "tokens" : [
    {
      "token" : "test测试",
      "start_offset" : 0,
      "end_offset" : 6,
      "type" : "word",
      "position" : 0
    }
  ]
}

token 就是对应的分词后的结果(此处是我已经设置完了的,所以虽然存储之前是大写TEST,但是经过处理后存储的索引结果是小写test),如果没处理,字段类型是keyword类型,存储索引结果应该也是大写TEST,这时候对其进行小写test进行查询时查询不到该条数据的。

2.2 新建备份索引

2.2.1 查看原索引mapping

GET XXX/_mapping

2.2.2 复制原索引mapping创建备份索引

PUT /XXX
{
	第一步复制的mapping
	"mappings": {
    "XXX": {
      "properties": {
      }
      }
      }
}

2.2.3 将原索引下的数据同步至备份索引下

POST /_reindex
{
  "source": {
    "index": "原索引名称"
  },
  "dest": {
    "index": "备份索引名称"
  }
}

2.2.4 删除原索引,进行重建

1、删除原索引   DELETE 索引名称
2、重建新索引   此处引入“normalizer”属性,此属性的作用就是忽略大小写,只需要加在原索引下想进行忽略大小写进行查询的字段下即可,还需要加入另外对其支撑的setting,如下:
PUT ssb_test_01
{
  "settings": {
    "analysis": {
      "normalizer": {
        "lowercase_normalizer": {
          "type": "custom",
          "char_filter": [],
          "filter": [
            "lowercase"
          ]
        }
      }
    }
  },
  
  "mappings" : {
      "XXX" : {
        "properties" : {
          "allDay" : {
            "type" : "integer"
          },
           "creatorId" : {
            "type" : "keyword"
          },
          "title" : {
            "type" : "keyword",
            "normalizer": "lowercase_normalizer"
          }
         }
        }
       }
      } 

上述代码中,对ssb_test_01索引下的“title”字段进行模糊搜索+忽略大小写查询,所以在其原有keyword属性的基础上加入"normalizer": "lowercase_normalizer"配置,这样就能实现想要的效果。

2.2.5 将备份索引下的数据同步过来,步骤和2.2.3一致,只需要调换索引的位置即可

2.2.6 对新建后的索引进行验证,确认无误后删除备份索引即可文章来源地址https://www.toymoban.com/news/detail-777366.html


在 “0” 和 “1” 的世界里闭关修炼,才有成为高手的可能,所以请按耐住那颗躁动的心

到了这里,关于【ElasticSearch查询忽略大小写】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Git 忽略文件大小写

    ⏹ 遇到的情况 git提交文件的时候,默认是 不区分 大小写更改的, 这样会导致修改文件名大小写后,git提交不生效,导致代码运行失效。 也就是说默认情况下,在Git看来 SEB001.java 和 seb001.java 其实是一个文件 ⏹ 解决 使用如下命令行忽略大小写即可。 git config core.ignorecase

    2024年02月08日
    浏览(62)
  • MySQL 中如何忽略表名的大小写?

            在 MySQL 中,默认情况下表名是大小写敏感的。但是你可以通过设置来实现忽略表名的大小写。有两种方法可以做到这一点: 方法一:修改配置文件         编辑 MySQL 的配置文件 my.cnf 或 my.ini (具体文件名取决于操作系统和 MySQL 版本),在 [mysqld] 部分添加以

    2024年02月01日
    浏览(53)
  • Docker安装Mysql8.0,并配置忽略大小写

    -e MYSQL_ROOT_PASSWORD :设置mysql密码 -v /home/mysql/:/var/lib/mysql:挂载磁盘实现数据持久化 –lower_case_table_names=1 :忽略大小写,docker mysql默认区分大小写的,只能在初始化时配置,不然会报 注:参数顺序一定要对,–lower_case_table_names=1要加在镜像名后面,镜像名前面是参数,后面是mys

    2024年02月11日
    浏览(43)
  • mysql(八)docker版Mysql8.x设置大小写忽略

    Mysql 5.7设置大小写忽略可以登录到Docker内部,修改/etc/my.cnf添加lower_case_table_names=1,并重启docker使之忽略大小写。但MySQL8.0后不允许这样,官方文档记录: lower_case_table_names can only be configured when initializing the server. Changing the lower_case_table_names setting after the server is initialized is pr

    2024年01月19日
    浏览(52)
  • Centos7 安装并配置MySQL 8.0.x 忽略表名大小写

    1. 卸载MySQL 2. 重新安装mysql 3. 修改 mysql 密码 4. 允许 root 远程访问 附录:my.cnf

    2024年02月12日
    浏览(38)
  • hive查询区分大小写

    在Hive中,默认情况下,字段名是不区分大小写的,这意味着在查询中使用大写或小写字母来引用字段名称都是可以的。其实mysql也是一样的,大部分都不会区分大小写。 但是在部分业务场景时需要对这类数据进行处理,有这么几个方法可以尝试尝试。 启用此模式后,Hive将严

    2024年02月13日
    浏览(53)
  • 【工具】IDEA开发常用配置-编码设置、自动导包、类注释、方法注释、提示自动忽略大小写、自动换行、SQL格式、格式配置等

    1.1 编码设置 New Projects Settings- Settings for New Projects...-Editor-File Encodings 设置本项目和全局项目编码为 UTF-8 ;配置文件 properties 也需要设置为 UTF-8 ,需勾选 Transparent native-to-ascii conversion ,勾选之后配置文件中文能正常识别。 1.2 自动导包设置 New Projects Settings- Settings for New Proj

    2024年02月04日
    浏览(61)
  • 记录CentOS7 Linux下安装MySQL8_适合正式环境_干货满满(超详细,默认开启了开机自启动,设置表名忽略大小写,提供详细配置,创建非root专属远程连接用户)

    安装前先清理mariadb和mysql相关文件:    通过命令: rpm -qa|grep mariadb 查询是否安装了mariadb    卸载: rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64(复制上面命令查到的完整名称)    通过命令: find / -name mysql 查询跟mysql相关的文件     删除文件命令:    rm -rf /etc/selinux/targeted/act

    2024年02月04日
    浏览(48)
  • java中字母、字符串,输入小写输出大写,输入大写输出小写、大小写转换

    思路: 1、利用“大小写字母之间正好相差32”这一特点                                                       2、用  toLowerCase()、toUpperCase() 字符串自带的方法  提示: Java中没有.nextChar()。 所以要读取char,我们使用  .next().charAt(0)  1、 输入小写输

    2024年02月07日
    浏览(90)
  • Python 大小写转换

    1.lower() 将字符串中的大写字母转换成小写字母 语法:str.lower() 2.upper() 将字符串的小写字母转换为大写字母 语法:str.upper() 3.capitalize() 将字符串的第一个字母变成大写,其余字母变为小写。 语法:str.capitalize()   4.title() 返回一个满足标题格式的字符串,即所有英文单词首字

    2024年02月13日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包