У меня есть два вопроса относительно маркера попаданий, поставляемого с Apache Lucene:
см. эта функция
Не могли бы вы объяснить использование параметра потока токенов.
У меня есть несколько больших документов lucene, содержащих много полей, и в каждом поле есть несколько строк. Теперь я нашел самый подходящий документ для конкретного запроса. Теперь этот документ найден, поскольку несколько слов в запросе могли совпадать со словами в документе. Я хочу узнать, какие слова в запросе вызвали это. Так что для этого я планирую использовать Lucene Hit Highlighter.
Пример: если запрос «skin doctor delhi» и документ с названием «dermatologist» содержит слова «skin» и «doctor», то после выделения нажатия я смогу отделить «skin» и «doctor» от запроса. Я пытался написать код для этого в течение нескольких недель. Не могу получить то, что я хочу. Не могли бы вы помочь мне, пожалуйста?
Заранее спасибо.
Обновление:
Текущий подход:
Я создаю запрос, содержащий все слова в документе.
Field[] field = doc.getFields("description");
String desc = "";
for (int j = 0; j < field.length; ++j) {
desc += field[j].stringValue() + " ";
}
Query q = qp.parse(desc);
QueryScorer scorer = new QueryScorer(q, reader, "description");
Highlighter highlighter = new Highlighter(scorer);
String fragment = highlighter.getBestFragment(analyzer, "description", text);
Он работает для небольших документов, но не работает для больших документов. Получена следующая трассировка стека.
org.apache.lucene.search.BooleanQuery$TooManyClauses: maxClauseCount is set to 1024
at org.apache.lucene.search.BooleanQuery.add(BooleanQuery.java:152)
at org.apache.lucene.queryParser.QueryParser.getBooleanQuery(QueryParser.java:891)
at org.apache.lucene.queryParser.QueryParser.getBooleanQuery(QueryParser.java:866)
at org.apache.lucene.queryParser.QueryParser.Query(QueryParser.java:1213)
at org.apache.lucene.queryParser.QueryParser.TopLevelQuery(QueryParser.java:1167)
at org.apache.lucene.queryParser.QueryParser.parse(QueryParser.java:182)
Очевидно, что такой подход нецелесообразен для больших документов. Что нужно сделать, чтобы исправить это?
Кстати, я использую сопоставление FuzzyQuery.