Implement highlighting - BloomReach Experience - Open Source CMS

This article covers a Hippo CMS version 10. There's an updated version available that covers our most recent release.

Implement highlighting

Solr support highlighting out-of-the box for all fields that are stored. The org.hippoecm.hst.solr.content.beans.query.Hit supports easy fetching of all the highlighting fields for a search hit through getHighlights()

public interface Hit extends Serializable {
    SolrDocument getDoc();
    /**
     * @return the {@link org.hippoecm.hst.content.beans.standard
     *                                          .IdentifiableContentBean}
     * @throws BindingException when the {@link SolrDocument} bound to
     * the {@link org.hippoecm.hst.content.beans.standard
     *                                          .IdentifiableContentBean}
     */
    IdentifiableContentBean getBean() throws BindingException;

    /**
     * @return the score for this hit and -1 if there is no score available
     */
    float getScore();

    /**
     * @return the {@link List} of {@link Highlight}s and empty List if
     * there are no highlights
     */
    public List<Highlight> getHighlights();
}

Enable highlighting

Thus, make sure, that the fields you want highlighting on are stored. In your Solr schema.xml, for example have

<field name="title" type="text_general" indexed="true" stored="true" />
<field name="summary" type="text_general" indexed="true" stored="true"/>

and in your java code, set highlighting switched on through:

@Override
public void doBeforeRender(final HstRequest request,
                           final HstResponse response)
                                       throws HstComponentException {
  HippoSolrClient solrClient =
      HstServices.getComponentManager().getComponent(
                    HippoSolrClient.class.getName(), "org.hippoecm.hst.solr");
  HippoQuery hippoQuery = solrClient.createQuery(query);
  hippoQuery.getSolrQuery().setHighlight(true);
  hippoQuery.getSolrQuery().setHighlightFragsize(150);
  hippoQuery.getSolrQuery().setHighlightSimplePre("<b style=\"color:blue\">");
  hippoQuery.getSolrQuery().setHighlightSimplePost("</b>");
  // hippoQuery.getSolrQuery().addHighlightField("title");
  // hippoQuery.getSolrQuery().addHighlightField("summary");
  // hippoQuery.getSolrQuery().addHighlightField("htmlContent");
  // highlight in any fetched field
  hippoQuery.getSolrQuery().addHighlightField("*");
  HippoQueryResult result = hippoQuery.execute();
  request.setAttribute("result", result);
}  

In your JSP code, you can now access the highlights as follows:

<c:forEach var="hit" items="${requestScope.result.hits}">
  <c:set var="bean" value="${hit.bean}"/>
  <hst:link var="link" hippobean="${bean}"/>
  <ul class="list-overview">
    <li class="title"><b><a href="${link}">${bean.title}</a></b>
      <div>
        <c:forEach var="highlight" items="${hit.highlights}">
          <c:forEach var="excerpt" items="${highlight.excerpts}">
            <p>
                ${excerpt}
            </p>
          </c:forEach>
        </c:forEach>
      </div>
    </li>
  </ul>
</c:forEach>
Did you find this page helpful?
How could this documentation serve you better?
On this page
    Did you find this page helpful?
    How could this documentation serve you better?