Здравствуйте. Есть Sphinx как модуль к PHP. Задача по сути простая, но никак не могу найти подходящее решение.
В MySQL есть таблица вида id | user_id | title. Sphinx индексирует это и осуществляется поиск по связке user_id + title.
Поле title может быть вида abc | abc:xyz т.е. либо просто строкой либо строкой с двоеточием.
Необходимо сделать suggest-происк, т.е. весь поиск вида query*.
Есть два варианта поиска:
1. Найти строку, которая начинается с текста запроса.
2. Найти строку, в которой текст запроса следует после двоеточия.
В данный момент поиск осуществляется так:
$sphinx = Service::sphinx(); // Здесь происходит подключение клиента к серверу
$sphinx->SetMatchMode( SPH_MATCH_EXTENDED ); // Устанавливается режим совпадения
$sphinx->setFilter('user_id', [$this->id]); // Устанавливается фильтр по user_id
// Собственно сам запрос
if ($part == 'second') {
$results = $sphinx->query(':'.$text.'*', 'index');
} else {
$results = $sphinx->query('^'.$text.'*', 'index');
}
В итоге это то работает но криво, то не работает вообще. И не удаётся найти ничего полезного по теме на просторах интернета.
Конфиг примерно такой:
source index
{
type = mysql
sql_host = ...
sql_user = ...
sql_pass = ...
sql_db = ...
sql_port = 3306
sql_query_pre = SET NAMES utf8
sql_query = \
SELECT \
id, user_id, title \
FROM \
table
sql_field_string = title
sql_attr_uint = user_id
sql_query_pre = SET NAMES utf8
sql_query_pre = SET SESSION query_cache_type=OFF
sql_query_info = SELECT * FROM table WHERE id=$id
}
index index
{
source = index
path = /var/lib/sphinxsearch/data/index
docinfo = extern
charset_type = utf-8
mlock = 0
index_exact_words = 1
min_word_len = 1
enable_star = 1
prefix_fields = title
min_prefix_len = 1
}
Буду очень благодарен за помощь и любую информацию. Спасибо!