Я думаю, что вам проще всего было бы организовать «документы» вашего сфинкса по адресам, а не строго по компании. ie уникальный идентификатор документа - это идентификатор таблицы адресов. company_address.id
Сохраните идентификатор компании в качестве атрибута, чтобы группа IF действительно могла получить только один результат на компанию.
sql_query = SELECT a.*, c.name FROM company_address a INNER JOIN company c ON (c.id = company_id)
sql_attr_uint = company_id
sql_attr_flaot = latitude
sql_attr_float = longitude
THEN GEODIST
будет работать в значительной степени напрямую ....
SELECT *, GEODIST(0.659298124, -2.136602399, latitude, longitude) AS distance
FROM addressIndex WHERE distance < 10000 GROUP BY company_id;
Или, если хотите, чтобы адрес каждой компании не включался, GROUP BY
.
Название компании по-прежнему включено в качестве поля для полнотекстового поиска.