Apache Lucene игнорирует месячные и дни в поисковом выражении диапазона дат - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь запросить индекс Apache Lucene, который построен с использованием таблицы базы данных, содержащей столбец даты, и мой запрос ссылается на этот самый столбец.В Luke поисковое выражение, которое я использую, выглядит следующим образом:

column_name:[yyyy-MM-dd TO yyyy-MM-dd]

Возвращенные результаты - это записи, у которых нет дат (в запрашиваемом столбце) с указанием года в начальном значении или старше и теми, которые имеютиметь год за годом в начальном значении до года в конечном значении.Поэтому, если я напишу имя столбца: [2011-05-22 TO 2015-09-03] - я получу записи с датами в столбце с годами 2012, 2013, 2014, 2015.

Однако результатыне будет точным в соответствии с поисковым выражением - значение месяца и дня будет игнорироваться.Независимо от того, какой месяц и день я настрою, в результате поиска будут возвращены записи с датами в каждом из искомых годов (с 01.01 по 31.12).

Проблема возникает, если я использую другой формат даты, например:

column_name:[yyyyMMdd TO yyyyMMdd]

Я ищу, что может быть причиной этого?Это вопрос форматирования даты при индексации?Или это вопрос формата даты в поисковом выражении?

Я должен добавить для большей ясности, что поисковое выражение:

column_name:"yyyy-MM-dd"

будет возвращать записи как исключенные - то есть с включенной датойв выражении.

1 Ответ

0 голосов
/ 06 июня 2018

Анализ - это проблема.

Когда вы индексируете, ваши даты разбиваются на три термина: «2011», «05» и «22».Любой один условий может быть сопоставлен с запросом диапазона, но не всем трем.Таким образом, для [2011-05-22 TO 2015-09-03] термин 2011 не попадает в лексикографически этот диапазон, в то время как в 2012, 2013, 2014 и 2015 гг.В другом примере, если вы искали [1999-01-01 TO 2000-01-01], вы также найдете все даты двадцатого числа месяца, поскольку в этот лексикографический диапазон попадает 20.

Поскольку это поле является просто датой, вам следует простоИзбегайте токенизации.Используйте StringField вместо TextField и переиндексируйте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...