Как выделить несколько слов, используя разные форматеры в Solr? - PullRequest
0 голосов
/ 11 февраля 2019

Мне нужно выполнить подсветку для нескольких слов в одном поле, но для каждого из них используется определенный форматер (префикс и постфикс).

Допустим, у меня есть поле 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).

Кто-нибудь знает, как решить эту проблему?Пожалуйста, дайте мне совет!Любая идея будет высоко ценится!

...