Запрос числового диапазона - PullRequest
2 голосов
/ 02 декабря 2010

Я прочитал, что для обработки запроса диапазона дат NumericRangeQuery лучше, чем TermRangeQuery в "Lucene в действии", но я не смог найти причину.Я хочу знать причину этого.Я использовал TermRangeQuery и NumericRangequery для обработки запросов в диапазоне дат, и я обнаружил, что поиск выполняется быстро с помощью NumericRangeQuery.

Моя вторая задача - это запрос с использованием NumericRangeQuery. Мне нужно создавать индексы с помощью NumericField, с помощью которого я могу создавать индексы с точностью до миллисекунды.но что, если я захочу уменьшить свое разрешение до часа или дня.

Ответы [ 2 ]

3 голосов
/ 02 декабря 2010
  • Почему число намного быстрее, чем термин?

Как вы заметили, существует "шаг точности". Это означает, что числа хранятся только с определенной точностью, что означает (очень) ограниченное количество терминов. Согласно документации, в индексе редко бывает более 300 терминов. Проверьте статью в Википедии Пытается , если вы заинтересованы в теории.

  • Как вы можете снизить точность?

Класс NumericField имеет параметр точности в конструкторе. Обратите внимание, что запрос диапазона также имеет параметр точности, и они должны быть одинаковыми. На этой странице JavaDoc есть ссылка на статью, написанную о реализации, объясняющую больше того, что означает точность.

0 голосов
/ 02 декабря 2010

Объяснение @Xodarap о числовом поле правильное. По сути, точность снижается для чисел, чтобы уменьшить фактическое пространство терминов. Кроме того, я полагаю, что TermRangeQuery использует сравнение строк, тогда как запрос NumericRange работает с целыми числами. Это должно сжать немного больше производительности.

Вы можете индексировать в любом желаемом разрешении - миллисекунда в день. Date.getTime() дает вам миллисекунды с эпохи. Вы можете разделить это число на 1000, чтобы получить время с разрешением в секунду. Или вы можете разделить на 60000, чтобы получить разрешение в минуту. И так далее.

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