gpt4 book ai didi

elasticsearch - 在Elasticsearch中将选择具有特定字段的文档设置为NULL

转载 作者:行者123 更新时间:2023-12-02 23:30:45 28 4
gpt4 key购买 nike

有人请帮助我在下面的ES查询中添加expires_at IS NULL。我查看了Dealing with Null Values过滤器中的missing部分,但是使用它的方式(显示在底部)导致未过期的文档没有出现在结果中,因此显然我在这里做错了。

注意:我不想使用or query,因为它是deprecated in 2.0.0-beta1

QUERY

{
"query": {
"filtered": {
"query": {
"bool": {
"must": [
{
"term": {
"order_id": "123"
}
},
{
"term": {
"is_active": 1
}
},
{
"range": {
"expires_at": {
"gt": "2016-07-01T00:00:00+0000"
}
}
}
]
}
}
}
}
}

我的目标是:
SELECT * FROM orders
WHERE
order_id = '123' AND
is_active = '1' AND
(expires_at > '2016-07-01T00:00:00+0000' OR expires_at IS NULL)

这就是我所做的,但是在这种情况下不会显示未过期的文档,所以这是错误的。
{
"query": {
"filtered": {
"filter": {
"missing": {
"field": "expires_at"
}
},
"query": {
"bool": {
"must": [
......
......
]
}
}
}
}
}

我的ES版本:
{
"status" : 200,
"name" : "Fan Boy",
"version" : {
"number" : "1.3.4",
"build_hash" : "a70f3ccb52200f8f2c87e9c370c6597448eb3e45",
"build_timestamp" : "2014-09-30T09:07:17Z",
"build_snapshot" : false,
"lucene_version" : "4.9"
},
"tagline" : "You Know, for Search"
}

最佳答案

应该这样做:

{
"query": {
"filtered": {
"query": {
"bool": {
"must": [
{
"term": {
"order_id": "123"
}
},
{
"term": {
"is_active": 1
}
},
{
"bool": {
"should": [
{
"range": {
"expires_at": {
"gt": "20160101000000"
}
}
},
{
"filtered": {
"filter": {
"missing": {
"field": "expires_at"
}
}
}
}
]
}
}
]
}
}
}
}
}

关于elasticsearch - 在Elasticsearch中将选择具有特定字段的文档设置为NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36740005/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com