sobota, 28 września 2013

[FullTextSearch] ElasticSearch: Highlighting

Wyniki wyszukiwania bardzo często są wyświetlane bezpośrednio na interfejsie użytkownika, np. poprzez wstawienie ich bezpośrednio do pewnych kontenerów HTML-owych. W związku z tym bardzo przydatna okazuje się możliwość zaznaczania wyszukanej frazy. W ElasticSearch możemy skorzystać z takiej funkcjonalności w bardzo prosty sposób.

POST http://localhost:9200/books/book/_search HTTP/1.1
User-Agent: Fiddler
content-type: application/json
Host: localhost:9200
Content-Length: 276

{
 "query" : {
  "prefix" : {
   "author" : "ro"
  }
 },
 "highlight" : {
  "require_field_match" : true,
  "fields" : {
   "title" : { "pre_tags" : [ "<b>" ], "post_tags" : [ "</b>" ] },
   "author" : { "pre_tags" : [ "<b>" ], "post_tags" : [ "</b>" ] }
  }
 }
}

W odpowiedzi otrzymamy:

HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 660

{"took":8,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":2,"max_score":1.0,"hits":[{"_index":"books","_type":"book","_id":"5","_score":1.0, "_source" : {
 "title": "The Road to Reality: A Complete Guide to the Laws of the Universe",
 "author": "Roger Penrose",
 "year": 2004,
 "price": 42.00
},"highlight":{"author":["<b>Roger</b> Penrose"]}},{"_index":"books","_type":"book","_id":"4","_score":1.0, "_source" : {
 "title": "The Emperor's New Mind: Concerning Computers, Minds and The Laws of Physics",
 "author": "Roger Penrose",
 "year": 1989,
 "price": 22.74
},"highlight":{"author":["<b>Roger</b> Penrose"]}}]}}

Nieustawienie pola require_field_match spowoduje, że znaleziona fraza będzie zaznaczana we wszystkich skonfigurowanych polach, a nie tylko na tym polu, do którego wysyłamy zapytanie.

Brak komentarzy:

Prześlij komentarz