#lucene
#lucene
Вопрос:
tl; dr:
Каков наилучший способ массовой выборки документов из Lucene с использованием точного совпадения по набору ключей?
Длинная версия:
У нас есть индекс Lucene, сохраненный на диске, который считывается через a DirectoryReader
.
Он содержит 2 000 000 документов со схемой:
{"key": "20-character-string", "value": "1-1000-character-string"}
Теперь нам нужно выполнить эквивалент a SELECT document WHERE document.key IN $keyArray
— т. е. Вернуть подмножество документов, ключи которых пересекают $keyArray
(массив ключей из 10 000 элементов), используя точное совпадение.
Есть ли лучший способ, чем выполнение 10 000 отдельных поисков?
Комментарии:
1. Я верю
TermInSetQuery
, что это то, что мне нужно.
Ответ №1:
Вы должны использовать TermInSetQuery
.
Под капотом он использует последовательность BooleanQuery
экземпляров, упорядоченных вместе, если в вашем наборе меньше 16 терминов, иначе он использует что-то более эффективное (предположительно, своего рода хэш-набор).