Пересечение границ с люценом

Я использую Lucene и пытаюсь найти способ индексировать и извлекать документы, имеющие свойство range.

Например, у меня есть:

Document 1: Price:[30 TO 50]
Document 2: Price:[45 TO 60]
Document 3: Price:[60 TO 70]

И Я хотел бы искать все документы, диапазоны которых пересекают определенный интервал, в приведенном выше примере, если я ищу Price in [55 TO 65], я должен получить Document 2 и Document 3 в качестве результатов.

Я не думаю, что один только NumericRangeQueries поможет, мне нужно работать над индексом с чем-то похожим на R-деревья, но реализованы ли они в Lucene? Кроме того, я полагаю, что мне нужен подкласс MultiTermQuery, потому что запрос Price in [55 TO 65] имеет две границы, но я не вижу ничего подходящего среди подклассов MultiTermQuery.

Любая помощь приветствуется, спасибо,

Сильвио

P.S. Я использую Lucene 2.9.0, но при необходимости могу обновить до последней версии.


person Silvio Donnini    schedule 24.03.2010    source источник


Ответы (1)


Один простой вариант, который можно попробовать, — во время индексации просто расширить свои диапазоны до каждого дискретного значения в диапазоне. Таким образом, [30 TO 50] будет проиндексирован как 30, 31, 32, 33, 34 и т. д. Затем используйте обычный запрос диапазона для запроса диапазона. Пока нет множества дискретных значений (миллионов), это может работать достаточно хорошо.

person bajafresh4life    schedule 24.03.2010
comment
Таким образом, я был бы привязан к количеству значений, которые я использую для дискретизации интервалов, а также было бы создано множество полей (по одному для каждого дискретного значения), что раздуло бы мою схему документа. Это, конечно, возможное решение, но я бы оставил его на крайний случай. - person Silvio Donnini; 25.03.2010
comment
Вам не нужно создавать отдельные поля. Все значения будут входить в одно и то же поле, никаких изменений в схеме документа не потребуется. - person bajafresh4life; 25.03.2010