Lucene Highlighter не совпадает с префиксами - PullRequest
0 голосов
/ 11 ноября 2011

Я использую Highlighter Lucene, чтобы выделить части строки. Код ниже, кажется, работает хорошо для поиска слов с основанием, но не для соответствия префикса.

EnglishAnalyzer analyzer = new EnglishAnalyzer(Version.LUCENE_34);
QueryParser parser = new QueryParser(Version.LUCENE_30, "", analyzer);
Query query = parser.parse(pQuery);

QueryScorer scorer = new QueryScorer(query);
Fragmenter fragmenter = new SimpleSpanFragmenter(scorer, 40);

Highlighter highlighter = new Highlighter(scorer);
highlighter.setTextFragmenter(fragmenter);

String[] frags = highlighter.getBestFragments(analyzer, "", pText, 4);

Я читал в нескольких разных местах, мне нужно вызвать Query.rewrite, чтобы заставить работать префикс соответствия. Этот метод принимает аргумент IndexReader, хотя я не уверен, как его получить. Во всех примерах, которые я обнаружил, вызов Query.rewreite не показывает, откуда появился IndexReader. Я добавлю, что это единственный код Lucene, который я использую. Я не использую Lucene для поиска, просто для выделения.

Как мне создать IndexReader и возможно ли его создать, если я использую Lucene таким, какой я есть. Или, возможно, есть другой способ выделить совпадения префиксов? Я очень новичок в Lucene, и я уверен, что все эти части делают или если они все необходимы. Я только что скопировал их из различных примеров, которые я нашел в Интернете. Так что, если я делаю что-то еще не так, пожалуйста, дайте мне знать. Спасибо.

1 Ответ

0 голосов
/ 11 ноября 2011

Предположим, у вас есть запрос field:abc*.query.rewrite в основном делает следующее: он читает индекс (вот почему вам нужен IndexReader), находит все термины, начинающиеся с abc, и изменяет ваш запрос как , например, field:abc1 field:abc2 field:abc3.Если вы знаете расположение индекса, вы можете использовать IndexReader.Open, чтобы получить IndexReader.Если у вас вообще нет индекса, вам нужно выполнить поиск в pText, найти все слова, начинающиеся с abc, и соответственно обновить ваш запрос.

...