当前位置: 首页 > 知识库问答 >
问题:

Elasticsearch-存在语法+筛选器不起作用

尉迟墨竹
2023-03-14

我试图查询存在特定字段的日期范围。这似乎很容易,但我感觉到关键字“exists”在文档中发生了变化。我在5.4。https://www.elastic.co/guide/en/elasticsearch/reference/5.4/query-dsl-exists-filter.html

我使用@timestamp表示日期,并且字段“error_data”在映射中,只有在发现错误条件时才出现。

以下是我的疑问....

GET /filebeat-2017.07.25/_search
{
    "query": {
        "bool" : {
          "filter" : {
            "range" : {
                "@timestamp" : {
                    "gte" : "now-5m",
                    "lte" : "now-1m"
                }
            }
          },
          "exists": {
          "field": "error_data"
          }
        }
    }
}

但是它说“[bool]查询不支持[exists]”,而下面的方法也不起作用,但在第6行第9列得到一个解析错误消息“[exists]格式错误的查询,预期的[END_OBJECT]但发现[FIELD_NAME]”。谢谢你的帮助。

GET /filebeat-2017.07.25/_search
{
    "query": {
        "exists": {
          "field": "error_data"
        }, 
        "bool" : {
          "filter" : {
            "range" : {
                "@timestamp" : {
                    "gte" : "now-5m",
                    "lte" : "now-1m"
                }
            }
          }
        }
    }
}

共有1个答案

陈弘厚
2023-03-14

你快到了。试着这样做:

GET /filebeat-2017.07.25/_search
{
    "query": {
        "bool" : {
          "filter" : [
            {
              "range" : {
                "@timestamp" : {
                    "gte" : "now-5m",
                    "lte" : "now-1m"
                }
              }
            },
            {
              "exists": {
                "field": "error_data"
              }
            }
          ]
        }
    }
}

也就是说,bool/filter子句必须是一个数组,如果您有几个子句要放进去:

 类似资料:
  • 我有一个弹性搜索查询,可以使用multi_match和range过滤器,但我无法找到添加术语过滤器的正确语法。 我使用的是elasticsearch版本7.1.0。 以下是有效的查询: 这将从我的索引中返回所有与“核能”短语匹配的文档,这些文档的发布日期在2019-07-02-16:26之后。 我现在希望能够过滤查询,以便它只返回某种类型的结果。索引中有一个名为object_type的字段,用于存

  • 我是elasticsearch的新手,所以我的问题是: 提前致谢:)

  • 所有人。这是一个带有elasitcsearch文档url的简单测试代码

  • 此外,它在spark cassandra Connector1.4中工作,但不是与最新的cassandra Connector1.6.0-M1一起工作。请让我知道这个问题

  • 我试图使用python客户端应用筛选弹性搜索索引数据,但它不能处理字符串字段。 这是我的ES索引数据: [{u“_score”:1.0,u“_type”:u“ip”,u“_id”:u“79”,u“_source”:{u“status”:u“published”,u“username”:u“jackie@example.com”,u“id”:79},u“_index”:u“idx_object”},

  • 我试图在 /users查询中使用包含过滤器,例如:https://graph.microsoft.com/v1.0/users?$filter=包含(displayName,'Garth') 然而,这会导致一个BadRequest响应,称“发现了一个名称为‘包含’的未知函数”。这也可能是导航属性上的键查找,这是不允许的。" 根据OData 4.0规范,包含过滤器应该是可用的。有没有办法在用户列表中