elasticsearch7.17.3 实现类似mysql的like查询

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

前言:现在想要实现在elasticsearch中类似于mysql的like查询方式,有下面几种方法可以参考

建议:wildcard方法是纯纯的like查询方式平替,但是性能差,上百GB的数据量后就会很慢。根据自己业务量需求,前面两种方式能解决的情况下尽量用前面两种方式。前两种方式可以修改索引细粒度逐步靠近like查询效果。

一、match方式查询

1、前言:

  • match方式是会将输入筛选的内容先分词,匹配库中的数据记录的分词内容,匹配成功则会返回。
  • 这种方式由于使用到了分词,根据自己的数据量确定分词细粒度,如果想要贴近like,ngram分词器细粒度可设置成1
  • 此查询适用于文本搜索场景,可以匹配文档中的任意一个词,但无法保证匹配的词语在文档中是相邻的
  • 在匹配长文本时,匹配的结果可能会受到文本长度的影响,导致查询结果不准确

2、es查询命令

下面命令是筛选fileName中含有2010的记录

注意:由于match会分词后查询,所以fileName中含有2,0,1这些字符的记录也会返回

POST es_test/_search
{
  "track_total_hits": true, 
  "size": 1000, 
  "query": {
    "match": {
      "fileName": "2010"
    }
  }
}

二、match_phrase方式查询

1、前言

  • match_phrase查询是一种基于分词的短语匹配查询,它可以匹配多个关键字,并保证这些关键字在文档中是相邻的
  • 此方式查询内容过长时效率会变慢,注意这方面的限制
  • 输入的内容会被当做一个完整的短语进行匹配。比如输入的是2010,只会查询包含完整短语"2010"的文档。如果某个文档中包含了"2010年"或者"在2010年度"等,这些文档是无法被匹配出来的

2、es查询命令

下面命令是筛选fileName中后缀为.mp4的记录

POST es_test/_search
{
  "track_total_hits": true, 
  "size": 1000, 
  "query": {
    "match_phrase": {
      "fileName": ".mp4"
    }
  }
}

三、wildcard方式查询

1、前言

  • Wildcard查询是一种基于通配符的查询方式,通配符包括 *(匹配任意字符)和 ?(匹配单个字符)
  • Wildcard查询性能相对较低,因为它会扫描整个索引来找到匹配的结果

2、es查询命令

此命令是查询fileName中包含mp4的记录

POST es_test/_search
{
  "track_total_hits": true, 
  "size": 1000, 
  "query": {
    "wildcard": {
      "fileName": "*mp4*"
    }
  }
}

四、综合方式复杂查询

上面是单个查询方式的用法,如果显示更友好,可以下面方式优化

1、需求场景

现在想要实现如下需求,根据百度查询效果一样的,输入一个内容,完全匹配的排前面,部分匹配的排后面

2、思路

用match_phrase方式查询完全匹配的内容,用match查询部分匹配的内容,并分别加权

3、es查询命令

下面命令是fileName中完整包含2010字段的排前面,加权10,部分包含2010字段的排后面,加权5,es查询结果不sort的情况下默认会按分数排序

POST es_test/_search
{
  "track_total_hits": true, 
  "size": 1000, 
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              {
                "match_phrase": {
                  "fileName": "2010"
                }
              }
            ],
            "boost": 10
          }
        },
        {
          "bool": {
            "must": [
              {
                "match": {
                  "fileName": "2010"
                }
              }
            ],
            "boost": 5
          }
        }
      ]
    }
  }
}

如果有其他建议或问题意见,欢迎留言交流!!!文章来源地址https://www.toymoban.com/news/detail-721417.html

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

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

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

相关文章

  • Elasticsearch实现Mysql的Like效果

    在Mysql数据库中,模糊搜索通常使用LIKE。然而,随着数据量的不断增加,Mysql在处理模糊搜索时可能面临性能瓶颈。因此,引入Elasticsearch作为搜索引擎,以提高搜索性能和用户体验成为一种合理的选择。 在ES中,影响搜索结果的因素多种多样,包括分词器、Match搜索、

    2024年02月19日
    浏览(23)
  • python使用ElasticSearch7.17.6笔记

    数操作系统:windows10 我开始使用最新的版本,8.4.1但是使用过程中kibana启动不了,就索性使用旧版; 下载地址: es7.17.6 下载地址  kibana7.17.6下载地址 解压到合适的位置,更改elasticsearch.yml 添加配置如下: 更改kibana.yml配置 到各自的bin目录下启动两个服务bat文件, 在浏览器中

    2024年02月07日
    浏览(42)
  • Linux环境安装配置Elasticsearch7.17

    服务器环境为CentOS7.6,Elasticsearch版本为7.17.4 2.1 下载 选择要安装的版本:下载地址 解压到指定目录 重命名为es 2.2 创建ES用户 Elasticsearch不允许用root身份启动,所以要新建一个用户并授予权限 2.3 修改ES配置文件 修改ES的核心配置文件 在文件末尾添加以下几行 修改内存参数配

    2024年02月06日
    浏览(31)
  • 本地部署Canal笔记-实现MySQL与ElasticSearch7数据同步

    本地搭建canal实现mysql数据到es的简单的数据同步,仅供学习参考 建议首先熟悉一下canal同步方式:https://github.com/alibaba/canal/wiki 本地搭建MySQL数据库 本地搭建ElasticSearch 本地搭建canal-server 本地搭建canal-adapter 本地环境为window11,大部分组件采用docker进行部署,MySQL采用8.0.27, 推荐

    2024年02月02日
    浏览(37)
  • docker部署Elasticsearch7.17集群和kibana

    环境准备: 3台centos7.9的服务器 vim /etc/sysctl.conf添加:vm.max_map_count=262144 sysctl -w vm.max_map_count=262144 即时生效 cat /proc/sys/vm/max_map_count 查看 #创建es配置目录 mkdir /home/es/config -p #创建es数据目录 mkdir /home/es/data #创建es插件目录 mkdir /home/es/plugins #授权目录 chmod -R 777 /home/es 在/home/e

    2024年02月10日
    浏览(38)
  • Mysql 实现类似于 ElasticSearch 的全文检索功能

    ​ 一、前言 今天一个同事问我,如何使用 Mysql 实现类似于 ElasticSearch 的全文检索功能,并且对检索跑分?我当时脑子里立马产生了疑问?为啥不直接用es呢?简单好用还贼快。但是听他说,数据量不多,客户给的时间非常有限,根本没时间去搭建es,所以还是看一下

    2024年02月03日
    浏览(35)
  • 【软件安装教程】elasticsearch7.17安装设置用户名和密码

    链接:https://pan.baidu.com/s/1f3jTc4kaQvu_i9pVbuXdPQ  提取码:l3g1  下载后解压    bin :存入一些二进制脚本,包括启动 ES、安装插件命令等都在这里。 config :存放 ES 的配置文件,主要是 elasticsearch.yml 。 jdk :ES 自带的 Java 环境,所以我们无需自己安装 Java 环境。 lib :存放 ES 相关

    2024年02月13日
    浏览(48)
  • SkyWalking+ElasticSearch7实现日志追踪

    国内es下载地址 修改elasticsearch-env ,elasticsearch7 先去获取本地的jdk 如果jdk 环境不存在则会使用 elasticsearch-7.8.0/jdk 下的jdk ,因为小编本地jdk版本为1.8 运行时会报错 future versions of Elasticsearch will require Java 11; your Java version from [/data/jdk1.8.0_111/jre] does not meet this requirement 因此我们

    2024年02月06日
    浏览(29)
  • Java中Elasticsearch使用类似MySQL的OR和AND查询

    本文用实例来介绍如何使用Spring Data Elasticsearch的ElasticsearchRestTemplate来操作ES,在Java中Elasticsearch使用类似MySQL的OR和AND进行多条件查询。 官网 Elasticsearch Operations 一种复合查询,把其余类型的查询包裹进来,支持以下三种逻辑关系。 ES查询实例如下: 在Java中代码示例: 该m

    2024年02月02日
    浏览(25)
  • ElasticSearch 学习9 spring-boot ,elasticsearch7.16.1实现中文拼音分词搜索

    一、elasticsearch官网下载:Elasticsearch 7.16.1 | Elastic 二、拼音、ik、繁简体转换插件安装 ik分词:GitHub - medcl/elasticsearch-analysis-ik: The IK Analysis plugin integrates Lucene IK analyzer into elasticsearch, support customized dictionary. 拼音分词:GitHub - medcl/elasticsearch-analysis-pinyin: This Pinyin Analysis plugin is

    2024年01月22日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包