Существует ли быстрый и точный хайлайтер для Lucene?
Вопрос
Я использую (Java) Хайлайтер для Lucene (в пакете Sandbox) в течение некоторого времени.Однако на самом деле это не очень точно, когда дело доходит до сопоставления правильных терминов в результатах поиска - это хорошо работает для простых запросов, например, поиск по двум отдельным словам выделит оба фрагмента кода в результатах.
Однако он плохо работает с более сложными запросами.В простейшем случае фразеологические запросы, такие как "Переполнение стека", будут соответствовать всем вхождениям Stack или Overflow в выделении, что создает у пользователя впечатление, что это работает не очень хорошо.
Я попробовал применить исправление здесь но это сопровождалось множеством замечаний по производительности, и в конце концов было просто непригодно для использования.Производительность особенно важна для запросов с подстановочными знаками.Это связано с тем, как работает подсветка;вместо того чтобы просто работать со строкой запроса и текстом, он анализирует ее, как это сделал бы Lucene, а затем ищет все совпадения, сделанные Lucene;к сожалению, это означает, что для определенных запросов с подстановочными знаками он может искать совпадения с более чем 2000 предложениями в больших документах, и это просто недостаточно быстро.
Есть ли какая-нибудь более быстрая реализация точного хайлайтера?
Решение
Появился новый более быстрый хайлайтер (нуждается в исправлении, но будет частью выпуска 2.9).
https://issues.apache.org/jira/browse/LUCENE-1522
и еще обратная ссылка на этот вопрос
Другие советы
Вы могли бы рассмотреть возможность использования Solr. http://lucene .apache.org/solr
Solr - это своего рода универсальное поисковое приложение, которое использует Lucene и поддерживает выделение.Вполне возможно, что выделение в Solr можно использовать как API вне Solr.Вы также могли бы посмотреть, как Solr делает это для вдохновения.
Я читал на эту тему и наткнулся спанКвери который вернет вам диапазон совпадающего термина или терминов в соответствующем поле.