解决es中must,must_not,should不能同时生效
解决es中must,must_not,should不能同时生效的问题
·
开篇废话部分:
最近在写数据中心的项目,数据库用的ES,最开始用的都是must条件(也是模仿别人写的),后来加了must_not之后,发现不生效。查来查去,没解决问题,放弃了。再后来又写should,发现还是不生效,然后就来劲了,无论如何也要解决掉。
正文部分:
最开始在网上模仿的es多条件的语句,是这么写的:
"query": {
"bool": {
"must": [ must条件一, must条件一],
"should": [should条件一]
"must_not": [ must_not条件一]
}
}
但是我这么写,must_not的条件,根本不生效.。
后来参考了这个文章的思路
参考文章链接
改成了如下结构:
"query": {
"bool": {
"must": [
{
"bool": {
"must": [must条件一,must条件二]
}
},
{
"bool": {
"should": [should条件一,should条件二]
}
},
{
"bool": {
"must_not": [must_not条件一]
}
}
]
}
}
然后所有的条件就都生效了。
详细的原理,可以去看参考链接,这里只做解决方案的总结记录。
结尾废话部分:
感觉这个嵌套,有点像是Python的Pandas的mask过滤方法,
如果是一个条件过滤,就直接:
df[ df['列名']==某值 ]
如果是多个条件,就需要加上np.array()
df[ np.array( df['列名1']==某值1 ) | np.array( df['列名2']==某值2 ) ]
更多推荐
活动日历
查看更多
直播时间 2025-02-26 16:00:00


直播时间 2025-01-08 16:30:00


直播时间 2024-12-11 16:30:00


直播时间 2024-11-27 16:30:00


直播时间 2024-11-21 16:30:00


目录
所有评论(0)