Понимание ведущей подстановочной производительности Lucene
Lucene по умолчанию не допускает использование подстановочных знаков в поисковых запросах,но это можно включить с:
QueryParser#setAllowLeadingWildcard(true)
Я понимаю, что использование лидирующего подстановочного знака не позволяет Lucene использовать индекс. Поиск с использованием подстановочного знака должен сканировать весь индекс.
How do I demonstrate the performance of a leading wildcard query? When is it OK to use setAllowLeadingWildcard(true)
?
Я создал тестовый индекс с 10 миллионами документов в форме:
{ name: random_3_word_phrase }
Индекс 360M на диске.
Мои тестовые запросы работают хорошо, и я не смог на самом деле продемонстрировать проблему с производительностью. Например, запрос дляname:*ing
производит более 1,1 миллиона документов менее чем за 1 секунду. Запросname:*ing*
производит более 1,5 миллионов документов одновременно.
Что здесь происходит? Почему это не так медленно? 10 000 000 документов недостаточно? Должны ли документы содержать больше, чем одно поле?