es Java Api match查询采坑

因为我的数据是aaa-bbb-ccc这种有分隔符的,而且在查询时没有使用keyword导致在查询时进行了分词查出的结果与我想要的不符,如下

//name = bs-blc-client-ops-t-6b7567c9c-lrmls 
BoolQuery.Builder boolQueryBuilder = QueryBuilders.bool();
            if (name != null && name.length() > 0) {                   							   
                boolQueryBuilder.must(QueryBuilders.match(r -> r
                    .field("serverName")
                    .query(name)));
            }

上面的代码会导查出很多其他的数据,因为其他数据也会带有bs或者blc这些分词

//得改成下述代码:
//name = bs-blc-client-ops-t-6b7567c9c-lrmls 
BoolQuery.Builder boolQueryBuilder = QueryBuilders.bool();
            if (name != null && name.length() > 0) {                   							   
                boolQueryBuilder.must(QueryBuilders.matchPhrase(r -> r
                    .field("serverName")
                    .query(name)));
            }
//或者
BoolQuery.Builder boolQueryBuilder = QueryBuilders.bool();
            if (name != null && name.length() > 0) {                   							   
                boolQueryBuilder.must(QueryBuilders.match(r -> r
                    .field("serverName.keyword")
                    .query(name)));
            }

QueryBuilders.match

  • 匹配方式:match查询是一种全文检索查询,它会对输入的查询字符串进行分词,然后与目标字段中的内容进行匹配。只要目标字段中包含查询字符串中的任意一个分词,就可以匹配成功。
  • 适用场景:match查询适用于需要模糊匹配的场景,例如搜索包含某个关键词的文档。
  • 特点
    • 支持分词器对查询字符串进行分词。
    • 可以设置operator参数来控制分词之间的布尔关系(如or、and)。
    • 匹配结果可能会包含多个分词中的任意一个或多个。

QueryBuilders.matchPhrase

  • 匹配方式:matchPhrase查询是一种短语匹配查询,它要求查询字符串中的单词必须按照给定的顺序出现在目标字段中,并且单词之间的相对位置也要保持一致。
  • 适用场景:matchPhrase查询适用于需要精确匹配短语或短语的顺序的场景,例如搜索包含特定短语的文档。

keyword的注意事项

  • 当查询的字段带有keyword时,默认是不进行分词的,所以可以用match去查,也可以精确匹配,但是如果需要模糊查询,需要使用wildcard,不能使用match和matchPhrase,且在值带上"*"号即可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想吃饼干吗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值