Я придумал один способ получить строку, которая представляет собой оригинальный текст пользователя с выделенными терминами совпадений.Исходный пользовательский текст запрашивается к индексу обычным способом.Исходный пользовательский текст и результаты передаются в «обратный» метод запроса.То есть: исходный текст пользователя превращается в основанный на памяти индекс и запрашивается по исходным результатам.Это противоположно тому, что мы делали изначально.В результате общие слова в результатах сравниваются со строкой.Это работает в моем индексе, потому что все результаты являются «строгими» определениями.
Подсветка используется для вставки разделителей вокруг найденных общих слов [..] в исходных результатах.Регулярное выражение (? <= \ [) (. *?) (? = \]) Используется для удаления отдельных найденных слов с помощью разделителей. </p>
Отдельные найденные слова и исходный текст пользователя передаютсяследующий метод, который удаляет дубликаты терминов и выделяет слова в исходной строке пользователя:
//remove found term duplicates and produce a single string with all the hits highlighted
private static void removeTermDuplicates (List textResult, String searchText) {
// to be the final modified string with all highlights
String strOutput = searchText;
// creating a hashset using the incoming list
Set<String> textSet = new LinkedHashSet<String>(textResult);
// remove all the elements from the list
textResult.clear();
// add all the elements of the set to create a
// list of found terms without duplicates
textResult.addAll(textSet);
// add html elements to found terms
for(String term : textResult){
replacementWord.add("<b>"+term+"</b>");
}
//put original term and the same term with highlights in a hash map
for(int i=0; i<replacementWord.size(); ++i) {
oldAndNewTerms.put(textResult.get(i), replacementWord.get(i));
}
//use a hash map to modify the original string
for (String key : oldAndNewTerms.keySet()){
strOutput = strOutput.replace(key,oldAndNewTerms.get(key) ); }
System.out.println(strOutput);
}
Надеюсь, это поможет кому-то в будущем.Фил