在Elasticsearch中在多个日期上具有多个范围的查询

最高

以下range_query返回预期结果:

{"query": {
    "bool": {
      "must": [
        {
          "range": {
            "created_at": {
              "gte": "2013-12-09"
            }
          }
        }
      ]
    }
  }
}

但是,与几个范围查询一起,则不会返回任何内容:

{"query": {
    "bool":{
      "must": [
        {
          "and": [
            {
              "range": {
                "created_at": {
                  "gte": "2013-12-09"
                }
              }
            },
            {
              "range": {
                "happens_on": {
                  "lte": "2013-12-16"
                }
              }
            },
            {
              "range": {
                "created_at": {
                  "lte": "2013-12-14"
                }
              }
            }
          ]
        }
      ]
    }
  }
}

在多个字段上使用多个range_queries的正确方法是什么?

编辑:啊,好的,所以这是我使用range_filter而不是range_query的地方?这听起来很有希望,所以我仅使用一个范围过滤器重新编写了查询。如果我在其他地方弄乱了查询,请在此处发布所有内容。我正在执行GET,并且源密钥中的所有内容实际上都是JSON,但是为了便于阅读,我删除了转义的连字符:

{
  "source": {
    "filtered": {
      "filter": {
        "and": [
          {
            "term": {
              "restricted": false
            }
          },
          {
            "not": {
              "term": {
                "deleted": true
              }
            }
          },
          {
            "range": {
              "happens_on": {
                "lte": "2013-12-16"
              }
            }
          }
        ]
      },
      "query": {
        "bool": {
          "must": [
          ]
        }
      }
    },
    "from": 0,
    "size": 10
  }
}

遗憾的是,我的问题仍然存在:我没有得到任何成功。

EDIT2:因此,沿着Njal建议的must子句中的范围的小巷走下去。这给了我这样的多范围查询:

{
  "source": {
    "filter": {
      "and": [
        {
          "term": {
            "restricted": false
          }
        },
        {
          "not": {
            "term": {
              "deleted": true
            }
          }
        }
      ]
    },
    "from": 0,
    "query": {
      "bool": {
        "must": [
          {
            "range": {
              "happens_on": {
                "gte": "2013-12-06"
              }
            }
          },
          {
            "range": {
              "created_at": {
                "gte": "2013-12-15"
              }
            }
          },
          {
            "range": {
              "happens_on": {
                "lte": "2013-12-17"
              }
            }
          },
          {
            "range": {
              "created_at": {
                "lte": "2013-12-17"
              }
            }
          }
        ]
      }
    },
    "size": 10
  }
}

仍然没有结果返回。我在这里犯任何明显的错误吗?

我爱卡佛

bool查询must子句下,无需将其包装在中and没有and查询,也许您在考虑and过滤器

为了方便起见,将示例可运行播放作为curl命令:

#!/bin/bash

export ELASTICSEARCH_ENDPOINT="http://localhost:9200"

# Create indexes

curl -XPUT "$ELASTICSEARCH_ENDPOINT/play" -d '{
    "settings": {},
    "mappings": {
        "type": {
            "properties": {
                "created_at": {
                    "type": "date",
                    "format": "dateOptionalTime"
                },
                "name": {
                    "type": "string"
                },
                "happens_on": {
                    "type": "date",
                    "format": "dateOptionalTime"
                }
            }
        }
    }
}'


# Index documents
curl -XPOST "$ELASTICSEARCH_ENDPOINT/_bulk?refresh=true" -d '
{"index":{"_index":"play","_type":"type"}}
{"name":"foo","created_at":"2013-12-09T00:00:00.000Z","happens_on":"2013-12-16T00:00:00.000Z"}
{"index":{"_index":"play","_type":"type"}}
{"name":"bar","created_at":"2013-12-08T00:00:00.000Z","happens_on":"2013-12-16T00:00:00.000Z"}
{"index":{"_index":"play","_type":"type"}}
{"name":"bar","created_at":"2013-12-09T00:00:00.000Z","happens_on":"2013-12-17T00:00:00.000Z"}
'

# Do searches

curl -XPOST "$ELASTICSEARCH_ENDPOINT/_search?pretty" -d '
{
    "query": {
        "bool": {
            "must": [
                {
                    "range": {
                        "created_at": {
                            "gte": "2013-12-09T00:00:00.000Z"
                        }
                    }
                },
                {
                    "range": {
                        "happens_on": {
                            "lte": "2013-12-16T00:00:00.000Z"
                        }
                    }
                }
            ]
        }
    }
}
'

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有两个或多个日期范围的MDX查询

来自分类Dev

设置具有多个日期范围的多个总和

来自分类Dev

INDEX / MATCH具有多个条件,包括日期范围

来自分类Dev

Lucen / Elasticsearch:对具有多个值的文件的查询

来自分类Dev

每个日期/时间具有多个组的MySQL查询计数

来自分类Dev

一个查询,多个日期范围

来自分类Dev

根据多个日期范围优化查询选择

来自分类Dev

用猫鼬查询多个日期范围

来自分类Dev

$或具有多个参数的查询

来自分类Dev

卡在具有多个联接的SQL查询上

来自分类Dev

具有多个联接的查询生成器上的异常

来自分类Dev

具有多个表的联结表上的MySQL SELECT查询

来自分类Dev

在 MySQL 上具有多个 where 条件的多选查询

来自分类Dev

具有多个条件的 JOINED 表上的 SQL 查询

来自分类Dev

从具有相同ID的多个范围中删除文本

来自分类Dev

Elasticsearch等效SQL In Query中具有多个字段

来自分类Dev

strtotime中具有多个相对日期的“ next”的用法

来自分类Dev

日期范围查询Elasticsearch

来自分类Dev

在NSAttributedString上具有多个具有不同属性的范围

来自分类Dev

ES中具有多个字段的通配符查询?

来自分类Dev

AngularJS中具有多个参数的查询字符串

来自分类Dev

如何在Godror中执行具有多个查询的文件?

来自分类Dev

在Django中聚合具有多个OuterRef的子查询

来自分类Dev

在其他查询中具有多个计数的结果

来自分类Dev

在查询中设置具有多个条件的参数?

来自分类Dev

在查询中返回具有多个表的空值

来自分类Dev

Solr:在具有不同条件的多个集合中查询

来自分类Dev

AngularJS中具有多个参数的查询字符串

来自分类Dev

XML 中具有多个条件的 Xpath 查询

Related 相关文章

热门标签

归档