使用Java API的Elasticsearch

斯蒂芬赛

嗨,我正在尝试通过遵循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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章