Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Highlight in Elasticsearch

This is my elasticsearch query:

GET indexname/_search
{

    "fields": ["_id", "url","T"],
    "query" : {
     "bool": {"should": [
       {"simple_query_string": {
         "query": "white",
         "fields": ["T", "content"]
       }}
     ]}
    },
    "highlight" : {
      "pre_tags": ["<b>"], 
      "post_tags": ["</b>"], 
        "fields" : {
            "content" : {"fragment_size" : 150, "number_of_fragments" : 1}

        }
    }
}  

My elasticsearch query is searching for white in the fields "T" and "content", and I am highlighting the field "content" and inserting a pre and post tag b(bold). This is the result of my query

"hits": {
    "total": 922,
    "max_score": 2.369757,
    "hits": [
      {
        "_index": "indexname",
        "_type": "Searchtype",
        "_id": "http://www.example.com/de/unternehmenssuche-white-paper",
        "_score": 2.369757,
        "fields": {
          "T": [
            "White Paper Unternehmenssuche"
          ],
          "url": [
            "http://www.example.com/de/unternehmenssuche-white-paper"
          ]
        },
        "highlight": {
          "content": [
            "/Anwendungsbeispiele Ressourcen Blog <b>White</b> Papers in Deutsche Downloads Wiki Unternehmen Vorstellung der Search Executive"
          ]
        }
      }
....
...

I want my highlight result to look like this

"highlight": {
          "content": [
            "<b>...</b> /Anwendungsbeispiele Ressourcen Blog <b>White</b> Papers in Deutsche Downloads Wiki Unternehmen Vorstellung der Search Executive <b>...</b>"
          ]
        }

I want to add <b>...</b> before and after the highlight content. What should I add in my elasticsearch query to make results look like this? Any help would be appreciated

like image 651
Rose Avatar asked Aug 25 '16 17:08

Rose


People also ask

What is Highlighting in Elasticsearch?

Highlighters enable you to get highlighted snippets from one or more fields in your search results so you can show users where the query matches are.

What is highlighting in Solr?

Highlighting in Solr allows fragments of documents that match the user's query to be included with the query response.

What is elastic search?

Elasticsearch is a distributed search and analytics engine built on Apache Lucene. Since its release in 2010, Elasticsearch has quickly become the most popular search engine and is commonly used for log analytics, full-text search, security intelligence, business analytics, and operational intelligence use cases.


1 Answers

As I stated in the comments I don't think this can be done in Elasticsearch. A highlighter just highlights the terms it matched and does no further postprocessing (And I found no evidence in the docs for Elasticsearch 2.3 that you could make it able to do so).

Anyway, my logical approach would be to add the <b>...</b> tags when you're rendering the HTML code.

{{ foreach hit in hits }}
<b>...</b> hit[content] <b>...</b>
{{ endfor }}

Something like this, just modify it to suit your template.

like image 163
user2610529 Avatar answered Sep 24 '22 19:09

user2610529