elasticsearch 基于ik分词器的分词查询和模糊匹配

这篇具有很好参考价值的文章主要介绍了elasticsearch 基于ik分词器的分词查询和模糊匹配。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:elasticsearch 查询有很多关键字,查询的条件有固定格式,返回结果提示不明确,让ES使用起来有点不方便的感觉,ES查询方式很多,简单介绍几种使用点的,实用的

此处简单梳理一下最常用的查询

模糊匹配查询

类似 mysql 语法中的 like ‘%value%’

http://localhost:9200/fileindex1/_search

{
  "query": {
  "match_phrase_prefix": {
    "name": {
      "query": "测试",
      "max_expansions": 50
    }
  }}
}

   @Test
    void testSearch2() throws IOException {
        SearchRequest searchRequest = new SearchRequest("fileindex1");
        //构建搜索条件
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        //查询条件,我们可以使用SearchSourceBuilder工具来实现
        //精确匹配QueryBuilders.termQuery()
        MatchPhrasePrefixQueryBuilder matchQueryBuilder = QueryBuilders.matchPhrasePrefixQuery("name","测试");
        sourceBuilder.query(matchQueryBuilder);
        sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
        searchRequest.source(sourceBuilder);
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        System.out.println(JSON.toJSONString(searchResponse));
        System.out.println("+++++++++++++++++++++++++++++++++++++++++");
        for (SearchHit hit : searchResponse.getHits()) {
            System.out.println(hit.getSourceAsMap());
        }
    }

类似于百度的分词查询

将查询的内容分解,提取。例如 文档数据库 ,就会被分词器 分解为 文档 ,数据 ,数据库等 查询返回更加有广度

分词查询接口

http://localhost:9200/_analyze

{
	"analyzer":"ik_max_word",
	"text":"文档数据库"
}

分词解析

{
    "111": [
        {
            "111": "文档",
            "start_offset": 0,
            "end_offset": 2,
            "type": "CN_WORD",
            "position": 0
        },
        {
            "111": "数据库",
            "start_offset": 2,
            "end_offset": 5,
            "type": "CN_WORD",
            "position": 1
        },
        {
            "111": "数据",
            "start_offset": 2,
            "end_offset": 4,
            "type": "CN_WORD",
            "position": 2
        },
        {
            "111": "库",
            "start_offset": 4,
            "end_offset": 5,
            "type": "CN_CHAR",
            "position": 3
        }
    ]
}

查询会将分词解析出的分词

ES查询条件 分词查询

http://localhost:9200/fileindex1/_search

 {
  "query": {
    "match": {
      "name": "文档数据库"
    }
  }
}
  @Test
    void testSearch1() throws IOException {
        SearchRequest searchRequest = new SearchRequest("fileindex1");
        //构建搜索条件
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

        //查询条件,我们可以使用SearchSourceBuilder工具来实现
        //精确匹配QueryBuilders.termQuery()
        MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("name","测试");
        sourceBuilder.query(matchQueryBuilder);
        sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
        searchRequest.source(sourceBuilder);
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        System.out.println(JSON.toJSONString(searchResponse));
        System.out.println("+++++++++++++++++++++++++++++++++++++++++");
        for (SearchHit hit : searchResponse.getHits()) {
            System.out.println(hit.getSourceAsMap());
        }
    }

根据具体字段精确查询内容

{
  "query": {
    "fuzzy": {
      "attachment.author.keyword": "测试"
    }
  }
}
 // 根据字段精准查询
    @Test
    void testSearch3() throws IOException {
        SearchRequest searchRequest = new SearchRequest("fileindex1");
        //构建搜索条件
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        //查询条件,我们可以使用SearchSourceBuilder工具来实现
        //精确匹配QueryBuilders.termQuery()
        FuzzyQueryBuilder matchQueryBuilder = QueryBuilders.fuzzyQuery("attachment.author.keyword","user
        ");
        sourceBuilder.query(matchQueryBuilder);
        sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
        searchRequest.source(sourceBuilder);
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        System.out.println(JSON.toJSONString(searchResponse));
        System.out.println("+++++++++++++++++++++++++++++++++++++++++");
        for (SearchHit hit : searchResponse.getHits()) {
            System.out.println(hit.getSourceAsMap());
        }
    }

ES 高亮显示查询

http://localhost:9200/fileindex1/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "attachment.author": "NOOB"
          }
        },
        {
          "match": {
            "attachment.content": "省政府"
          }
        }
      ]
    }
  },
  "highlight": {
    "fields": {
      "attachment.author": {},
      "attachment.content": {}
    }
  }
}

java 实现方式

  void testSearch2() throws IOException {
        SearchRequest searchRequest = new SearchRequest("fileindex1");
        //构建搜索条件
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        //查询条件,我们可以使用SearchSourceBuilder工具来实现
        //精确匹配QueryBuilders.termQuery()
        MatchPhrasePrefixQueryBuilder matchQueryBuilder = QueryBuilders.matchPhrasePrefixQuery("attachment.content","皇帝");
        sourceBuilder.query(matchQueryBuilder);
        sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
        searchRequest.source(sourceBuilder);
        // 高亮显示
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        highlightBuilder.field("attachment.author").field("attachment.content");
        highlightBuilder.preTags("<span style=\"color: red\">");
        highlightBuilder.postTags("</span>");
        sourceBuilder.highlighter(highlightBuilder);
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        //System.out.println(JSON.toJSONString(searchResponse));
        System.out.println("+++++++++++++++++++++++++++++++++++++++++");
        System.out.println(JSON.toJSONString(searchResponse.getHits()));
        for (SearchHit hit : searchResponse.getHits()) {
            System.out.println(hit.getHighlightFields());
        }
    }

es分词模糊查询,elasticsearch,数据库,大数据文章来源地址https://www.toymoban.com/news/detail-598963.html

到了这里,关于elasticsearch 基于ik分词器的分词查询和模糊匹配的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Elasticsearch分词详解:ES分词介绍、倒排索引介绍、分词器的作用、停用词

    详见:https://blog.csdn.net/weixin_40612128/article/details/123476053

    2024年02月12日
    浏览(18)
  • es elasticsearch 十 中文分词器ik分词器 Mysql 热更新词库

    es elasticsearch 十 中文分词器ik分词器 Mysql 热更新词库

    目录 中文分词器ik分词器 介绍 安装 使用分词器 Ik分词器配置文件 Mysql 热更新词库 介绍 中文分词器按照中文进行分词,中文应用最广泛的是ik分词器 安装 官网下载对应版本zip 下载  放到  plugins 目录 新建 ik文件夹 考入解析zip 重启 es //分成小单词 使用分词器 ik_max_word分成

    2024年02月07日
    浏览(11)
  • Elasticsearch07:ES中文分词插件(es-ik)安装部署

    Elasticsearch07:ES中文分词插件(es-ik)安装部署

    在中文数据检索场景中,为了提供更好的检索效果,需要在ES中集成中文分词器,因为ES默认是按照英文的分词规则进行分词的,基本上可以认为是单字分词,对中文分词效果不理想。 ES之前是没有提供中文分词器的,现在官方也提供了一些,但是在中文分词领域,IK分词器是

    2024年02月03日
    浏览(12)
  • ElasticSearch中文分词和模糊查询

    ElasticSearch中文分词和模糊查询

            ElasticSearch是一个一个分布式的实时文档存储,每一个字段都可以被索引与搜索,并且能支持PB级别的结构化或者非结构化数据。早期我们应用的全局搜索是简单的SQL模糊查询,为了分担数据库压力所以用了ES,选择他的原因除了以上几点外,还有其提供的API方式简单

    2024年02月03日
    浏览(13)
  • Elasticsearch使用系列-ES增删查改基本操作+ik分词

    Elasticsearch使用系列-ES增删查改基本操作+ik分词

    ES是一个NoSql数据库应用。和其他数据库一样,我们为了方便操作查看它,需要安装一个可视化工具 Kibana。 官网: https://www.elastic.co/cn/downloads/kibana 和前面安装ES一样,选中对应的环境下载,这里选择windows环境,注意安装的版本一定要和ES的版本一致,不然可能会启动不起来。

    2024年02月01日
    浏览(16)
  • Docker安装ElasticSearch、Kibana、IK分词器以及设置ES账户密码

    Docker安装ElasticSearch、Kibana、IK分词器以及设置ES账户密码

    版本声明: 系统 :CentOS 7.9(云服务器) ES版本 :7.6.1 Kibana :7.6.1 Ik分析器版本 :7.6.1 1、拉取镜像 2、创建挂载目录 设置所有用户读写执行权限 : sudo chmod -R 777 /docker_config/elasticsearch/ 3、创建elasticsearch.yml 配置文件 4、创建容器 参数说明 : -p 端口映射 -e discovery.type=single

    2023年04月09日
    浏览(23)
  • 搜索引擎elasticsearch :安装elasticsearch (包含安装组件kibana、IK分词器、部署es集群)

    搜索引擎elasticsearch :安装elasticsearch (包含安装组件kibana、IK分词器、部署es集群)

    kibana可以帮助我们方便地编写DSL语句,所以还要装kibana 因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络: 这里我们采用elasticsearch的7.12.1版本的镜像,这个镜像体积非常大,接近1G。不建议大家自己pull。 课前资料提供了镜像的tar包: 大家将

    2024年02月16日
    浏览(15)
  • elasticsearch基础6——head插件安装和web页面查询操作使用、ik分词器

    elasticsearch基础6——head插件安装和web页面查询操作使用、ik分词器

    插件是用户以自定义方式增强es功能的一种方法,分两类,核心插件和社区贡献插件。 插件太多,只需要熟悉插件的安装流程即可,根据项目需要再自行安装。 核心插件: 核心插件属于es项目,插件的版本号始终与es安装包的版本号相同,这些插件由es团队维护。 项目地址

    2024年02月14日
    浏览(30)
  • ElasticSearch的使用,安装ik分词器,自定义词库,SpringBoot整合ES(增、删、改、查)

    ElasticSearch的使用,安装ik分词器,自定义词库,SpringBoot整合ES(增、删、改、查)

    保存一个数据,保存在哪个索引的哪个类型下,指定用哪个唯一标识(相当于,保存一个数据,保存在那个数据库中的哪个表中,指定主键ID) 例:PUT customer/external/1;在customer索引下的external类型下保存1号数据name为John Doe的数据 POST和PUT都可以新增数据 注意: POST 新增。如果

    2023年04月25日
    浏览(31)
  • Elasticsearch基础篇(五):创建es索引并学习分析器、过滤器、分词器的作用和配置

    Elasticsearch基础篇(五):创建es索引并学习分析器、过滤器、分词器的作用和配置

    Elasticsearch 是一个分布式搜索和分析引擎,它使用JSON文档来存储数据。索引是Elasticsearch中数据的基本组织单元之一,下面是Elasticsearch索引相关的基本概念: 结构元素 Elasticsearch MySQL 数据库 索引(Index) 数据库(Database) 表格 类型(Type)* 表(Table) 记录/行 文档(Document)

    2024年02月03日
    浏览(16)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包