@matperez

Как выполнить поиск по дате в Elasticsearch?

Подскажите как правильно решить задачу.

Есть такого плана сущности:
{
  "_id": "1",
  "active_from": null,
}
{
  "_id": "2",
  "active_from": "2017-10-11"
}
{
  "_id": "3",
  "active_from": "2017-11-20"
}


Как, имя конкретную дату, например 2017-10-24, выбрать все записи, для которых active_from не указано (null), либо раньше или равно 2017-10-24? Т.е. так чтобы в выборку попали только элементы с _id: 1 и 2.

Документацию читаю. Как выбрать конкретную дату, если она указана знаю. Не могу понять как объединить условия, в частности с проверкой на Null.
  • Вопрос задан
  • 1378 просмотров
Решения вопроса 1
@matperez Автор вопроса
Отвечу себе сам

1. Условия И и ИЛИ заменяются ключевыми словами MUST и SHOULD соответственно.

2. Конкретно на NULL проверить значение нельзя. Поля с таким значением считаются отсутствующими, так что проверять нужно существование поля через ключевое слово EXISTS, а не его значение. Так же нельзя сделать условие "поле отсутствует", но можно обернуть "поле присутствует" в "и не" через MUST_NOT.

Либо можно через маппинг задать значение по умолчанию, которое будет подставляться автоматом, если в поле было значение NULL и его потом искать.

Итого получается такой запрос:
{
	"query": {
		"bool": {
			"should": [
				{
					"bool": {
						"must_not": {
							"exists" : { "field" : "active_from" }
						}
					}
				},
				{
					"range": {
						"active_from": {
							"lte": "2017-10-24",
							"format": "yyyy-MM-dd"
						}
					}
				}
			]
		}
	}
}


Это все применимо к 5.6
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
28 мар. 2024, в 21:25
2000 руб./за проект
28 мар. 2024, в 21:17
5000 руб./за проект
28 мар. 2024, в 20:46
150000 руб./за проект