【发布时间】:2014-04-08 19:56:36
【问题描述】:
我正在使用 Elasticsearch 以以下格式存储 HTTP 日志数据:
{
"domain": "www.vg.no",
"protocol": "HTTP/1.1",
"timestamp": "2014-03-19T15:58:18",
"destination_ip": "195.88.54.16",
"referer": "http://www.vg.no/path/example.exe",
"destination_port": "80",
"response_length": "4808",
"response_code": "200",
"source_ip": "192.1.1.1",
"uri": "/bil-og-motor/css/topp_artikkel2_bilogmotor.jpg",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36",
"source_port": "63894",
"method": "GET"
}
我正在尝试构建一个查询,在该查询中我可以使用以下选项获取与用户制定的条件相匹配的数据: 域,可以匹配任何字段的搜索字符串,uri 包含文件扩展名,时间戳在定义的时间范围内。
例子:
- 域 = "www.vg.no",
- *_all* 包括“*1.1*”,
- uri = "*.exe",
- 时间戳在“2014-03-19T00:00”和“2014-03-19T23:59”之间
我已尝试多次进行此查询,但均未成功。如果有人可以帮助我,我会变得非常高兴:)
更新: 这就是我使用 python 插入记录的方式:
es.index(
index="test",
doc_type="http_log",
body={
'timestamp' : self.request.timestamp,
'domain' : self.request.domain,
'uri' : self.request.uri,
'user_agent' : self.request.user_agent,
'referer' : self.request.referer,
'method' : self.request.method,
'protocol' : self.request.protocol,
'response_code' : self.response.code,
'response_length' : self.response.length,
'source_ip' : self.request.source_ip,
'source_port' : self.request.source_port,
'destination_ip' : self.request.destination_ip,
'destination_port' : self.request.destination_port
}
)
【问题讨论】:
-
您能否也发布映射,这对于此类查询非常重要。检查每个字段的映射以查看您的数据发生了什么也是明智的。顺便说一句,您可以创建一个 bool 查询来完成此操作。
-
感谢您的回复@Jettro。我对 Elasticsearch 完全陌生,不熟悉映射的工作原理。因此,我没有指定任何明确的方式来映射文档,所以我假设 ES 正在使用某种默认映射?如有必要,我将更改映射。有什么建议吗?
-
如果没有映射,这是一个难题。一些暂时不起作用的东西。在 .exe 上搜索,尝试 example.exe 这有效。您提供的日期也有问题,它们缺少秒数,因此默认情况下不会映射到日期。您必须对所需的映射进行一些研究。