首页 文章

弹性搜索范围日期

提问于
浏览
8

我已经从Mongo数据库创建了一个弹性搜索索引 . Mongo中的文档具有以下结构:

{
    "_id" : ObjectId("525facace4b0c1f5e78753ea"),
    "time" : ISODate("2013-10-17T09:23:56.131Z"),
    "type" : "A",
    "url" : "www.google.com",
    "name" : "peter",
}

索引(显然)创建没有任何问题 . 现在,我试图使用弹性搜索来检索两个日期之间的索引中的文档 . 我已经读过我必须使用范围查询,但我已经尝试了很多次

MatchQueryBuilder queryBuilder = QueryBuilders.matchQuery("name", "peter").type(Type.PHRASE).minimumShouldMatch("99%");
LocalDateTime toLocal = new LocalDateTime(2013,12,18, 0, 0);
Date to = toLocal.toDate();
LocalDateTime fromLocal = new LocalDateTime(2013,12,17, 0, 0);
Date from = fromLocal.toDate();
RangeQueryBuilder queryDate = QueryBuilders.rangeQuery("time").to(to).from(from);
FilterBuilder filterDate = FilterBuilders.queryFilter(queryDate);       

srb = esH.client.prepareSearch("my_index");
srb.setQuery(queryBuilder);
srb.setFilter(filterDate);
sr = srb.execute().actionGet();

我得到0次点击,虽然应该有很多结果 . 我试图输入字符串而不是日期,但结果相同 .

当我执行没有过滤器的基本查询时,例如:

MatchQueryBuilder queryBuilder = QueryBuilders.matchQuery("name", "peter").type(Type.PHRASE).minimumShouldMatch("99%");

SearchRequestBuilder srb = esH.client.prepareSearch("my_index");
rb.setQuery(queryBuilder);
SearchResponse sr = srb.execute().actionGet();

我点击这样的样子:

{
"_index" : "my_index",
"_type" : "type",
"_id" : "5280d3c2e4b05e95aa703e34",
"_score" : 1.375688, "_source" : {"type":["A"],"time":["Mon Nov 11 13:55:30 CET 2013"],"name":["peter"]}
}

字段 time 不再具有 ISODate("2013-10-17T09:23:56.131Z") 格式 .

总而言之,考虑到格式,在两个日期(和时间)之间查询的Java代码(和类型)是什么?

3 回答

  • 4

    您可能将错误的字段名称传递给此行的范围查询:

    RangeQueryBuilder queryDate = QueryBuilders.rangeQuery("time").to(to).from(from);

    它应该是 @timestamp (或您用来存储时间戳的字段)而不是 time . 此外,似乎Elasticsearch中没有包含您的示例文档的 time 字段 . 这也指出 time 字段未从Mongo正确转换为Elasticsearch的问题 .

  • 6

    你能试一下吗

    FilterBuilders.rangeFilter("@timestamp").from("from time").to("toTime")
    
  • 0

    这将有效 -

    您可以将长时间戳传递给gte和lte params .

    . QueryBuilders.rangeQuery( “时间”)GTE(开始时间).lte(结束时间);

    确保在startTime和endTime的末尾添加一个“L”,这样它就知道它是long而不是int .

相关问题