Эффективное выполнение массового поиска точного соответствия в Lucene?

#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 терминов, иначе он использует что-то более эффективное (предположительно, своего рода хэш-набор).