网站首页 > 开源技术 正文
ElasticSearch模糊查询的问题
今天在遇到es查询的时候,遇到了难点,花了半天才发现问题原因。
需求是:es实现模糊查询。相当于sql中的like %像%一样。但是在开发过程中,我使用了各种分词,各种查询代码,总是实现不了。
问题:
比如:我查询切片面包可以查询出来,但是我查询切面包就查询不出来。
? 原因是es默认采用了分词机制,导致我查询的时候,切面包没有放在一个分词中,查询不到。
MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("name", name);
// Iterable<Commodity> iterable = commodityRepository.search(matchQueryBuilder);
// Iterable<Commodity> iterable = commodityRepository.search(matchQueryBuilder);
// iterable.forEach(e->list.add(e));
查询资料后,我测试下面的代码:
WildcardQueryBuilder wildcardQueryBuilder = QueryBuilders.wildcardQuery("name", "*"+name+"*");
Iterable<Commodity> iterable = commodityRepository.search(wildcardQueryBuilder);
测试了一下,还不行。郁闷中。
字段分词器
然后我在字段属性上,加上分词器。先删除es上的数据,然后重新插入数据。
@Field(type = FieldType.Text, analyzer = "ik_max_word")
private String title; //标题
测试上面二个代码,还是没法查询出切面包的数据。
最后,我尝试删除整个索引,再重新插入数据测试一下
DELETE /commodity
整个命令就是kibaba中的删除索引命令。然后,我在字段属性中设置为keyword:
@Field(type = FieldType.Keyword)
private String name;
然后,重新插入数据,利用模糊查询代码执行:
WildcardQueryBuilder wildcardQueryBuilder = QueryBuilders.wildcardQuery("name", "*"+name+"*");
Iterable<Commodity> iterable = commodityRepository.search(wildcardQueryBuilder);
奇迹出现了,居然成功了。无论我查询什么,只要包含,就可以查询出来。终于解决了这个问题,总算松了口气。
总结
在改变了索引(文档)的属性时,原来属性为text,后来改为keyword。所以必须先删除干净索引,重新插入数据,在模糊查询。我的原因就是没有删除索引导致的。一定要记得重新生成索引才可以做到模糊查询的效果。
分享给你一张 Elasticsearch 核心知识图谱,只有对每一个知识点仔细梳理并深入理解,才能解决工作中的实际问题。关注私信回复:555 领取Java高级架构资料
感谢支持哦,认真写文章,用心做分享。个人公种浩【java耕耘者】,文章都会在里面更新,整理的资料也会放在里面。
猜你喜欢
- 2024-12-14 ES的searchAfter使用详解
- 2024-12-14 Spring Boot Data Elasticsearch 通用工具类
- 2024-12-14 SpringBoot+Vue+ES 实现仿百度全文搜索
- 2024-12-14 Spring Data JPA——多表设计、一对多、多对多、多表查询
- 2024-12-14 一文读懂SpringBoot整合Elasticsearch
- 2024-12-14 ElasticSearchRepository和ElasticSearchTemplate的使用
- 2024-12-14 Elasticsearch 在地理信息空间索引的探索和演进
- 2024-12-14 Java微服务-一套前后台全部开源的H5商城送给大家(全部开源)
- 2024-12-14 android使用greendao来保存数据
- 2024-12-14 纯干货,Spring-data-jpa详解,全方位介绍
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)