Здравствуйте, у меня есть вопрос по скорости выполнения запросов Sphinx, прошу помочь неопытному с решением данной проблемы.
Есть созданный RT индекс в котором находятся ~1 500 000 товаров.
Sphinx используется не только для полнотекстового поиска но и для фильтрации и сортировки
товаров в каталоге, также с его помощью реализована зависимость фильтров и подсчет
количества товаров по определенным характеристикам фильтрации.
Проблема состоит в том что запросы отрабатывают довольно долго(запросы и время выполнения
приведу ниже), хочу понять в чем дело, может я что-то упустил или в конфиге напортачил
так как со Sphinx начал работать недавно.
Sphinx.conf:
index rt_index_name
{
type = rt
path = /var/data/index_name
docinfo = extern
morphology = stem_enru
min_word_len = 3
html_strip = 0
charset_type = utf-8
enable_star = 1
rt_mem_limit = 128M
rt_field = product_title
rt_field = product_type
rt_attr_uint = product_nid
rt_attr_uint = product_status
rt_attr_uint = product_promote
rt_attr_bigint = product_available
rt_attr_uint = product_shop_weight
rt_attr_uint = product_price
rt_attr_uint = product_discount
rt_attr_uint = product_brand
rt_attr_uint = product_shop
rt_attr_uint = product_grade
rt_attr_multi = product_category
rt_attr_float = product_rating
rt_attr_float = product_rating_actual
rt_attr_timestamp = product_created
rt_attr_bigint = product_moderation_category
rt_attr_bigint = product_moderation_status
rt_attr_bigint = product_moderation_suspect
}
searchd
{
listen = 127.0.0.1:2413:mysql41
listen = 127.0.0.1:2414
log = /var/log/sphinx/searchd.log
query_log = /var/log/sphinx/query.log
pid_file = /var/run/sphinx/searchd.pid
read_timeout = 1
max_matches = 10000
max_children = 30
workers = threads
compat_sphinxql_magics= 0
dist_threads = 8
}
Примеры запросов:
Пример №1
Время выполнения: 0.378
$sphinx = new SphinxClient();
$sphinx->SetLimits(0, 100);
$sphinx->SetFilter('product_category', array(32903));
$sphinx->SetSortMode(SPH_SORT_EXTENDED, 'product_available DESC, product_grade ASC,
product_rating_actual DESC, product_nid DESC');
$sphinx_results = $sphinx->Query('', 'rt_index_name');
Пример №1
Время выполнения: 0.642
$sphinx = new SphinxClient();
$sphinx->SetLimits(0, 100);
$sphinx->setGroupBy('product_brand', SPH_GROUPBY_ATTR);
$sphinx_results = $sphinx->Query('', 'rt_index_name');
Пример №1
Время выполнения: 0.677
$sphinx = new SphinxClient();
$sphinx->SetLimits(0, 100);
$sphinx->setGroupBy('product_category', SPH_GROUPBY_ATTR);
$sphinx_results = $sphinx->Query('', 'rt_index_name');