Lucene: Indexsearcher: java.lang.UnsupportedOperationException - PullRequest
1 голос
/ 19 апреля 2011

Я получаю следующее сообщение об ошибке 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) в org.apache.lucene.search.BooleanQuery $ BooleanWeight..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 голосов
/ 20 апреля 2011

Вот что происходит:

BM25BooleanQuery не поддерживает полный API-интерфейс запросов, в том числе createWeight ().Хотя вы можете использовать большинство типов Lucene Query в качестве атомов при построении BooleanQuery, это не относится к BM25BooleanQuery.BM25BooleanQuery должен стоять самостоятельно, используя BooleanTermQuery-s в качестве строительных блоков.

Если придерживаться инструкций в разделе «Как его использовать» в приведенном вами URL-адресе, запросы должны работать.AFAIK, в настоящее время не существует решения для объединения запросов BM25 в Lucene в более крупный запрос.

См. LUCENE-2091 и LUCENE-2392 для состоянияарт на BM25 в Lucene.

0 голосов
/ 19 апреля 2011

Если вы посмотрите на API запроса здесь, метод, который вы вызываете на org.apache.lucene.search.Query.createWeight(Query.java:88), принимает Searcher объект в качестве параметра, в то время как вы передаете объект Query.

Надеюсь, что это направит вас на правильный путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...