Я интегрирую Sphinxsearch в свой сайт и переписываю свой старый код для использования Sphinx.
Проблема, которую я получил, со специальными символами внутри MATCH в SphinxQL.
Пример: хочу найти H&M
С простым mysql я получаю тысячи записей, так что я совершенно уверен, что у меня есть название, содержащее это слово в моей базе данных.
Мне не нужен расширенный синтаксис запроса в MATCH.
$q = "h&m";
$spxq = "SELECT * FROM sphinx_index WHERE MATCH(:query) LIMIT 0,10";
$stmt = $DB->prepare($spxq);
$stmt->bindValue(':query', $q, PDO::PARAM_STR);
$stmt->execute();
$res = $stmt->fetchAll(PDO::FETCH_ASSOC);
Это не возвращает никаких результатов.
После этого я попытался избежать $ q так:
$q = "h\&m";
Все еще не работает. Пробовал с двойным побегом, все еще не работает.
Любая помощь будет оценена.
Хорошо, я понял, если у кого-то в будущем возникнет такая же проблема.
Решение состоит в том, чтобы добавить специальные символы, которые вы хотите найти в sphinx.conf файл, в charset_table.
Так что для моего случая H&М, вам нужно добавить & символ (U + 026) в таблице кодировки.
Других решений пока нет …