Elasticsearch using Java api



嗨,我正在尝试按照 sql 查询对弹性搜索进行查询,我想使用 Java API 实现相同的逻辑

select * from log , web where l.loghost = w.webhost and @datetime between '2016-05-20' AND '2016-05-25' 

logweb是不同的类型,索引设置为logstash-log-*logstash-web*@timestamp格式看起来像"2016-05-20T17:14:01.037Z"

现在我有以下Java代码,但我不知道如何在两个日期之间设置,所以它不返回预期的输出

  SearchResponse response = client.prepareSearch("logstash-log-*","logstash-web-*")
   .setTypes("log","web")
  .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
  .setFetchSource(new String[]{"*"}, null)
 .setQuery(QueryBuilders.queryStringQuery("1.2.3.4").field("*_host"))// Query
  .execute()
 .actionGet();

请指导我是弹性搜索的新手。提前谢谢。

您需要

range查询与bool/filter查询中的query_string查询相结合:

QueryStringQueryBuilder qs = QueryBuilders.queryStringQuery("1.2.3.4").field("*_host");
RangeQueryBuilder range = QueryBuilders.rangeQuery("@timestamp")
    .gte("2016-05-20T00:00:00.000Z")
    .lte("2016-05-25T00:00:00.000Z");

然后

...
.setQuery(QueryBuilders.boolQuery().filter(qs).filter(range))
...

最新更新