使用Java API进行Elasticsearch复杂查询

时间:2015-09-06 06:52:34

标签: java elasticsearch

我正在尝试使用Java API查询ElasticSearch,我的查询是:

curl -XGET 'http://localhost:9200/logstash-*/_search?search_type=count' -d '
{
    "query": {
        "filtered": {
            "query": {
                "match_all": {}
            },
            "filter": {
               "and" : [
               {
                  "range": {
                     "timestamp": {
                          "gte": "2015-08-20",
                          "lt": "2015-08-21",
                          "format": "yyyy-MM-dd",
                          "time_zone": "+8:00"
                     }
                  }
                  },
                  {"query": { 
                      "match": { 
                         "request": {
                            "query": "/v2/brand"
                          }
                       }
                     }
                  },
                  {"term": { "response" : "200"}
                  }
               ]
            }
        }
    },
    "aggs": {
        "group_by_device_id": {
            "terms": {
                "field": "clientip"
            }
        }
    }
}'

类似的sql逻辑是:

从表中选择distinct(clientip),其中“2015-08-20”和“2015-08-21”之间的时间戳和请求类似'/ v2 / brand%'和response ='200'

如何使用Java API实现它? 请指导我是ElasticSearch的新手。提前谢谢!

1 个答案:

答案 0 :(得分:1)

我已经解决了这个问题,下面是我的代码:

SearchResponse scrollResp1 = client.prepareSearch("logstash-*").setSearchType(SearchType.SCAN).
                    setQuery(QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
                            FilterBuilders.andFilter(FilterBuilders.termFilter("response", "200")
                                    , FilterBuilders.rangeFilter("timestamp").gte(startDate).lt
                                            (endDate), FilterBuilders.queryFilter
                                            (QueryBuilders.matchQuery("request", "signup"))
                            )))
                    .addAggregation(AggregationBuilders.terms
                            ("group_by_client_ip").size(0).field("clientip")).get();
相关问题