Вы можете использовать highlighting
, чтобы получить только соответствующую часть совпадающего description
. Он имеет настройку fragment_size
, которая, по сути, представляет собой конкатенацию строк, которую вы ищете, и, как ни странно, по умолчанию равна 100.
POST long_desc/_doc
{"title":"UK House Price Index","keyword":"UK House Price Index","description":"APM automatically collects in-depth performance metrics and errors from inside your applications. Ingest logs UK House Price Index from popular data sources and easily visualize in preconfigured dashboards."}
GET long_desc/_search
{
"query": {
"multi_match": {
"query": "UK House Price Index",
"fields": [
"title",
"keyword",
"description"
]
}
},
"size": 5,
"_source": [
"title"
],
"sort": {
"modified": "asc"
},
"highlight": {
"pre_tags": "",
"post_tags": "",
"fragment_size": 1,
"fields": {
"description": {
"fragment_size": 100,
"number_of_fragments": 1,
"fragmenter": "span"
}
}
}
}
, уступая
[
{
"_index":"long_desc",
"_type":"_doc",
"_id":"zSWAwnEBPAbzy1R_Uk-I",
"_score":null,
"_source":{
"title":"UK House Price Index"
},
"highlight":{
"description":[
"Ingest logs UK House Price Index from popular data sources and easily visualize in preconfigured dashboards"
]
}
...
}
]
FYI pre_
& post_tags
по умолчанию <em>
, поэтому вашему веб-интерфейсу на самом деле не нужно выполнять какую-либо постобработку, чтобы выделить совпадения. Я выбрал пустые строки, чтобы сохранить description
в чистоте.