elasticsearch 实现查询忽略大小写

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

背景:在搜索的时候经常会有一种场景就是忽略大小写,不管你输入的是全大写还是全小写还是大小写混合,希望都能够搜索出结果。

解决思路:Elasticsearch中的lowercase normalizer将文本转换为小写,并将其作为规范形式存储在索引中。这可以确保在搜索和比较文本时忽略大写字母的差异,从而提高搜索的准确性和一致性

实现方案:

开发过程中,经常会遇到索引是之前已经建好的,由于es的规则,只能新增字段,不能删除或者修改已经存在的字段,可以动态更新原有索引的setting,动态更新setting,需要先关闭索引,执行玩更新操作以后,再开启索引,步骤如下:

index_name是 索引名称

field_name是字段名称

POST index_name/_close
PUT /index_name/_settings
{
  "index":{
    "analysis":{
      "normalizer":{
        "lowercase_normalizer":{
          "type": "custom",
          "char_filter": [],
           "filter": ["lowercase"]
        }
      }
    }
  }
}
POST index_name/_open

PUT /index_name/_mapping
{
    "properties" : {
      "field_name" : {
        "type" : "keyword",
        "normalizer":"lowercase_normalizer"
      }
    }

}

 举个例子:

新建一个索引:

PUT /lowercase_normalizer_index
{
    "mappings" : {
      "properties" : {
        "id" : {
          "type" : "keyword"
        }
      }
    }
}

新增字段 设置属性

POST lowercase_normalizer_index/_close
PUT /lowercase_normalizer_index/_settings
{
  "index":{
    "analysis":{
      "normalizer":{
        "lowercase_normalizer":{
          "type": "custom",
          "char_filter": [],
           "filter": ["lowercase"]
        }
      }
    }
  }
}
POST lowercase_normalizer_index/_open

PUT /lowercase_normalizer_index/_mapping
{
    "properties" : {
      "name" : {
        "type" : "keyword",
        "normalizer":"lowercase_normalizer"
      }
    }
}

 

插入一些数据

PUT lowercase_normalizer_index/_doc/1
{
  "id": "1",
  "name": "Mohammed Ahmed"
}
PUT lowercase_normalizer_index/_doc/2
{
"id": "2",
"name": "Sophie Martin"
}
PUT lowercase_normalizer_index/_doc/3
{
  "id": "3",
  "name": "mohammed ahmed"
}

 验证

GET lowercase_normalizer_index/_search
{
  "query": {
    "wildcard": {
      "name": {
        "value": "*moham*"
      }
    }
  }
}

结果

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "lowercase_normalizer_index",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "id" : "1",
          "name" : "Mohammed Ahmed"
        }
      },
      {
        "_index" : "lowercase_normalizer_index",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : 1.0,
        "_source" : {
          "id" : "3",
          "name" : "mohammed ahmed"
        }
      }
    ]
  }
}

  文章来源地址https://www.toymoban.com/news/detail-482373.html

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

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

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

相关文章

  • MySQL 中如何忽略表名的大小写?

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

    2024年02月01日
    浏览(42)
  • es-已有mapping,实现查询不区分大小写

    一、写在前面 es查询默认区分大小写 二、实现原理 normalizer 是  keyword 的一个属性 参考 听说你还没掌握 ElasticSearch Normalizer 的使用方法?_yinni11的博客-CSDN博客 二、实现区分大小写的三种方案  方案一:直接创建对应的mapping 适用于还没有创建mapping的场景  方案二:新建map

    2024年01月19日
    浏览(37)
  • 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日
    浏览(37)
  • 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日
    浏览(37)
  • Centos7 安装并配置MySQL 8.0.x 忽略表名大小写

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

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

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

    2024年02月13日
    浏览(35)
  • 【工具】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日
    浏览(47)
  • 记录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日
    浏览(37)
  • 【C++】STL 算法 ⑦ ( 二元谓词使用场景 - 大小写不敏感 set 集合 | tolower 函数 - 将字符转为小写字母 | 基于 tolower 实现大小写不敏感的比较函数对象 )

    本篇博客中 , 实现一个 set 集合 , 存放 英文字母 组成的字符串 , 且 大小写不敏感 ; 实现的方法 : 自定义字符串 对比排序规则 , 先 将 字符串 都转为小写字母 , 然后进行对比 ; tolower 函数是 C / C++ 标准库 中的函数 , 其作用是 将 字符从 大写形式 转换为 小写形式 , 该函数定义

    2024年02月02日
    浏览(44)
  • 【C语言】五种方法实现C语言中大小写字母的转化

    tolower 函数是C标准库中用于将字母从大写转换为小写的函数。 函数原型: 返回值: 返回转换后的小写字符。如果c不是一个字母,则返回原值c。 返回值类型为int,这是为了能够返回任何可能的字符值。 注意: c必须是unsigned char类型或能隐式转换为unsigned char,如char、int等。 返回值

    2024年03月26日
    浏览(91)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包