Мне нужно сделать FuzzyQuery , используя индекс, содержащий около 8 миллионов строк.Этот тип запроса довольно медленный, на каждое совпадение требуется около 20 секунд.Дело в том, что я могу сузить результаты, используя другое поле, до 5000 просмотров, прежде чем выполнять нечеткий поиск.Чтобы это работало, я должен сначала выполнить поиск по «более узкому» полю, а затем использовать нечеткий поиск в этих результатах.
Согласно lucene FAQ ,единственное, что мне нужно сделать, это BooleanQuery , где требуется более узкое значение ( BooleanClause.Occur.MUST в люцене 3).
Теперь у меня естьпробовал два разных подхода:
a) Использование парсера запросов, с вводом типа: narrower:+narrowing_text fuzzy:fuzzy_text~0.9
b) Построение BooleanQuery с TermQuery и FuzzyQuery
Ни одна не работала, я получаю примерно то же самое время, что и те, когда более узкий не используется.
Кроме того, просто для того, чтобы проверить, что, если сужение работает, времена должны быть намного лучше, я переиндексировал только 5000 элементов, которые соответствуют более узкому, и поиск пошел быстро, как ад.
На случай, если кому-то интересно, я использую пилюцен 3.0.2.