Сфинкс MVA для значений с плавающей запятой - PullRequest
0 голосов
/ 16 января 2020

У меня есть таблица с множеством таблиц:

company
id | name
---------
1  | a
2  | b
3  | c
company_address
id | company_id |         latitude |        longitude |
-------------------------------------------------------
1  |           1|0.9684982117632206|1.1395506188216191|
2  |           1|0.7874478257111129|0.6816976456543681|
3  |           2|0.9758854923552117| 0.744264348306201|
4  |           2|0.7860300249465478|0.6804121583003967|
5  |           2|0.7874478257111129|0.6816976456543681|
6  |           3|0.9684982117632206|1.1395506188216191|

sql_attr_multi не поддерживают поле типа с плавающей запятой, sql_joined_field удалено. Как я могу решить эту проблему? Может быть есть решения помимо GROUP_CONCAT ()?

1 Ответ

1 голос
/ 16 января 2020

Я думаю, что вам проще всего было бы организовать «документы» вашего сфинкса по адресам, а не строго по компании. 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.

Название компании по-прежнему включено в качестве поля для полнотекстового поиска.

...