У меня есть документ с атрибутом типа даты (как показано ниже)
{
"releaseDate": {
"time": "1990-02-01T00:00:00+0000",
}
}
Я уверен в выполнении некоторого запроса диапазона (дата-математика и т. Д.), Так что если я ищу всена событии 1990 года я могу выполнить следующий запрос диапазона
{
"query": {
"range": {
"releaseDate.time": {
"gte": "1990",
"lte": "1991"
}
}
}
}
Я заметил, что эластичный поиск позволяет выполнять полнотекстовый поиск (совпадение) по датам
совпадениезапросы принимают текст / цифры / даты, анализируют их и создают запрос.Например: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html
Но мне сложно понять, как сделать правильный запрос. Например,
, если я ищу следующий запрос на совпадение
{
"query": {
"match": {
"attribute.releaseDate.time": "1990"
}
}
}
Нулевые результаты возвращаются из ES, даже если дата 1990-02-01T00:00:00
существует
Но если я сделаю следующее
{
"query": {
"match": {
"attribute.releaseDate.time": "1990-02"
}
}
}
, я найду свое событие.
Насколько я понимаю, с помощью поискового запроса ES расширит мой поиск до 1990-01-01T00:00:00+0000
, который не будет соответствовать индексированному значению 1990-02-01T00:00:00+0000
, тогда как во втором запросе токен будет таким же.
Это наблюдение приведет к моим вопросам:
Есть ли способ использовать следующий запрос?- события произошли в 1990 году, даты, которые содержат 1990 год (без диапазона) - события произошли в феврале любого года - события произошли 5 февраля любого года
Но я не нашел ни одного рабочего примера(единственные найденные мной ветки здесь https://discuss.elastic.co/t/mapping-date-field-as-multifiled-to-provide-date-query-and-full-text-search/80691)