我收到以下错误消息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-2091LUCENE-2392了解Lucene上BM25的最新技术。

10-07 19:46
查看更多