Отфильтрованные запросы были заменены bool/filter
запросами. Вы можете сделать это так:
BoolQueryBuilder bqb = QueryBuilders.boolQuery()
filter(QueryBuilders.scriptQuery("doc['creationDate'].value = doc['modifiedDate'].value"));
Однако вместо использования сценариев во время поиска лучше создать новое поле во время индексации, которое будет содержать информацию о том, являются ли creationDate
и modifiedDate
одинаковыми датами. Затем вы можете просто проверить этот флаг во время запроса, он будет гораздо более оптимальным и быстрым.
Если вы не хотите переиндексировать все свои данные, вы можете обновить их все с этим флагом, просто запустите обновление по запросу, как показано ниже:
POST my-index / _update_by_query
{
"script": {
"source": """
def creationDate = Instant.parse(ctx._source.creationDate);
def modifiedDate = Instant.parse(ctx._source.modifiedDate);
ctx._source.modified = ChronoUnit.MICROS.between(creationDate, modifiedDate) > 0;
""",
"lang": "painless"
},
"query": {
"match_all": {}
}
}
И тогда ваш запрос будет просто
BoolQueryBuilder bqb = QueryBuilders.boolQuery()
filter(QueryBuilders.termQuery("modified", "false");