Эластичный поиск: как выделить фрагмент после поискового запроса?

#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"
      }
    }
  }
}
  

Надеюсь, это поможет!