查询的paintCode:a* 部分是任何以“a”开头的paintCode 的前缀查询。这就是你的目标吗?
Lucene 将前缀查询扩展为一个布尔查询,其中包含与前缀匹配的所有可能术语。在您的情况下,显然有超过 1024 个可能paintCode
的以“a”开头的 s。
如果您觉得前缀查询毫无用处,那么您离事实不远了。
我建议您更改索引方案以避免使用前缀查询。我不确定您要通过示例完成什么,但是如果您想按首字母搜索油漆代码,请创建一个 paintCodeFirstLetter 字段并按该字段进行搜索。
添加
如果你很绝望,并且愿意接受部分结果,你可以从源代码构建你自己的 Lucene 版本。PrefixQuery.java
您需要对 .和.MultiTermQuery.java
下的文件进行更改org/apache/lucene/search
。在rewrite
两个类的方法中,换行
query.add(tq, BooleanClause.Occur.SHOULD); // add to query
到
try {
query.add(tq, BooleanClause.Occur.SHOULD); // add to query
} catch (TooManyClauses e) {
break;
}
我为自己的项目做了这个并且它有效。
如果你真的不喜欢改变 Lucene 的想法,你可以编写你自己的 PrefixQuery 变体和你自己的 QueryParser,但我不认为它更好。