怎么写ES or查询的query?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么写ES or查询的query?相关的知识,希望对你有一定的参考价值。

参考技术A 百度es的or查询,大多数的博客会告诉你用should,但是should应该加在哪儿,有很多的谬误,导致query和实际查询语义不一样。

例如实现 "name"=="a" and ("city" == "b" or "city" == "c") ,是不是以为这样就可以?

是不可以的,当must和should同级时,should只影响评分_score,而不具备过滤功能,查询结果见图1,city=='d'的doc也返回了,只不过评分低一些。

怎么办呢?有两种解决方案。

扩展.
等价于 year==2020 and learn_season in (2,20,21,22,...) and main_grade in (1,2,3) and lesson_stop_time >=1598244100 and lesson_assistant_status ==1 and (assistant_preclass_live_duration > 0 or assistant_postclass_live_duration > 0)

扩展之又.
or 查询中有不等于怎么办?百度会告诉你 用must_not,
例如 city== a or city != c ,ES 不支持不等于运算符, must_not是和bool同级使用的,怎么办呢?

转变思路, city != c 是不是就是等价于 city > c or city < c ,query就可以这么写。

that's all,enjoy~

SQL语句where多条件查询怎么写

select * from table where a=b or b=c or c=d and id>100

用or 和 and,

上面的意思是找到TABLE表里,条件为:A=B或者B=C或者C=D,而且这条数据ID>100的。。。

注意不同数据库用法不同,不过比较类似MSSQL MYSQL,只是一些语法上的不一样。

条件用

OR,或者,只要满足一个条件,

AND条件都满足,

看你自己需求来写。

参考技术A select * from a where b in(‘1’ , ‘2’, ‘3’) and c <> '4'

select * from a
where b like '%1%'
and b like '%2%'
and b like '%3%'
and c not like '%4%'

以上是关于怎么写ES or查询的query?的主要内容,如果未能解决你的问题,请参考以下文章

es7.x—查询篇

es实现and与or查询

Elasticsearch 查询语法 --- 2022-04-03

Mongoosejs:将 query.or() 与地理空间查询一起使用

sqlalchemy 动态查询条件怎么写

ES Query DSL