Подсветка не работает в Elasticsearch и переполнении стека

Я только что скачал и установил последнюю версию Elasticsearch на моем компьютере с Windows. Я сделал свои первые поисковые запросы, и все, казалось, работало хорошо. Тем не мение. когда я пытаюсь выделить результаты поиска, у меня не получается. Итак, вот так выглядит мой запрос:

$params = [
'index' => 'test_index',
'type' => 'test_index_type',
'body' => [
'query' => [
'bool' => [
'should' => [ 'match' => [ 'field1' => '23' ] ]
]
],
'highlight' => [
'pre_tags' => "<em>",
'post_tags' => "</em>",
'fields' => (object)Array('field1' => new stdClass),
'require_field_match' => false
]
]
]

$res = $client->search($params);

В целом сам запрос работает хорошо — результаты фильтруются. В консоли я вижу, что все документы действительно содержат значение «23» в своих field1 поле. Тем не менее, эти теги — <em></em> просто не добавляются к результату. То, что я вижу, это просто необработанное значение в field1 лайк «some text 23«,»23 another text«Это не то, что я ожидаю увидеть …»some text <em>23</em>«,»<em>23</em> another text«Так что же с этим не так и как я могу это исправить?

10

Решение

Из руководства:

  1. Значение pre_tags а также post_tags должен быть массив (однако, если вы не хотите изменять em теги вы можете игнорировать их, они уже установлены по умолчанию).
  2. fields значение должно быть массивом, ключ — это имя поля, а значение — это массив с опциями поля.

Попробуйте это исправить:

$params = [
'index' => 'test_index',
'type' => 'test_index_type',
'body' => [
'query' => [
'bool' => [
'should' => [ 'match' => [ 'field1' => '23' ] ]
]
],
'highlight' => [
// 'pre_tags' => ["<em>"], // not required
// 'post_tags' => ["</em>"], // not required
'fields' => [
'field1' => new \stdClass()
],
'require_field_match' => false
]
]
];

$res = $client->search($params);
var_dump($res['hits']['hits'][0]['highlight']);

Обновить

  1. Сделал двойную проверку, значение поля в fields массив должен быть объектом (который является требованием, а не точно таким же, как другие параметры).
  2. pre/post_tags также может быть строкой (а не массивом).
  3. Вы проверили правильный ответ? $res['hits']['hits'][0]['highlight']

Важно отметить, что выделенные результаты входит в highlight массив$res['hits']['hits'][0]['highlight'],

12

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]