#elasticsearch
#эластичный поиск
Вопрос:
Я работаю над поисковым проектом, который требует выделения фрагмента после поискового слова.
Мой запрос
{
"query": {
"multi_match" : {
"query" : "prawn",
"fields": ["name"]
, "operator": "and",
"use_dis_max": true
}
},
"_source": ["name"],
"highlight": {
"fields": {
"name": {
"pre_tags" : [""], "post_tags" : [""],
"fragment_size": 3,
"number_of_fragments": 1
}
}
}
}
Результат:
{
"name" : "special prawn curry"
},
"highlight" : {
"name" : [
"special prawn"
]
}
Принимая во внимание, что я хочу получить такой результат, как
"name" : "special prawn curry"
},
"highlight" : {
"name" : [
"prawn curry"
]
}
то есть фрагмент после искомого слова. Возможно ли это?
Ответ №1:
Ну, вы можете использовать обычный маркер (используя "type":"plain"
) в запросе выделения и посмотреть, сработает ли это.
Раньше это был маркер по умолчанию до версии 6.0, где они сделали Unified
маркер по умолчанию.
POST <your_index_name>/_search
{
"query": {
"multi_match" : {
"query" : "prawn",
"fields": ["name"]
, "operator": "and",
"use_dis_max": true
}
},
"_source": ["name"],
"highlight": {
"fields": {
"name": {
"type": "plain", <---- Added this
"pre_tags" : [""], "post_tags" : [""],
"fragment_size": 3,
"number_of_fragments": 1,
"order": "score"
}
}
}
}
Надеюсь, это поможет!