Я попробовал ваш код и не могу подтвердить
Отлично работает с логическим оператором ИЛИ и AND
При вводе
iggy ИЛИ pop
он выполняет поиск «И», результаты не включают в себя контент только с «iggy» или просто «поп». Вы уверены, что операторы могут быть установлены так?
Я прочитал кое-что о
$parse_mode = \Drupal::service('plugin.manager.search_api.parse_mode')
->createInstance('direct');
$parse_mode->setConjunction('OR');
$query->setParseMode($parse_mode);
в документах, но, похоже, это тоже не работает. «iggy pop» и «iggy OR pop» не находят контент только с помощью «iggy», это как «И» принудительно.
Единственный способ, с помощью которого я работал с операторами, - это указание массива для запроса вместо строки:
$search_string_exploded = str_word_count($search_string, 1);
$keys = array_merge($search_string_exploded, ['#conjunction' => 'OR']);
$query->keys($keys);
Может быть, это немного помогает.