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

Elasticsearch时间范围查询和数据

万俟穆冉
2023-03-14

我正在努力为弹性搜索制定正确的API搜索调用,这将要求在过去1小时内获得我想要的ipv4address。

第一次尝试:

curl -X GET "localhost:9200/ipaddresses/_search" -H 'Content-Type: application/json' -d'
     {
       "query": {
         "match": {
           "ipv4address": {
             "query": "50.167.71.25"
           }
         }
       },
       "range": {
         "@timestamp": {
           "gte": "now-1h",
           "lt": "now"
         }
       }
     }
     '

{“error”:{“root\u cause”:[{“type”:“parsing\u exception”,“reason”:“未知键,用于[范围]中的START\u对象。”,“line”:10,“col”:12}],“type”:“parsing\u exception”,“reason”:“未知键,用于[范围]中的START\u对象。”,“行”:10,“列”:12},“状态”:400}

第二次尝试:

curl -X GET "localhost:9200/ipaddresses/_search" -H 'Content-Type: application/json' -d'
{
   "query": {
     "match": {
       "ipv4address": {
         "query": "50.167.71.25"
       }
     }
   },
   "fields": {
    "range": {
     "@timestamp": {
      "gte": "now-1h",
      "lt": "now"
     }
   }
  }
 }
 '

{"错误":{"root_cause":[{"type":"parsing_exception","原因":"[字段]中START_OBJECT的未知密钥.","line": 10,"coll": 14}],"type":"parsing_exception","原因":"[字段]中START_OBJECT的未知密钥.","line": 10,"coll": 14},"status": 400}

我在基巴纳拥有:

{
  "_index": "ipaddresses",
  "_type": "default",
  "_id": "TJdvR2UB9sEBYW4CrElF",
  "_version": 1,
  "_score": null,
  "_source": {
    "tags": [
      "blocked",
      "ipv4_address",
    ],
    "@version": "1",
    "@timestamp": "2018-08-17T10:30:25.118Z",
    "ipv4_metadata": {
      "host": "elk",
      "name": "blocks",
      "response_message": "OK",
      "code": 200,
      "times_retried": 0,
      "runtime_seconds": 0.066403,
      "response_headers": {
        "connection": "keep-alive",
        "x-frame-options": "sameorigin",
        "last-modified": "Fri, 17 Aug 2018 10:28:06 GMT",
        "keep-alive": "timeout=20",
        "date": "Fri, 17 Aug 2018 10:28:20 GMT",
        "content-type": "text/plain; charset=UTF-8",
        "server": "nginx/1.12.2",
        "transfer-encoding": "chunked",
        "etag": "W/\"5c7c5-5739f03f2997f\"",
        "cache-control": "public"
      }
    },
    "ipv4address": "50.167.71.25",
    "message": "50.167.71.25"
  },
  "fields": {
    "@timestamp": [
      "2018-08-17T10:30:25.118Z"
    ]
  },
  "sort": [
    1534501825118
  ]
}

查询有什么问题?如果我还想查找一个等于blocked的“tag”字段,该怎么办?

请帮我把这些点连起来。

共有1个答案

慕弘深
2023-03-14

此查询将返回过去1小时的文档:

{
   "query": {
     "range": {
       "@timestamp": {
         "gte": "now-1h",
         "lt": "now"
       }
     }
   }
 }

此查询将返回标记被阻止的文档,这些文档来自最近1小时:

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "tags": "blocked"
          }
        },
        {
          "range": {
            "@timestamp": {
              "gte": "now-1h",
              "lte": "now"
            }
          }
        }
      ]
    }
  }
}

您可以使用_source限制要返回的数据。

此查询将仅返回ipv4address:

{
  "_source": "ipv4address", 
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "tags": "blocked"
          }
        },
        {
          "range": {
            "@timestamp": {
              "gte": "now-1h",
              "lte": "now"
            }
          }
        }
      ]
    }
  }
}

如果您想应用更多查询,请查看以下内容。

 类似资料:
  • 问题内容: 我想查询日期范围内的elasticsearch文档。我现在有两个选择,两个都适合我。已经测试了他们两个。1.范围查询2.范围过滤器 由于我现在的数据集很小,因此无法测试它们的性能。两者有什么区别?哪个会导致更快地检索文档和更快地响应? 问题答案: 查询和过滤器之间的主要区别在于评分。查询将返回每个文档具有相对排名得分的文档。过滤器没有。这种差异使过滤器更快,有两个原因。首先,它不会产生

  • 我想查询日期范围内的elasticsearch文档。我现在有两个选择,都很适合我。我已经测试了他们两个。1.范围查询2。距离滤波器 因为我现在有一个小数据集,所以无法测试它们的性能。这两者有什么区别?哪一种方法可以更快地检索文档和响应?

  • 问题内容: 如何在SQLite中高效地执行简单范围查询? 说,我有保存个人信息的数据,我想找到年龄在20到45岁之间,体重在50到80公斤之间的人? 我应该怎么做(例如设置某些索引?)以提高搜索效率? 问题答案: 我会尝试像 对“年龄”和“体重”字段建立索引将有助于加快查询速度。 这是有关在SQLite中建立索引的很好的概述:http : //www.tutorialspoint.com/sqli

  • 我有一个dynamodb表,其结构如下 我想在此表上执行两个主要查询。 获取用户的所有条目- 还有其他建议吗?谢谢你。 2014年5月更新这里发布了一些很好的建议。我仍在尝试如何最好地实现这一点,并希望检查以下方法的优缺点。 我担心这可能会造成很多不一致,好像对usertrips或recenttrips的插入失败了等等。

  • 在你否决之前,我想声明,我看了所有类似的问题,但我仍然得到可怕的“主键列不能被限制”错误。 下面是我的表结构: 谢谢,德尼兹

  • 需要开始时间跟结束时间的范围查询数据 假如:前端传入的是2023-06-27,开始跟结束都是2023-06-27,目前这样返回的是空数组。 但是数据库创建的数据是6月27号上午10点的 有11点的。还是下午2点的。 数据库表的createtime存的是时间戳。 现在是要查询27号当天0点到23:59点的才对吧?实现这样要怎么写?