Я должен выполнить поиск в текстовом файле или большой строке, чтобы проверить, содержит ли текст набор ключевых слов (может быть, миллионы). Если он содержит ключевые слова, я должен выделить все ключевые слова, которые были сопоставлены. Какой подход следует принять для этого? Предоставляет ли lucene решение для этого?
Вы отметили свой вопрос с помощью Elasticsearch - если вы открыты для использования ES, я думаю, что Percolation с подсветкой может соответствовать тому, что вам нужно. Вы можете зарегистрировать каждое ключевое слово как отдельный запрос с перколятором, а затем запустить каждый документ или строку через него. Он вернет список совпадающих запросов. Вы также можете комбинировать его с подсветкой.
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-percolate.html
Вы можете использовать lucene ShingleFilter
Вы найдете множество примеров в сети, вот один http://www.massapi.com/class/sh/ShingleFilter.html
"This stack is empty. Lets exchange places"
, затем он должен выделить (или хотя бы найти) stack
и exchange
в строке.