Я создаю многоуровневый навигационный модуль с эластичным поиском для сайта ecomm. Все работает отлично, я могу выбрать параметры из моего внешнего источника и отобразить их. Их выбор тоже работает, но я столкнулся с проблемой, когда один из вариантов фильтра имеет эти варианты;
FINISHES:
Finished (1)
Semi-Finished (16)
Semi Finished (1)
Очевидно, что 2 варианта с дефисом и без него следует привести в порядок, но на мгновение не обращайте на это внимания, когда я применяю к своей коллекции следующее:
$client = $this->clientBuilder;
$params .... etc
$params['body']['query']['bool']['must'][] = ['match_phrase' => [$split[0] => "$selected"]];
$response = $client->search($params);
Где $ split [0] - это поле упругого поиска ref для 'FINISHES', а $ selected - выбранное значение. Если вы нажмете любую из опций, я верну все 18 записей. Без сомнения, потому что все они содержат одно из слов, которые ищут "закончено".
Как выполнить поиск только по точному термину? Я пытался экранировать дефис с помощью \ - что не помогло, я также пытался проверить, есть ли в искомом термине пробелы или дефисы, и пытался принудительно добавить их в 'must_not', но это тоже не сработало;
if(!$space) {
$params['body']['query']['bool']['must_not'][] = ['match' => [$split[0] => ' ']];
}
if(!$hyphen) {
$params['body']['query']['bool']['must_not'][] = ['match' => [$split[0] => '\\-']];
}