Страницы

Поиск по вопросам

пятница, 12 октября 2018 г.

Почему один индекс Sphinx возвращает атрибуты вместе со значениями, другой - нет?

В моем конфиге настроены 2 индекса на индексацию 2-х таблиц MySQL:
#medicalfacilities source medicalfacilities : lsParentSource {
sql_query_range = SELECT MIN(idMedicalFacilities), MAX(idMedicalFacilities) FROM
medicalfacilities sql_range_step = 128
sql_query = SELECT idMedicalFacilities * 10 + 1 as id, 2000 as type,
idmedicalfacilities, MedicalFacilitiesName, medicalfacilitiesiduser, medicalfacilitiessite,
medicalfacilitiesemail, medicalfacilitiesphoto FROM medicalfacilities WHERE
idMedicalFacilities>=$start AND idMedicalFacilities<=$end
sql_attr_uint = idmedicalfacilities sql_attr_uint = type sql_attr_uint = MedicalFacilitiesIdUser sql_field_string = MedicalFacilitiesSite sql_field_string = MedicalFacilitiesName sql_field_string = MedicalFacilitiesPhoto sql_field_string = MedicalFacilitiesEmail sql_query_info = SELECT MedicalFacilitiesName, MedicalFacilitiesDescription \ FROM medicalfacilities WHERE idMedicalFacilities = ($id - 1) / 10
# Время засыпания в миллисекундах (sleep) перед отправкой запросов серверу (может быть
полезно для разгрузки сервера базы данных) sql_ranged_throttle = 0 }

#users source users : lsParentSource {
sql_query_range = SELECT MIN(idDetailToUsers), MAX(idDetailToUsers) FROM detailtousers sql_query = SELECT idDetailToUsers as id, 1000 as type, UsersTypeAccount,
idDetailToUsers, SpecializationName, DetailToUsersName, DetailToUsersPhoto, city, country FROM
detailtousers join users ON users.idUsers = detailtousers.idDetailToUsers left join
usersspecialization ON usersspecialization.UsersSpecializationIdUser =
detailtousers.idDetailToUsers left join specializationtousers ON
specializationtousers.idSpecialization = usersspecialization.UsersSpecializationIdSpecialization
WHERE idDetailToUsers >= $start AND idDetailToUsers <= $end GROUP BY idDetailToUsers
sql_attr_uint = type sql_attr_uint = idDetailToUsers sql_attr_uint = UsersTypeAccount sql_field_string = SpecializationName sql_field_string = DetailToUsersName sql_field_string = DetailToUsersPhoto sql_attr_uint = city sql_attr_uint = country
sql_query_info = SELECT idDetailToUsers, DetailToUsersName, UsersTypeAccount,
SpecializationName, DetailToUsersPhoto, city, country \ FROM detailtousers WHERE idDetailToUsers = $id sql_ranged_throttle = 0 }
Индексы:
index medicalfacilities { source = medicalfacilities path = /var/data/sphinx/medicalfacilities #enable_star = 1 charset_type = utf-8 html_strip = 1 #morphology = stem_ru min_word_len = 3 min_prefix_len = 3 #min_infix_len = 3 }
index users_index { docinfo = extern source = users path = /var/data/sphinx/users charset_type = utf-8 html_strip = 1 morphology = stem_enru min_word_len = 1 min_prefix_len = 0 min_infix_len = 1 enable_star = 1 }
Для индекса users возвращаются атрибуты со значениями, а для medicalfacilities - без.


Ответ

На первый взгляд проблема в этой части
sql_query_info = SELECT MedicalFacilitiesName, MedicalFacilitiesDescription \ FROM medicalfacilities WHERE idMedicalFacilities = ($id - 1) / 10
Зачем нужно выражение ($id - 1) / 10 ? Может заменить его на $id?
Кроме того у сфинкса есть SphinxQL. Т.е. можно писать запросы в него как в MySQL. Работает по протоколу mysql(т.е. можно присоединиться обычным mysql клиентом по указанному порту).
http://sphinxsearch.com/docs/latest/sphinxql.html

Комментариев нет:

Отправить комментарий