弹性搜索范围日期
2022-09-04 20:24:46
我从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代码(和类型)是什么?