Я новичок в ElasticSearch, поэтому, пожалуйста, пройдите ко мне. Я посмотрел на elastic.co и googled много, чтобы выяснить правильный фильтр Java и запрос, чтобы применить, чтобы иметь возможность вытаскивать только документы, срок действия которых истекает в течение следующих x дней, где x - это значение, переданное пользователем приложение, а также набор ttl для каждого из документов в Elastic.ElasticSearch Java Запрос на получение документов, срок действия которых истекает в следующие x дней
Я пробовал различные фильтры, такие как rangeFilter, boolFilter на FilterBuilders, которые проходят в просьбе Elastic как:
Raw Source: {
"from" : 0,
"size" : 20, "filter" : {
"bool" : {
"should" : {
"range" : {
"_ttl" : {
"from" : 2000,
"to" : 2160000000,
"include_lower" : false,
"include_upper" : true
}
}
}
}
},
"explain" : false,
"fields" : [ "_ttl", "_source" ],
"sort" : [ {
"created" : {
"order" : "desc"
}
} ]
}
Java-код для поиска выглядит следующим образом:
SearchRequestBuilder srb = client.prepareSearch(index).setTypes(type).addFields("_ttl", "_source")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH).setExplain(false);
if (query != null) srb.setQuery(query);
if (filter != null) srb.setPostFilter(filter);
LOG.debug("Raw Source: {}\n", srb.toString());
// Fetch the Document response from the index
SearchResponse response = srb.execute().actionGet();
где фильтр, который проходит, составляет:
(FilterBuilders.boolFilter().should(FilterBuilders.rangeFilter(_ttl).gt(2000).lte(2160000000)));
Другие параметры, такие как запрос, индекс , тип передается в код. В настоящее время только индекс и тип передаются в код, а не запрос (null)
Вышеприведенный запрос к Elastic дает нулевые удары, поэтому, очевидно, что-то не так. У меня есть несколько документов, срок действия которых истекает в течение 15 дней. Любая помощь будет принята с благодарностью.
Благодаря
Какую версию ES вы используете? – Andre85
Использование версии 0.90.10 – sanjuk21