Как сделать полнотекстовый запрос по атрибуту даты в Elastic Search - PullRequest
0 голосов
/ 24 мая 2018

У меня есть документ с атрибутом типа даты (как показано ниже)

{
  "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)

1 Ответ

0 голосов
/ 25 мая 2018

К сожалению, вы не можете сделать это таким образом.Если вы хотите выполнить поиск по году, вы должны использовать запрос диапазона и округление

Например, в вашем случае вы можете использовать следующий запрос:

{
    "query": {
        "range" : {
            "age" : {
                "gte" : "1990||/y",
                "lte" :  "1990||/y"
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...