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 терминов для каждого поля за раз.

Я не уверен в использовании памяти или в том, насколько быстро это будет происходить, но я намеревался заставить его работать, не вызывая ошибки.

Вы также можете посмотреть на это, на это и на это.

Другие вопросы по тегам