千家信息网

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

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇文章主要介绍"怎么解决elasticsearch should和must共存时should失效的问题",在日常操作中,相信很多人在怎么解决elasticsearch should和must共存时s
千家信息网最后更新 2025年01月23日怎么解决elasticsearch should和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平级的写法是错误的。

注意错误写法

根据搜索结果可以发现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);


搜索结果

例如在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失效的问题"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0