首页 > 其他分享 >springboot整合elasticsearch中的分词查询配置

springboot整合elasticsearch中的分词查询配置

时间:2023-10-03 16:22:18浏览次数:49  
标签:文档 匹配 springboot 查询 elasticsearch new 词项 分词

前言:elasticsearch最好还是在linux中进行集群部署,这样更符合企业需求和规范,笔者只在windows的单节点9200端口上部署,仅用于测试和学习。

 

什么是分词查询:

  指的是将输入的文本或查询语句切分成一个个独立的词语或词项,以便更好地处理和分析,然后进行查询,比如你在百度上搜索”成都春熙路“,那么你会发现在成百上千的响应结果中,不仅仅有包含”成都春熙路的“,还有包含”成都的“,这就说明分词查询不是像模糊查询那样,前者还对”成都春熙路进行了分词处理,再进行查询“。

 

案例需求:

  现在es的索引”x“中存储了三条数据:

userList.add(new UserDto("斌哥教你学vue", "123"));  (这两个字段对应实体类的属性为"account"和"password")

userList.add(new UserDto("vue2-斌哥在线教学", "456")); 

userList.add(new UserDto("vue2 by binge","678"));

现在只用”vue“作为查询词,将这三条数据都查到。

 

核心代码:

  SearchRequest searchRequest = new SearchRequest("x");

        // 创建查询构建器,第一个参数是要查询的文本,剩下的参数是字段,就是查询 account 和 password 中同时满足条件的列
        MultiMatchQueryBuilder queryBuilder = QueryBuilders.multiMatchQuery("vue", "account")

                .fuzziness(10)  //:使用编辑距离技术进行模糊匹配,比如设置了fuzziness为2,并将查询词项设置为"quik"。

                //现在查询quick,由于查询词项与文档中的词项 “quick” 存在拼写差异,它们的编辑距离为1,小于等于允许的最大编辑距离2,因此这个文档将被认为是匹配的

                .prefixLength(0) //prefixLength参数用于指定模糊匹配的起始单词数。

                // 当设置prefixLength参数的值为0时,表示模糊匹配将从查询词项的开头进行匹配,而不需要词项的前几个字符匹配成功

                .operator(Operator.fromString("OR")) //operator参数用于指定多个查询词项之间的逻辑操作符。

        //Operator.fromString(“OR”)表示使用OR操作符,这意味着通过match查询匹配的文档至少需要与查询中的一个词项匹配,

        // 还可以设置为AND,表示所有查询词项都必须在文档中匹配才能返回

        .minimumShouldMatch("1%");//返回的文档需要匹配的最小子串数,"75%"表示至少需匹配查询中的75%的词项才会返回匹配的结果。可以设置不同的值,

        // 如"2"表示至少需匹配2个词项,"50%"表示至少需匹配查询的一半词项


        // 创建搜索源构建器
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        sourceBuilder.query(queryBuilder);

        // 创建搜索请求
        searchRequest.source(sourceBuilder);

        try {
            // 执行搜索并获取结果
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
            SearchHits hits = searchResponse.getHits();

            // 遍历结果并输出
            for (SearchHit hit : hits.getHits()) {
                String id = hit.getId();

                System.out.println(id);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 关闭客户端
        try {
            client.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

标签:文档,匹配,springboot,查询,elasticsearch,new,词项,分词
From: https://www.cnblogs.com/xialang/p/17741236.html

相关文章

  • 【精品】Springboot 接收发送日期类型的数据
    问题无法请求到后台,后台报错:[Failedtoconvertpropertyvalueoftype'java.lang.String'torequiredtype'java.time.LocalDateTime'forproperty:2023-10-02T09:26:16.069+08:00WARN14296---[p-nio-80-exec-1].w.s.m.s.DefaultHandlerExceptionRes......
  • SpringBoot 配置多数据源 dynamic-datasource(多库)
    1.Maven包com.baomidoudynamic-datasource-spring-boot-starter3.1.12.配置文件###MySQLdruid多数据源配置(纯粹多库)####去除durid配置spring.autoconfigure.exclude=com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure#指定默认数据源(必须配置)spring.d......
  • JDWP调试SpringBoot程序
    JDWP调试SpringBoot程序<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-loader</artifactId></dependency>java-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5050-jar&......
  • Springboot+Echarts+Element(二)
    今天主要是记录一些问题,主要是在使用vue通过axios发送请求的时候,起初我认为需要把vue和springboot整合到一块但是在听完课之后发现并不需要,因为vue的目的是实现前后端分离的开发,因此两个项目可以同时运行,调整vue项目就是改前端代码,调整springboot就是改后端代码,前端只负责发送请......
  • 关于在springboot中开发mybatis来实现前后端分离
    一、分层架构Controller:负责处理用户的请求和响应get请求与post请求的区别:get请求需要的在http协议上输入参数,而post请求不需要在http协议上输入参数,要在请求体中寻找参数。 在一次请求与响应过程中,首先浏览器发起一次请求到服务器,服务器中会有一个前端控制器处理请求,处理......
  • springboot整合sentinel,sleuth
     1. 整合sentinel流控当需要对一个接口进行流量监控时可以使用springboot整合sentinel  (1)在common模块中导入依赖spring-cloud-starter-alibaba-sentinel;  (2)下载sentinel控制台并启动;  (3)配置sentinel控制台地址信息spring.cloud.sentinel.transport.dashboa......
  • springboot第40集:架构师写的代码,那叫一个优雅
    事务的隔离性上,从低到高可能产生的读现象分别是:脏读、不可重复读、幻读。脏读指读到了未提交的数据。不可重复读指一次事务内的多次相同查询,读取到了不同的结果。幻读师不可重复读的特殊场景。一次事务内的多次范围查询得到了不同的结果。通过在写的时候加锁,可以解决脏读。通过在......
  • springboot第40集:架构师写的代码,那叫一个优雅
    事务的隔离性上,从低到高可能产生的读现象分别是:脏读、不可重复读、幻读。脏读指读到了未提交的数据。不可重复读指一次事务内的多次相同查询,读取到了不同的结果。幻读师不可重复读的特殊场景。一次事务内的多次范围查询得到了不同的结果。通过在写的时候加锁,可以解决脏读。通过在读......
  • [SpringBoot 1] 自动装配和Run方法
    SpringBoot1阶段:1SpringBoot自动装配build.gradle中放依赖核心依赖,有很多启动器(spring-boot-start-xxx)@SpringBootApplication@SpringBootConfiguration@Configuration@Component@EnableAutoConfiguration@AutoConfiguration......
  • springboot 与 Redis整合
    SpringBoot操作数据:Spring-datajpajdbcmongodbredis!SpringData也是和SpringBoot齐名的项目!说明:在SpringBoot2.X之后,原来使用的jedis被替换成了lettucejedis:采用的直连,多个线程操作的话,是不安全的,如果想要避免不安全的,使用jedispool连接池,更新BIO模式lettuce:采用ne......