Вы можете использовать выделение !
Вот готовый к Кибане пример, начинающийся с нуля, при условии, что вы сохраняете всю страницу html, а не просто текст (хотя выделение работает просто отлично с простым текстом тоже):
1.
PUT my_index
2.
POST my_index/snippets/1
{
"html_text": """
<div class="top10">
<h4>Top References</h4>
<a href="/tags/default.asp">HTML Reference</a><br>
<a href="/cssref/default.asp">CSS Reference</a><br>
<a href="/jsref/default.asp">JavaScript Reference</a><br>
<a href="/sql/sql_ref_keywords.asp">SQL Reference</a><br>
<a href="/python/python_reference.asp">Python Reference</a><br>
<a href="/w3css/w3css_references.asp">W3.CSS Reference</a><br>
<a href="/bootstrap/bootstrap_ref_all_classes.asp">Bootstrap Reference</a><br>
<a href="/php/php_ref_overview.asp">PHP Reference</a><br>
<a href="/colors/colors_names.asp">HTML Colors</a><br>
<a href="/jquery/jquery_ref_overview.asp">jQuery Reference</a><br>
<a href="/java/java_ref_keywords.asp">Java Reference</a><br>
<a href="/angular/angular_ref_directives.asp">Angular Reference</a><br>
</div>
"""
}
3.
GET my_index/_search
{
"query": {
"match": {
"html_text": "href"
}
},
"_source": "highlight",
"size": 10,
"highlight": {
"number_of_fragments": 1,
"fragment_size": 12,
"fields": {
"html_text": {
"number_of_fragments": 2,
"order": "score",
"pre_tags": [
"<strong>"
],
"post_tags": [
"</strong>"
]
}
}
}
}
, что дает
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.575738,
"hits": [
{
"_index": "my_index",
"_type": "snippets",
"_id": "1",
"_score": 0.575738,
"_source": {},
"highlight": {
"html_text": [
"</a><br>\n<a <strong>href</strong>",
"</a><br>\n<a <strong>href</strong>"
]
}
}
]
}
}
Вы можете указать, сколько фрагментов вы хотите и сколько они должны быть. Если они совпадают, они будут доступны в hits[].highlight
части ответа.