Я только что скачал и установил последнюю версию 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
«Так что же с этим не так и как я могу это исправить?
pre_tags
а также post_tags
должен быть массив (однако, если вы не хотите изменять em
теги вы можете игнорировать их, они уже установлены по умолчанию).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']);
fields
массив должен быть объектом (который является требованием, а не точно таким же, как другие параметры).pre/post_tags
также может быть строкой (а не массивом).$res['hits']['hits'][0]['highlight']
Важно отметить, что выделенные результаты входит в
highlight
массив —$res['hits']['hits'][0]['highlight']
,
Других решений пока нет …