Lucene搜索大量名称



我试图根据 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(;

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

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

欣赏它。

詹姆斯

我知道这很旧,但我希望有人觉得这很有用。

在 Lucene 8.6.1 中,您可以使用以下查询来避免"子句过多"异常

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

我不确定内存使用情况或速度有多快,但我的目的是让它在不抛出错误的情况下工作。

你可能还想看看这个,这个和这个。

最新更新