嗨,我正在尝试通过遵循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
查询与query_string
查询内的bool/filter
查询结合起来:
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))
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句