Я наконец узнал почему! Я использую fastVectorHighlighter , чтобы сделать подсветку быстрее.
Сначала я выделил только поле title
, и все работало нормально.
Когда я добавил поле body
для выделения, я забыл включить termVectors=true
.
Теперь, когда мое body
поле выглядит следующим образом
<field name="body" type="text" indexed="true" stored="true" termVectors="true" termPositions="true" termOffsets="true" />
после полной переиндексации работает отлично:
<lst name="highlighting">
<lst name="document_1">
<arr name="body">
<str>my <span class="highlight">text</span> highlighted</str>
</arr>
<arr name="title">
<str>my <span class="highlight">text</span> highlighted</str>
</arr>
</lst>
</lst>
Ранее подсветка поля тела работала, но без fastVectorHighlighter
, так как поле не имело параметра termVectors=true
. Вот почему я выделил body
с префиксом и суффиксом по умолчанию. Поскольку fastVectorHighlighter
- это совершенно другой метод выделения, конфигурация также отличается.
Чтобы избежать ошибок такого рода, пока пользователи могут выбирать, какие поля выделять с помощью hl.fl parameter
, я бы рекомендовал включить также конфигурацию для стандартного выделения (элемент форматирования, класс solr.highlight.HtmlFormatter
), например так :
<searchComponent class="solr.HighlightComponent" name="highlight">
<highlighting>
<formatter name="html" default="true" class="solr.highlight.HtmlFormatter">
<lst name="defaults">
<str name="hl.simple.pre"><![CDATA[<span class="highlight">]]></str>
<str name="hl.simple.post"><![CDATA[</span>]]></str>
</lst>
</formatter>
<fragmentsBuilder name="simple" default="true" class="solr.highlight.SimpleFragmentsBuilder">
<lst name="defaults">
<str name="hl.tag.pre"><![CDATA[<span class="highlight">]]></str>
<str name="hl.tag.post"><![CDATA[</span>]]></str>
</lst>
</fragmentsBuilder>
</highlighting>
</searchComponent>
Таким образом, подсветка будет работать с одинаковым префиксом и суффиксом даже для полей с отключенным termVectors
.