Elasticsearch DSL 查询,用于根据多个文档中的字段值显示元素



假设表中的每一行都是单独的文档,如何在弹性搜索中执行类似于以下内容的选择查询?

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。 如果您需要给定时间范围内的所有值,请在布尔值中添加一个过滤器,其中包含时间范围查询。 希望这有帮助。

最新更新