Lucene Highlighter не совпадает с префиксами

Я использую 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 ответ

Решение

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

Другие вопросы по тегам