elasticSearch7版本文档中文属性模糊查询不准确

1、问题:es文档中的某个属性值name的值如下所示

name":"catalog=Catalog(value=699015935012372480, displayName=/默认分组),
status=3, updaterName=admin, updateTime=2023-02-01
14:33:17)status:已发布”

通过java模糊查询的api(QueryBuilders.fuzzyQuery)查询name为“已”的时候可以查询,查询为“已发布”的时候查询不出来。

2、原因:索引中没设置分词器

ps:索引中没设置分词器
在这里插入图片描述

ps:索引中设置分词器后
在这里插入图片描述

3、解决方案

3.1 给索引添加分词器(删除索引后,然后重新建立索引并设置分词器,如2中图所示)
3.2 换成QueryBuilders.matchPhraseQuery()的api(中文模糊查询推荐使用此api)

ps:matchPhraseQuery() 与 matchQuery()区别
matchPhraseQuery():使用matchPhraseQuery时,不会被分词器分词,而是直接以一个短语的形式查询;
matchQuery():在执行查询时,搜索的词会被分词器分词;

4、查看某索引的信息(比如是否用到分词器),代码如下

public class GetIndex {
    // index:log的名称
    private static final Logger log = Logger.getLogger("index");

    public static void main(String[] args) throws IOException {
        // 创建客户端对象
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(new HttpHost("ip", 端口, "http"))
        );

        //1、查看索引
        // 请求对象
        GetIndexRequest request = new GetIndexRequest("user");
        // 发送请求
        GetIndexResponse response = client.indices().get(request, RequestOptions.DEFAULT);
        // 响应信息
        log.info("aliases: = " + response.getAliases());  // 别名
        log.info("mappings: = " + response.getMappings());  // 映射
        log.info("settings: = " + response.getSettings());  // 设置信息
        // 关闭资源
        client.close();
    }
}

借鉴地址

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值