date - Elasticsearch 或 term 与日期范围相结合

标签 date elasticsearch range

我正在尝试使用包含范围的 OR 语句查询我的索引,为此我构建了以下查询(在文档的帮助下):

{
    "query": {
        "match_all": {}
    },
    "size": 50,
    "filter": {
        "or": [{
            "term": {
                "fromPlace": "liverpool"
            },
            "range" : {
                "query" : {
                    "gte": "01/01/2012",
                    "lte": "2013",
                    "format": "dd/MM/yyyy||yyyy"
                }
            }
        }]
    }
}

但是,这给了我一个“查询格式错误,start_object 后没有字段”错误。完整的错误信息:
{
  "error": {
    "root_cause": [
      {
        "type": "query_parsing_exception",
        "reason": "[_na] query malformed, no field after start_object",
        "index": "quote-lanes2",
        "line": 13,
        "col": 15
      }
    ],
    "type": "search_phase_execution_exception",
    "reason": "all shards failed",
    "phase": "query",
    "grouped": true,
    "failed_shards": [
      {
        "shard": 0,
        "index": "quote-lanes2",
        "node": "opqibf4zRxOXTHz0QIAaeA",
        "reason": {
          "type": "query_parsing_exception",
          "reason": "[_na] query malformed, no field after start_object",
          "index": "quote-lanes2",
          "line": 13,
          "col": 15
        }
      }
    ]
  },
  "status": 400
}

有什么建议?或者对文档的详细说明?
在此先感谢各位!

编辑:

因此,由于 @or-weinberger,查询得到了修复。 ,但它实际上并没有过滤日期。我将“查询”更改为“validFrom”,以便我的查询如下所示:
{
  "size": 50,
  "query": {
    "bool": {
      "must": {
        "match_all": {}
      },
      "filter": {
        "or": [
          {
            "term": {
              "fromPlace": "liverpool"
            }
          },
          {
            "range": {
              "validFrom": {
                "gte": "2017-03-22T08:43:11",
                "format": "strict_date_optional_time||epoch_millis"
              }
            }
          }
        ]
      }
    }
  }
}

GTE 显然是 future 的,不应该匹配具有以下值的文档(但它确实如此):
enter image description here

我的日期字段正确映射为日期字段:
enter image description here

理想情况下,我只想过滤“yyyy/mm/dddd”部分。
有任何想法吗?

最佳答案

您的查询确实格式错误,过滤器应该在 bool 下应该在 query 下的元素元素。另外,当使用 or 时/and您应该为每个过滤器元素(范围/术语等)创建单独的对象,例如:

{
  "size": 50,
  "query": {
    "bool": {
      "must": {
        "match_all": {}
      },
      "filter": {
        "or": [
          {
            "term": {
              "fromPlace": "liverpool"
            }
          },
          {
            "range": {
              "query": {
                "gte": "01/01/2012",
                "lte": "2013",
                "format": "dd/MM/yyyy||yyyy"
              }
            }
          }
        ]
      }
    }
  }
}

关于date - Elasticsearch 或 term 与日期范围相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39954391/

相关文章:

python - 在 python 中解析法语日期

elasticsearch - Grafana 条形图 : visualize sum of entries per product type for each month

elasticsearch - Elasticsearch /kibana 从相同索引的 2 个文档中获取数据?

javascript - 如何使用 JS/jQuery 验证两个下拉字段中的时间值?

python - 根据一列中与 Pandas 另一列中的引用日期最接近的日期选择行?

javascript - HighCharts 错误的 xAxis 标签

javascript - 如何每周日更新日期?

elasticsearch - Elasticsearch:_score对于tf()始终为0

arrays - ARRAYFORMULA 中的 SUMIFS 不起作用

image - 如何更改图像中的像素值范围?