假设表中的每一行都是单独的文档,如何在弹性搜索中执行类似于以下内容的选择查询?
CREATE TABLE orders (
`orderid` varchar,
`status` varchar
);
insert into orders values('abc','PENDING');
insert into orders values('abc','SENT');
insert into orders values('xyz','PENDING');
select * from orders where status='PENDING' and orderid not in (select orderid from orders where status='SENT')
从SQL查询中,我的理解是您需要状态="待定"的所有记录。不知道为什么您需要此处的 AND 条件来排除状态="SENT"作为状态="待处理"的订单,您将获得所需的行。
现在,来到弹性查询,假设状态字段是关键字字段,您可以使用布尔查询来获取状态为"挂起"的文档 像这样的东西——
{
"query": {
"bool": {
"must": [
{
"term":{
"status.keyword":"PENDING"
}
}
]
}
}
}
如果您需要查找所有状态为待处理且同时发送(AND 条件(的文档,请在上面的 must 子句中添加另一个术语查询。 如果状态需要 OR-ed,则将术语查询放在 SHOULD 子句中(在 bool 查询内(,并将minimum_should_match参数设置为 1。 如果您需要给定时间范围内的所有值,请在布尔值中添加一个过滤器,其中包含时间范围查询。 希望这有帮助。