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?

    We rely on cookies

    to optimize our communication and to enhance your customer experience. By clicking on the Accept and Close button, you agree to the collection of cookies. You can also adjust your preferences by clicking on Manage Preferences. For more information please see our Privacy policy.

    Manage cookies
    Accept & close

    Cookies preferences

    Accept & close
    Back