嗨,我正在尝试按照 sql 查询对弹性搜索进行查询,我想使用 Java API 实现相同的逻辑
select * from log , web where l.loghost = w.webhost and @datetime between '2016-05-20' AND '2016-05-25'
log
和web
是不同的类型,索引设置为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))
...