2015-02-08 2 views
0

Я использую два индекса для поиска в Сфинкса:Почему sphinx не возвращает имя атрибута?

#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 
} 


#medical 
source medical : lsParentSource 
{ 

    sql_query_range = SELECT MIN(idMedicalFacilities), MAX(idMedicalFacilities) FROM medicalfacilities 
    sql_query   = SELECT idMedicalFacilities as id, 2000 as type, idMedicalFacilities, MedicalFacilitiesName, MedicalFacilitiesPhoto, city, country FROM medicalfacilities WHERE idMedicalFacilities >= $start AND idMedicalFacilities <= $end 

    sql_attr_uint  = type 
    sql_attr_uint  = MedicalFacilitiesIdUser 
    sql_attr_uint  = idMedicalFacilities 
    sql_field_string = MedicalFacilitiesName 
    sql_field_string = MedicalFacilitiesPhoto 
    sql_attr_uint  = city 
    sql_attr_uint  = country 

    sql_query_info = SELECT MedicalFacilitiesIdUser, MedicalFacilitiesName, MedicalFacilitiesPhoto FROM medicalfacilities WHERE idMedicalFacilities = $id 
    sql_ranged_throttle = 0 
} 

Если использовать индекс users только он возвращает мне все атрибуты, указанные в запросе на выборку. Но если использовать два индекса, сфинкс не возвращает атрибуты. В чем причина?

Результат для индекса users:

array(1) { 
    [533]=> 
    array(2) { 
    ["weight"]=> 
    int(1) 
    ["attrs"]=> 
    array(0) { 
    } 
    } 
} 

Результат для индекса medical:

array(5) { 
    [451]=> 
    array(2) { 
    ["weight"]=> 
    int(2) 
    ["attrs"]=> 
    array(0) { 
    } 
    } 
    [444]=> 
    array(2) { 
    ["weight"]=> 
    int(1) 
    ["attrs"]=> 
    array(0) { 
    } 
    } 

ответ

0

Sphinx возвращает только атрибуты, общие для индексов в запросе. у вас разные имена.

Возможно, вы можете использовать функцию EXISTS из sphinxQL в SetSelect, но никогда не пробовали.

Проще всего использовать те же имена атрибутов.

+0

Но когда я использую один индекс в sphinx.conf, он возвращает мне атрибуты с именами и значениями, для каких атрибутов тогда? – FranceDePerost

+0

Также он должен вернуть мне хотя бы один атрибут с именем таблицы – FranceDePerost

+0

Возможно, вы можете использовать '-> setSelect ('type');' для этого, но не уверен. Sphinx действительно ожидает, что многоиндексные запросы будут использовать одну и ту же схему. – barryhunter

Смежные вопросы