Некоторые проблемы с Sphinx и PHP

Вот так:

У меня есть большая таблица в моей базе данных – 3,6 ГБ и 1,7 М строк. Выбор с ограничением и смещением из таблицы очень медленный и часто приводит к ошибке 504. Таблица MyISAM, имеет несколько индексов и будет обновляться.

Вот почему я решил использовать Sphinx для отображения содержимого таблицы – в некоторых случаях без запроса (все строки), в некоторых случаях с запросом – и он работает как шарм. Скорость потрясающая.

Но вот проблема – без запроса возвращаются только первые 1000 результатов. Даже если я назову его с помощью $this->SetLimits(41, 24); который должен вернуть мне результаты с идентификатором от 984 до 1008 , но последний результат, который я получаю, равен 1000. Я попытался изменить значение в моем /etc/sphinxsearch/sphinx.conf , перезапустив службу, но не /etc/sphinxsearch/sphinx.conf успеха. Кроме того, это хорошая идея? Я имею в виду, это заметно снизит производительность? Любые предложения о том, как это сделать?

И вот еще вопрос:

В моем sphinx.conf я выбрал столбцы, которые я хочу использовать для поиска / заказа, и все они появляются в разделе [matches] . Поскольку я их не использую, они берут память и (я думаю), уменьшают производительность до некоторой степени. Я использую только id в своем приложении. Можно ли искать / упорядочивать эти столбцы, но исключать их из [matches] ?

Мой sphinx.conf

 source test { type = mysql sql_host = localhost sql_user = root sql_pass = password sql_db = database sql_port = 3306 sql_query = \ SELECT id, name, UNIX_TIMESTAMP(date) as date, views, rating \ FROM table \ WHERE active = 1 sql_field_string = name sql_attr_timestamp = date sql_attr_uint = views sql_attr_uint = rating sql_query_info = SELECT * FROM table WHERE id=$id } index test { source = test path = /var/lib/sphinxsearch/data/test docinfo = extern charset_type = utf-8 } searchd { listen = 9312 log = /var/log/sphinxsearch/searchd.log query_log = /var/log/sphinxsearch/query.log read_timeout = 5 max_children = 30 pid_file = /var/run/sphinxsearch/searchd.pid max_matches = 10000 # I tried changing this to 10,000 - no result seamless_rotate = 1 preopen_indexes = 1 unlink_old = 1 binlog_path = /var/lib/sphinxsearch/data } 

Это связано с тем, что также существует параметр max-matches для каждого запроса, и по умолчанию он равен 1000.

в sphinx.conf вы можете установить что-то вроде

 max_matches = 10000 

или, добавьте max_matches к вашему запросу

 $this->SetLimits(41, 24, 10000); 

Обратите внимание, что есть два места, где предел max_matches применяется. Ограничение по запросу контролируется этим вызовом API, но также существует ограничение на сервер, контролируемое параметром max_matches в файле конфигурации. Чтобы предотвратить злоупотребление ОЗУ, сервер не позволит установить лимит на один запрос выше, чем ограничение на сервер.

Во второй части смотрите функцию ->SetSelect() .