Как я могу получать результаты эластичного поиска из одного столбца с разными значениями одновременно?

#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.

Это фактически решило мою проблему.