包含多个搜索条件的Elasticsearch查询

时间:2014-04-07 18:59:48

标签: database elasticsearch

我使用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
 }
)

1 个答案:

答案 0 :(得分:0)

您必须确保时间戳的映射是date_time字段。对于elaticsearch中的不同日期时间格式,请单击here

现在首先在所有字段中搜索搜索文本,然后根据域和日期过滤掉结果。

curl -XPOST 'http://localhost:9200/test/http_log/_search' -d '
      {
"query": {
    "query_string": {
       "query": "search text"
    }
},
"filter": {
    "and": {
       "filters": [
          {
              "query": {
                  "wildcard": {
                     "uri": {
                        "value": "*.exe"
                     }
                  }
              }
          },
          {
              "query": {
                  "match_phrase": {
                     "domain": "www.vg.no"
                  }
              }
          },
          {
              "range": {
                 "timestamp": {
                    "from":"2014-03-19T00:00",
                    "to": "2014-03-19T23:59"
                 }
              }
          }
       ]
    }
}'