es查询简单场景问题小记

这篇具有很好参考价值的文章主要介绍了es查询简单场景问题小记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求背景:将订单表数据同步至es,实现根据订单名称、产品名称、客户姓名、客户手机号、备注、供应商姓名进行模糊查询

ps:整合springboot+RestHighLevelClient

关于操作es数据的工具类,网上一抓一大把,我也是随便找了文章,修修改改直接用的

这篇文章主要是想记录一下在查询时遇到的问题

1、关于多条件or查询,可以使用BoolQueryBuilder,must代表必须匹配的条件,should代表可匹配的条件,以下query语句的意思即为:查询数据必须满足匹配orgId的情况,但是name、telephone、remark三者匹配其一即可

BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()
                .must(QueryBuilders.termQuery("orgId", req.getOrgId()))
                .should(QueryBuilders.matchPhraseQuery("name", req.getSearchWords()))
                .should(QueryBuilders.wildcardQuery("telephone","*" + req.getSearchWords() + "*"))
                .should(QueryBuilders.matchPhraseQuery("remark", req.getSearchWords()))
                .minimumShouldMatch(1);

2、关于手机号模糊搜索,只靠分词是不能实现的,需要用到正则表达式查询wildcardQuery

QueryBuilders.wildcardQuery("telephone","*" + req.getSearchWords() + "*")

3、关于分词器

对于中文,大部分情况都喜欢用ik分词器,但是即使使用ik_maxword分词器也并不能实现所有情况都能查回来,比如“门店客户”可能会被分词器拆分为“门店”、“客户”、“门店客户”,你输入门,是无法查回来这条数据的,如果有这种场景,建议还是使用standard

4、关于使用match时搜索条件分词的情况

我发现我输入“门店”进行查询,会查询到查询field包含“**门**” 、“**店**”、“**门**店**”的情况,但是这种数据不在我的搜索目标内,所以可以使用matchPhraseQuery,matchPhraseQuery只能匹配门店两个词必须相邻的情景文章来源地址https://www.toymoban.com/news/detail-716860.html

到了这里,关于es查询简单场景问题小记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 当es使用script脚本查询聚合等操作遇到空字段报错问题解决方案

            在使用ES的脚本时,如果脚本中引用了不存在或者空的字段,则会导致脚本执行失败并抛出错误。这是因为ES会在脚本执行之前尝试检索引用的字段,如果该字段不存在则会抛出异常。         因此,在使用ES脚本时,需要确保所引用的字段都存在且不为空。可

    2024年02月11日
    浏览(54)
  • MySQL查询条件OR导致模糊查询失效

    起因:查出来的列表数据,通过查询条件过滤,发现过滤条件并不起作用 检查发现:where查询条件里面有or的过滤条件,用来进行权限控制,模糊查询条件本来是起效果的,但是OR的条件一执行,就有多了些数据 代码: 期望的结果:先查出来所有符合要求的,然后再根据过滤

    2024年01月22日
    浏览(46)
  • 彻底解决ES 数据查询 from + size must be less than or equal to:xxx 问题

    ES分页查询时出现超过一万页就爆出这个错误:Result window is too large, from + size must be less than or equal to: [10000] but… 该错误是由于es默认设置最大页数为一万的原因导致的,这样设置也是为了防止OOM。 第一种解决方式: 防止这个错误出现是设置 index.max_result_window的值。但是这种

    2024年02月14日
    浏览(39)
  • Thinkphp6 的 where 查询条件 and 和 or 的 操作

    tp3.2 来说 or 或者and 的操作可以在一个数组中用_logic 来解决 $where = [\\\'id\\\'=1,\\\'name\\\'=\\\'小表\\\',\\\'_logic\\\'=\\\'or\\\']     但是tp6的不行。 $where1 = [\\\'id\\\'=1, \\\'name\\\'=\\\'小白\\\']; $where2 = [\\\'id\\\'=2, \\\'name\\\'=\\\'小黑\\\']; $where = [$where1, $where2,\\\'_logic\\\'=\\\'or\\\'] tp6的and 和 or 可以实现的方法比较多 已知:-where(A)-where(B) 俩个条件关

    2024年02月06日
    浏览(55)
  • ES多条件查询

    场景:想要查询出设备id 为 3 的所有设备上报信息,并且上报信息的开始时间或结束时间只要有一个满足 在 某个时间段里即可。 在 Elasticsearch 中,您可以使用布尔查询来实现同时满足条件1并且满足条件2或条件3中的一个的查询。具体来说,您可以使用“must”子句来指定满足

    2024年02月09日
    浏览(40)
  • ES之多条件、范围查询

    一、多条件查询 1.条件“且”,即查询\\\"title\\\"为\\\"test6\\\",且\\\"num\\\"为5的数据 【GET】请求:http://127.0.0.1:9200/test-index-1/_search,参数如下 结果如下 2.条件“或”,即查询\\\"title\\\"为\\\"test6\\\",或\\\"title\\\"为\\\"test8\\\"的数据 【GET】请求:http://127.0.0.1:9200/test-index-1/_search,参数如下 结果如下 二、范围

    2024年02月11日
    浏览(46)
  • ES:多值(in)查询和条件批量删除

    Elasticsearch 查询删除语句 查询结果 查询结果 多值批量查询结果如下 删除语句 删除结果如下

    2024年02月11日
    浏览(52)
  • ES实现三表关联查询+条件过滤

            很多时候mysql的表之间是一对多的关系,比如库信息表(元数据信息),表信息表(元数据信息),字段信息表(元数据信息)。一个库可以包含多个表,一个表可以包含多个字段。他们的关系:库—(1:n)-表—(1:n)-字段。         ElasticsSearch(以下简称ES)处

    2024年02月05日
    浏览(48)
  • ElasticSearch系列 - SpringBoot整合ES:组合多个查询条件 bool 查询

    01. ElasticSearch 布尔查询是什么? 在实际应用中,我们很有可能会查询多个值或字段。 一个 bool 查询由三部分组成: must:所有的语句都必须(must) 匹配,与 AND 等价。 must_not:所有的语句都不能(must not)匹配,与 NOT 等价。 should:至少有一个语句要匹配,与 OR 等价。 02.

    2023年04月08日
    浏览(74)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包