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

2020/2/23 17:02:48

本文主要是介绍??史上最全的ElasticSearch系列之should must联用问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

前言

文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820…
种一棵树最好的时间是十年前,其次是现在
我知道很多人不玩qq了,但是怀旧一下,欢迎加入六脉神剑Java菜鸟学习群,群聊号码:549684836 鼓励大家在技术的路上写博客

絮叨

其实这个问题,也算不得是什么大问题,就是不知道的很坑,公司的搜索服务,本来不是我维护的,后面因为人员调动,给我维护了,然后他们用的竟然不是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系列之should must联用问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程