Highlighting
Contents
| Highligting was first introduced in version 7.1 |
Introduction
Highlighters enable you to get highlighted snippets from one or more properties in your search results so you can show users where the query matches are. When you request highlights, the response contains an additional highlight element for each search hit that includes the highlighted properties and the highlighted fragments.
Highlighting options
- encoder (string)
-
Indicates if the snippet should be HTML encoded:
default(no encoding) orhtml. - fragmenter (string)
-
Specifies how text should be broken up in highlight snippets:
simpleorspan(default). - fragmentSize (number)
-
The size of the highlighted fragment in characters. Defaults to
100. - numberOfFragments (number)
-
The maximum number of fragments to return. If
numberOfFragmentsis 0, no fragments will be returned andfragmentSizewill be ignored. Defaults to5. - noMatchSize (number)
-
The amount of characters you want to return from the beginning of the property if there are no matching fragments to highlight. Defaults to
0(nothing is returned). - order (string)
-
Sorts highlighted fragments by score when set to
score. Defaults tonone- will be displayed in the same order in which fragments appear in the property. - preTag (string)
-
Use in conjunction with
postTagto define the HTML tags to wrap the highlighted text.<em>by default. - postTag (string)
-
Use in conjunction with
preTagto define the HTML tags to wrap the highlighted text.</em>by default. - requireFieldMatch (boolean)
-
Set to
falseif you want to highlight result in every listed property, regardless it was used in the query or not. Default istrue. - tagsSchema (string)
-
Set to
styledto use the built-in tag schema.
Highlighting settings can be set on a global level and then overridden on the property level (except tagsSchema and encoder, these two can be set only on the global layer).
Highlighting Tags
By default, the highlighting will wrap highlighted text inside <em></em> tag. This can be controlled by setting prePag and postTag, for example:
Request:
{
"query": "fulltext('description', 'house garden')",
"highlight": {
"preTag": "<tag1>",
"postTag": "</tag1>",
"properties": {
"description": {}
}
}
}
Response:
{
...
"highlight": {
"c4bb11f1-c6e2-4849-a665-28f612213984": {
"description": [
"Traditional <tag1>house</tag1> with big and well maintained <tag1>garden</tag1>."
]
}
}
}
Encoder
Parameter encoder can be used to define how highlighted text will be encoded. html value will force escaping html, if you use html highlighting tags.
Highlighted Fragments
Each highlighted property can control the size of the highlighted fragment in characters, and the maximum number of fragments to return. On top of this it is possible to specify that highlighted fragments need to be sorted by score. For example:
Request:
{
query: "fulltext('description', 'house garden big')",
highlight: {
properties: {
"description": {
fragmentSize: 15,
numberOfFragments: 2
}
}
}
}
Response:
{
...
"highlight": {
"c4bb11f1-c6e2-4849-a665-28f612213984": {
"description": [
" <em>house</em> with <em>big</em>",
" maintained <em>garden</em>."
]
}
}
}
If number_of_fragments is set to 0 then no fragments are produced, instead the entire content of the property is returned, and of course it is highlighted.
Fragmenter
You can choose between simple (default) and span fragmenters:
Request:
{
query: "fulltext('description', 'house garden')",
highlight: {
fragmentSize : 15,
fragmenter: "simple",
properties: {
"description": {}
}
}
}
Response:
{
...
"highlight": {
"9922a270-f881-4bf8-be35-189e9a72a4f1": {
"description": [
"Traditional <em>house</em> with big and well maintained <em>garden</em>."
]
}
}
}
Request:
{
query: "fulltext('description', 'house garden')",
highlight: {
fragmentSize : 15,
fragmenter: "span",
properties: {
"description": {}
}
}
}
Response:
{
...
"highlight": {
"9922a270-f881-4bf8-be35-189e9a72a4f1": {
"description": [
" maintained <em>garden</em>.",
" <em>house</em> with big"
]
}
}
}
Tag Schema
There are also built in "tag" schemas, currently with one single schema called styled with the following tags:
<em class="hlt1">, <em class="hlt2">, <em class="hlt3">,
<em class="hlt4">, <em class="hlt5">, <em class="hlt6">,
<em class="hlt7">, <em class="hlt8">, <em class="hlt9">,
<em class="hlt10">
Require Field Match
requireFieldMatch can be set to false which will cause any property to be highlighted regardless of whether its value matches the query. The default behaviour is true, meaning that only properties that match the query will be highlighted.
requireFieldMatch property
Request:
{
query: "fulltext('anyOtherProperty', 'house')",
highlight: {
requireFieldMatch: false,
properties: {
"description": {}
}
}
}
Response:
{
...
"highlight": {
"c4bb11f1-c6e2-4849-a665-28f612213984": {
"description": [
"Traditional <em>house</em> with big and well maintained garden."
]
}
}
}
Global Settings
Highlighting settings can be set on a global level and then overridden on the property level.
{
"query" : {...},
"highlight" : {
"numberOfFragments" : 3,
"fragmentSize" : 150,
"order": "none",
"properties" : {
"displayName" : { "numberOfFragments" : 0 },
"description" : { "preTags" : ["<tag1>"], "postTags" : ["</tag1>"] },
"data.address" : { "numberOfFragments" : 5, "order" : "score" }
}
}
}