ElasticSearch-用元数据排除匹配项

时间:2019-10-24 15:07:12

标签: php elasticsearch

我正在使用ES 6.6,并且正在搜索早于当前日期的文档。只有2个文档,但是我得到了3个项目。现有的2个文档和第三个是设置和映射。我只想得到两个文件。

我试图添加一个带有“ exists”的过滤器,但是ES没有返回任何文档:

GET _search
{
  "query": {
    "bool": {
      "filter": [
        {
          "exists": {
            "field": "products"
          }
        },
        {
          "range": {
            "happening_at": {
              "gte": "now"
            }
          }
        }
      ]
    }
  }
}

当我仅搜索范围时,我会收到2个正确的文档,但是带有额外的“匹配”,而没有文档,仅包含设置和映射。

2 个答案:

答案 0 :(得分:1)

欢迎来到艾德里安。

由于您未指定任何索引名称,因此正在_search索引之间触发all。请尝试GET <your_index_name>/_search { ... request body ...}

此外,"gte": "now"几乎不会返回任何记录,因为它表示日期为greater than or equal to current date。对于您的情况,您想要记录older而不是当前日期。因此,您可以使用lt:now或更佳的lt:now/d,因为now/d的性能不错,并且可以缓存。

请尝试以下操作:

GET <your_index_name>/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "exists": {
            "field": "products"
          }
        },
        {
          "range": {
            "happening_at": {
              "lt": "now/d"
            }
          }
        }
      ]
    }
  }
}

答案 1 :(得分:0)

您必须发布查询:)。如果您想赚钱,请不要忘记/。

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html