Highlighting Elasticsearch Results
By including the highlight property in ElasticSource GDI queries, you can configure the response to include highlights for search results. For general information about highlighting Elasticsearch responses, see Highlighting in the Elasticsearch documentation. Highlight property usage is described below.
Highlight Syntax
es:highlight [ es:boundaryChars "string" ; es:boundaryMaxScan int ; es:boundaryScannerLocale "string" ; es:boundaryScannerType "string" ; es:field "string" ; es:forceSource boolean ; es:fragmentSize int ; es:fragmenter "string" ; es:highlightFilter boolean ; es:highlightQuery "string" | [ rdf_list ] ; es:highlighterType "string" ; es:noMatchSize int ; es:numberOfFragments int ; es:order "string" ; es:phraseLimit int ; es:postTags "string" ; es:preTags "string" ; es:requireFieldMatch boolean ; ] ;
Option | Type | Description |
---|---|---|
boundaryChars | string | This property can be used to define the boundary characters to look for. Defaults to .,!? \t\n . |
boundaryMaxScan | int | This property can be used to place a limit on the number of characters to scan when looking for boundary characters. Defaults to 20 . |
boundaryScannerLocale | string | This property defines the language tag (such as "en-US" or "fr-FR") to apply when searching for sentence and word boundaries. |
boundaryScannerType | string | If highlighterType is unified or fvh , this property can be used to specify how to break the highlighted fragments. This property is ignored when the highlighter type is plain . The list below describes the valid values:
|
field | string or variable | This property specifies the field to retrieve highlights for. It can include a ?variable (which the GDI maps to the full path of the field in the Elasticsearch document), a field name, or a field name pattern. For example:
|
forceSource | boolean | This property controls whether to highlight based on the source even if the field is stored separately. Defaults to false . |
fragmentSize | int | This property specifies the number of characters to include in highlighted fragments. Defaults to 100 . |
fragmenter | string | If highlighterType is plain , this property can be used to specify how to break up text in highlight snippets. The list below describes the valid values:
|
highlightFilter | boolean | This property controls whether to highlight filter results. |
highlightQuery | string or object | This property specifies the highlight query. The value can be a string or a query object that maps to the Elasticsearch query DSL. |
highlighterType | string | This property defines the type of highlighter to use, "plain" , "unified" , or "fvh" . |
noMatchSize | int | This property specifies the number of characters to return from the beginning of the field if there are no matching fragments to highlight. Defaults to 0 (nothing is returned). |
numberOfFragments | int | This property can be used to set the maximum number of fragments to generate. If this property is set to 0 , no fragments are returned. Instead, the entire field contents are highlighted and returned, which can be useful if you want to highlight short text (such as a title or address) for which fragmentation is not required. Defaults to 5 . If the number of fragments is 0 , fragmentSize is ignored. |
order | string | This property can be included to sort highlighted fragments by score. When es:order "score" , the most relevant fragments are output first. Defaults to "none" ; fragments are output in the order they appear in the field. |
phraseLimit | int | If highlighterType is fvh , this property can be used to limit the number of matching phrases to consider. Limiting the number of phrases prevents the fvh highlighter from analyzing too many phrases and consuming too much memory. Defaults to 256 . |
postTags | string | This property is used in conjunction with preTags to define the HTML tags to use for the highlighted elements. This property defines the closing tag to use after the highlighted text. Defaults to </em> . |
preTags | string | This property is used in conjunction with postTags to define the HTML tags to use for the highlighted elements. This property defines the opening tag to use before the highlighted text. Defaults to <em> . |
requireFieldMatch | boolean | This property controls whether to highlight only the fields that contain a query match. Defaults to true . If false , all fields are highlighted. |
Highlight Examples
The following example configures highlighting for fragments from the actor field.
PREFIX s: <http://cambridgesemantics.com/ontologies/DataToolkit#> PREFIX es: <http://elastic.co/search/> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> SELECT * WHERE { SERVICE TOPDOWN <http://cambridgesemantics.com/services/DataToolkit> { ?data a es:ElasticSource ; es:url "http://localhost:9200/" ; es:index "films" ; es:html false ; es:query "Clint" ; es:field ?actor, ?director ; es:highlight [ es:field ?actor ; es:type "plain" ; es:fragmentSize 200 ; es:numberOfFragments 10 ; es:preTags "<mark hit='true'>" ; es:postTags "</mark>" ; ] ; s:selector "film" ; ?actor (xsd:string) ; ?awards (xsd:string) ; ?director (xsd:string) ; ?image (xsd:string) ; ?length (xsd:long) ; ?popularity (xsd:long) ; ?subject (xsd:string) ; ?title (xsd:string) ; ?year (xsd:long) ; ?score () ; ?id () ; ?highlights [ ?field () ; ?fragment () ; ] . FILTER(?year = 1990 || ?length > 103) FILTER(REGEX(?title, "Manhattan", "q") || REGEX(?subject, "Comedy", "q") || REGEX(?subject, "Drama", "q")) } }