Lucene:Indexsearcher:java.lang.UnsupportedOperationException

时间:2011-04-19 14:38:47

标签: java lucene

我收到以下错误消息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);

2 个答案:

答案 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-2091LUCENE-2392了解Lucene BM25的最新技术。