#spring-boot #elasticsearch #java-8
#весенняя загрузка #elasticsearch #java-8
Вопрос:
Я должен извлекать записи из эластичного поиска на основе даты его обновления и создания. У меня есть эти два поля updatedDate и CreatedDate, и условие должно быть:
- Для извлечения записей с обновленной датой в диапазоне за последние 3 года.
- Если значение updatedDate равно null, извлеките записи, создавшие дату в диапазоне за последние 3 года.
Я написал запрос на Java для извлечения записей на основе записи CreatedDate:
.must(QueryBuilders.rangeQuery("createdDate").from(startDate,true).to(endDate,true));
StartDate и EndDate содержат диапазон дат.
Я новичок в эластичном поиске, не знаю, как реализовать указанное выше условие.
Комментарии:
1. Лучше поделиться сопоставлением индексов, образцами и ожидаемыми документами в формате JSON, чтобы мы могли предоставить рабочее решение
Ответ №1:
Поскольку вы не предоставили никаких индексных данных, поэтому добавьте рабочий пример с образцом индексных данных, сопоставлением, поисковым запросом и результатом поиска, который удовлетворяет всем условиям, необходимым для вашего варианта использования.
Сопоставление индексов:
{
"mappings": {
"properties": {
"createdDate": {
"format": "yyyy-MM-dd'T'HH:mm:ss'Z'",
"type": "date"
},
"updatedDate": {
"format": "yyyy-MM-dd'T'HH:mm:ss'Z'",
"type": "date"
}
}
}
}
Индексировать данные:
{
"createdDate": "2020-08-15T00:00:00Z"
}
{
"createdDate": "2019-08-15T00:00:00Z"
}
{
"createdDate": "2010-08-15T00:00:00Z"
}
{
"updatedDate": "2021-08-15T00:00:00Z",
"createdDate": "2002-08-15T00:00:00Z"
}
{
"updatedDate": "2018-08-15T00:00:00Z",
"createdDate": "2020-09-15T00:00:00Z"
}
{
"updatedDate": "2000-08-15T00:00:00Z",
"createdDate": "2020-09-15T00:00:00Z"
}
Поисковый запрос:
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"bool": {
"filter": {
"range": {
"createdDate": {
"gte": "now-3y",
"lte": "now"
}
}
},
"must_not": {
"exists": {
"field": "updatedDate"
}
}
}
}
]
}
},
{
"bool": {
"filter": {
"range": {
"updatedDate": {
"gte": "now-3y",
"lte": "now"
}
}
}
}
}
],
"minimum_should_match": 1
}
}
}
Результат поиска:
"hits": [
{
"_index": "64965551",
"_type": "_doc",
"_id": "1",
"_score": 0.0,
"_source": {
"createdDate": "2020-08-15T00:00:00Z"
}
},
{
"_index": "64965551",
"_type": "_doc",
"_id": "2",
"_score": 0.0,
"_source": {
"createdDate": "2019-08-15T00:00:00Z"
}
},
{
"_index": "64965551",
"_type": "_doc",
"_id": "5",
"_score": 0.0,
"_source": {
"updatedDate": "2018-08-15T00:00:00Z",
"createdDate": "2020-09-15T00:00:00Z"
}
}
]