我收到以下错误消息java.lang.UnsupportedOperationException
使用Lucene搜索方法:topDocs = searcher.search(booleanQuery, null, 100);
当我尝试使用MB25 Okapi Search的以下实现时(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) at 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);
答案 0 :(得分:0)
如果您在此处查看Query API,则在org.apache.lucene.search.Query.createWeight(Query.java:88)
调用的方法会将Searcher
个对象作为参数,而您传递的是Query
个对象。
希望这能以正确的方式引导你。
答案 1 :(得分:0)
以下是发生的事情:
BM25BooleanQuery不支持完整的查询API,其中包括createWeight()。 虽然您可以在构建BooleanQuery时使用大多数Lucene Query类型作为原子,但BM25BooleanQuery不是这种情况。 BM25BooleanQuery必须独立,使用BooleanTermQuery-s作为构建块。
如果您坚持使用引用的URL中的“如何使用它”下的说明,则查询应该有效。 AFAIK,目前还没有将Lucene中的BM25查询与更大的查询相结合的解决方案。
请参阅LUCENE-2091和LUCENE-2392了解Lucene BM25的最新技术。