0

我试图根据 lucene 索引搜索大量名称(10000+),这些名称是从文本文件中加载的。这是我的代码片段:

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);

但是搜索速度很慢并且占用大量内存。

对这个案例有什么建议吗?

欣赏它。

詹姆士

4

1 回答 1

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 个术语。

我不确定内存使用情况或这将有多快,但我的目的是让它工作而不会引发错误。

您可能还想看看这个这个这个

于 2020-11-27T00:00:21.990 回答