我收到以下错误消息java.lang.UnsupportedOperationException
使用Lucene搜索方法:topDocs = searcher.search(booleanQuery, null, 100);
当我尝试使用MB25 Okapi搜索的以下实现时(http://nlp.uned.es/~jperezi/Lucene-BM25)
booleanQuery.add(new BM25BooleanQuery(current_tags[i],
"tags",
new StandardAnalyzer()),
BooleanClause.Occur.SHOULD);
searcher = new IndexSearcher(INDEX_DIR);
topDocs = searcher.search(booleanQuery, null, 100);
我正在使用旧版本的Lucene:Lucene 2.4.1(我无法升级!)
您能帮我理解为什么会出现这种错误吗?
谢谢
java.lang.UnsupportedOperationException
在org.apache.lucene.search.Query.createWeight(Query.java:88)
在org.apache.lucene.search.BooleanQuery $ BooleanWeight。(BooleanQuery.java:185)
在org.apache.lucene.search.BooleanQuery.createWeight(BooleanQuery.java:360)
在org.apache.lucene.search.Query.weight(Query.java:95)
在org.apache.lucene.search.Searcher.createWeight(Searcher.java:185)
在org.apache.lucene.search.Searcher.search(Searcher.java:136)
在NVoting(NVoting.java:159)
在Main.main(Main.java:8)
更新资料
BooleanQuery.java
weights.add(c.getQuery().createWeight(searcher));
Query.java
Weight weight = query.createWeight(searcher);
最佳答案
这是正在发生的事情:
BM25BooleanQuery不支持完整的查询API,其中包括createWeight()。
虽然在构建BooleanQuery时可以将大多数Lucene Query类型用作原子,但BM25BooleanQuery并非如此。 BM25BooleanQuery必须独立使用BooleanTermQuery-s作为其构建基块。
如果您坚持引用的URL中“如何使用”下的说明,则查询应该可以进行。 AFAIK,目前尚无解决方案,可以将Lucene中的BM25查询合并为更大的查询。
请参阅LUCENE-2091和LUCENE-2392了解Lucene上BM25的最新技术。