Lucene поиск тонны имен
Я пытался найти тонну имен (10000+) по индексу lucene, имена были загружены из текстового файла. Это фрагмент моего кода:
Analyzer analyzer = new StandardAnalyzer();
MultiFieldQueryParser mParser = new MultiFieldQueryParser(arrSearchFields,
analyzer);
Query keyWordsQuery = mParser.parse(names);
- Сначала я получаю сообщение об ошибке: слишком много логических выражений в org.apache.lucene.queryparser.classic.QueryParserBase.parse(QueryParserBase.java:118).
как поиск в интернете, я могу исправить
BooleanQuery.setMaxClauseCount(Integer.MAX_VALUE);
Но поиск идет медленно и использует много памяти.
Есть предложения по этому делу?
Ценить это.
Джеймс
0 ответов
Я знаю, что это устарело, но надеюсь, что кому-то это пригодится.
В Lucene 8.6.1 вы можете избежать исключения "Too Many Clauses", используя следующий запрос.
(field1: term1 OR term2 OR .... OR term1024) OR (field1: term1025 OR trem1026 OR .... OR term2000)
вместо
field1: term1 OR term2 OR term3 OR .... OR term2000
По сути, просто разбейте свой запрос так, чтобы он содержал не более 1024 терминов для каждого поля за раз.
Я не уверен в использовании памяти или в том, насколько быстро это будет происходить, но я намеревался заставить его работать, не вызывая ошибки.