史上最全的ElasticSearch系列之should must联用问题

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 前言文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820…种一棵树最好的时间是十年前,其次是现在

前言


文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820…

种一棵树最好的时间是十年前,其次是现在

絮叨


其实这个问题,也算不得是什么大问题,就是不知道的很坑,公司的搜索服务,本来不是我维护的,后面因为人员调动,给我维护了,然后他们用的竟然不是JPA,用的是RestHighLevelClient。这就很尴尬了,没有学过,然后稀里糊涂的用着。


前言 一个新功能的迭代,下面是迭代的原型


其实也很简单就是做一个听课卡的筛选出,可以使用的课程和免费的课程嘛,当时就大概看了看以前的代码,因为es这个也是自己新学的吧,但是以前学的时候用的是JPA,这次项目用的是RestHighLevelClient,然后搞来搞去,搞了很久。 因为,这个文章就是给自己的一个记录,所以也没打算说讲的很详细,就举个例子说明一下吧,具体怎么用es,我会写专门的es系列


问题


如在a=1且b=2的数据中,找出c=1或者d=2的数据

那我可能会这样写,如果你是按照sql的思维的话

{"query": {
   "bool": {
        "must": [
{"match": {
        "a": "1",
         "b": "2"
    }}
    ],
   "should": [
      {"match": {
       "c": "1"
    },
        {"match": {
        "d": "2"
        }}
    ]
}}}
复制代码


这样写的时候should是没有用的,这是新手可能犯的错误之一。 在编写查询条件的时候,不能用口头上的逻辑进行编写,而是要换成数学逻辑才能进行执行(数据库同理)。 如上例,数学逻辑应该是 (a==1&&b==2&&c==1)||(a==1&&b==2&&d==2)(java and c语言版),这样的结构去查询。


解决


{"query": {
   "bool": {
    "should": [
      {"match": {
           "a": "1",
           "b": "2",
           "c": "1"
        }}
    ],
    "should": [
      {"match": {
          "a": "1",
          "b": "2",
          "d": "2"
    }}
    ]
}}}  
复制代码


或者这样

{
   "query": {
      "bool": {
         "must": [
            {"match": {
            "a": "1",
            "b": "2"
            }},
            {
                "bool": {
                  "should": [
                     {"match": {"c": 1}},
                     {"match": {"d": 2}}
                  ]
               }
            }
         ]
      }
   }
复制代码


结尾


嗯,记录一下新手经常犯的错误,哈哈博主也是个新手菜鸡。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
11月前
|
存储 自然语言处理 关系型数据库
Elasticsearch之Restful操作1
Elasticsearch之Restful操作
110 0
|
2月前
|
JavaScript Java 开发工具
ElasticSearch实战 之 es的安装和使用
ElasticSearch实战 之 es的安装和使用
153 0
|
9月前
|
存储 监控 搜索推荐
ElasticSearch第二讲:ES详解 - ElasticSearch基础概念
ElasticSearch第二讲:ES详解 - ElasticSearch基础概念
215 0
|
11月前
|
存储 搜索推荐 数据可视化
|
11月前
|
SQL 数据可视化 前端开发
简单好用的ElasticSearch可视化工具:es-client和Head
使用 ElasticSearch(简称 es) 的过程中,经常有一些临时查询(如 排查问题、验证效果),一个趁手的可视化工具 可以提高工作效率。个人倾向于 免费(最好开源)、易于安装(如 浏览器插件),`es-client` 就是 比较简单好用的一个,尤其是 查询
1570 0
|
11月前
|
SQL 关系型数据库 索引
Elasticsearch之Restful操作 2
Elasticsearch之Restful操作
75 0
玩转Elasticsearch—Go整合ES7.16.2
玩转Elasticsearch—Go整合ES7.16.2
ES自定义插件-elasticsearch-analysis-hanlp
ES自定义插件-elasticsearch-analysis-hanlp
ES自定义插件-elasticsearch-analysis-hanlp
|
存储 缓存 安全
【Elastic Engineering】Elasticsearch:Elasticsearch 中的 refresh 和 flush 操作指南
Elasticsearch:Elasticsearch 中的 refresh 和 flush 操作指南
369 2
【Elastic Engineering】Elasticsearch:Elasticsearch 中的 refresh 和 flush 操作指南
【Elasticsearch】bulk的使用
【Elasticsearch】bulk的使用
123 0
【Elasticsearch】bulk的使用