Мне нужно выполнить подсветку для нескольких слов в одном поле, но для каждого из них используется определенный форматер (префикс и постфикс).
Допустим, у меня есть поле description
и для документа оноимеет значение: Einstein always excelled at math and physics from a young age
.Как выделить math
с парой определенного префикса и постфикса И ТАКЖЕ physics
с другой парой префикс-постфикс?Итак, в конце я хотел бы получить:
Einstein always excelled at <em class="hl-red">math</em> and <em class="hl-green">physics</em> from a young age
Причина в том, что во внешнем интерфейсе у меня есть разные классы CSS с background-color: red;
для hl-red
и background-color: green
для hl-green
например.
Однако мне удалось выделить несколько слов в одном поле, но с одной и той же парой префикс-постфикс во всех местах, что на самом деле не то, что я хочу.Кроме того, я попытался добавить несколько записей HtmlFormatter в solrconfig.xml:
<highlighting>
..............
<formatter name="html" default="true" class="solr.highlight.HtmlFormatter">
<lst name="defaults">
<str name="hl.simple.pre"><![CDATA[<em>]]></str>
<str name="hl.simple.post"><![CDATA[</em>]]></str>
</lst>
<lst name="hl-red">
<str name="hl.simple.pre"><![CDATA[<em class="hl-red">]]></str>
<str name="hl.simple.post"><![CDATA[</em>]]></str>
</lst>
<lst name="hl-green">
<str name="hl.simple.pre"><![CDATA[<em class="hl-green">]]></str>
<str name="hl.simple.post"><![CDATA[</em>]]></str>
</lst>
</formatter>
..............
</highlighting>
, но получил HttpSolrClient$RemoteSolrException: Error from server at http://localhost:8983/solr: Unknown formatter: hl-green
.Кроме того, я не нашел способа указать массив префиксов ни в Solr Admin UI, ни в spring-data-solr, просто запрос:
SimpleHighlightQuery query = new SimpleHighlightQuery(Objects.requireNonNull(criteria));
HighlightOptions highlightOptions = new HighlightOptions()
.addFields(fields)
.setSimplePrefix(prefix)
.setSimplePostfix(postfix);
query.setHighlightOptions(highlightOptions);
query.setPageRequest(pageable);
return solrTemplate.queryForHighlightPage(MY_CORE, query, MyModel.class);
MyПредполагается, что это ограничение самого Solr.
Я думал о том, чтобы написать собственный фрагмент FrauBilder, но я не знаю точно, так ли это, и как это сделать.В качестве другого обходного пути я думал выполнить для каждого слова запрос выделения, затем сохранить результат, затем выполнить для второго слова другой запрос выделения, сохранить результат и так далее.Но я не думаю, что это хорошее и элегантное решение, потому что у меня будут проблемы при выполнении второго запроса, если второе слово: «em» или «class» или «red» / «green» (произойдет вложенная нежелательная подсветка)).
Я использую spring-data-solr в приложении Spring Boot, а Solr 6.6.5 в качестве службы (http).
Кто-нибудь знает, как решить эту проблему?Пожалуйста, дайте мне совет!Любая идея будет высоко ценится!