怎么解决elasticsearchshould和must共存时should失效的问题

这篇文章主要介绍“怎么解决elasticsearch should和must共存时should失效的问题”,在日常操作中,相信很多人在怎么解决elasticsearch should和must共存时should失效的问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么解决elasticsearch should和must共存时should失效的问题”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

网站建设哪家好,找创新互联公司!专注于网页设计、网站建设、微信开发、小程序制作、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了巴中免费建站欢迎大家使用!

再使用must和should混合查询的时候,发现should并不起作用。

如a==1时搜索b=1或者b=2的数据,按照编程语言的逻辑则是在a=1的条件下必须满足b=1或者b=2,

所以must和should平级的写法是错误的。

注意错误写法

怎么解决elasticsearch should和must共存时should失效的问题

根据搜索结果可以发现should并未起作用

正确写法

$params = [
            'index' => 'news',
            'type' => '_doc',
            'body' => [
                'query' => [
                    'bool' => [
                        'must' => [
                            ['match' => ['age' => 50]],
                            ['bool' => [
                                'should' => [
                                    ['match' => ['content' => '西红柿']],
                                    ['match' => ['content' => '中国和美国']]
                                ]
                            ]]
                        ]
                    ]
                ]
            ]
        ];
        $result = $this->es->search($params);
        var_dump($result);


搜索结果

怎么解决elasticsearch should和must共存时should失效的问题

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

{"query": {
   "bool": {
  "must": [
     {"term": {"a": "1"}},
       {"term":{"b": "2"}}
  ],
   "should": [
      {"term": {"c": "1"}},
    {"term": {"d": "2"}}
  ]
    }
  }
}
这样写的时候should是没有用的,这是新手可能犯的错误之一。 在编写查询条件的时候,不能用口头上的逻辑进行编写,而是要换成数学逻辑才能进行执行(数据库同理)。 如上例,数学逻辑应该是 (a==1&&b==2&&c==1)||(a==1&&b==2&&d==2),这样的结构去查询。
{"query": {
   "bool": {
  "should": [
     {"term": {"a": "1"}},
       {"term":{"b": "2"}},
       {"term": {"c": "1"}}
  ],
   "should": [
      {"term": {"a": "1"}},
      {"term":{"b": "2"}},
   {"term": {"d": "2"}}
  ]
    }
  }
}
思路就是以上那样,具体写法有2种:
{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
                {"term": {"a": "1"}},
                {"term":{"b": "2"}},
                {"term": {"c": "1"}}
            ]
          }
        },
        {
          "bool": {
            "must": [
                {"term": {"a": "1"}},
                {"term":{"b": "2"}},
              {"term": {"d": "2"}}
            ]
          }
        }
      ]
    }
  },
  "sort": {
    "time": {
      "order": "desc"
    }
  },
  "size": 100
}
或者:
{
  "query": {
    "bool": {
      "must": [
        {"term": {"a": "1"}},
        {"term":{"b": "2"}}
        {
          "bool": {
            "should": [
                {"term": {"c": "1"}},
              {"term": {"d": "2"}}
            ]
          }
        }
      ]
    }
  },
  "sort": {
    "time": {
      "order": "desc"
    }
  },
  "size": 100
}

到此,关于“怎么解决elasticsearch should和must共存时should失效的问题”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


分享标题:怎么解决elasticsearchshould和must共存时should失效的问题
链接分享:http://pwwzsj.com/article/jeedep.html