#php #elasticsearch
#php #elasticsearch
Вопрос:
Я использую REST API с использованием PHP для извлечения данных из эластичного поиска со следующим кодом
$params = [
'index' => $search_index,
'type' => $search_type,
'from' => $_POST["from"],
'size' => $_POST["fetch"],
'body' => [
'query' => [
'bool' => [
'must' => [
[ 'match' => [ 'is_validated' => false ] ],
[ 'query_string' => [ 'query' => $search_str, 'default_operator' => 'OR' ] ]
]
]
]
]
];
Теперь это работает отлично и дает мне желаемые результаты.
Данные, возвращаемые из ES, имеют один столбец «result_source» и имеют предопределенные значения, такие как CNN, BBC или YouTube и т.д.
Что мне нужно, так это то, что я хочу фильтровать результаты по столбцу «result_source» таким образом, чтобы я мог получать результаты только с тем параметром, который я хочу. Например, я хочу, чтобы результаты, которые имеют значение «result_source», имели только значение «YouTube» или только «BBC amp; CNN» или только «CNN или YouTube» и т.д.
Я уже пробовал опцию «Должен», но она также возвращает данные с другими значениями, которые мне не нужны. Не уверен, как пропустить эти значения столбца «result_source» при получении результатов из ES.
Любая помощь по этому вопросу будет оценена.
Спасибо
Ответ №1:
Решаемая!!
Я отвечаю на свой собственный вопрос, потому что я нашел для него решение. Может быть, это может помочь кому-то еще в будущем.
Если кто-то ищет решение для поиска в поле / столбце эластичного поиска, вот что можно сделать.
[ 'query_string' => [ 'query' => $search_str.'(result_source:CNN OR result_source:BBC)', 'default_operator' => 'OR' ] ]
«result_source» на самом деле является именем поля / столбца ES, к которому применяется фильтр для возврата результатов, имеющих result_source=BBC или result_source= CNN.
Это фактически решило мою проблему.