首页 > 解决方案 > 用于浮点值的 Sphinx MVA

问题描述

我有一张桌子有很多桌子:

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() 之外还有其他解决方案?

标签: sphinx

解决方案


我认为您最简单的方法是将您的狮身人面像“文件”安排为地址,而不是严格的公司。即,唯一的document-id 是地址表id。company_address.id

将公司 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_float = latitude
sql_attr_float = longitude

然后GEODIST将几乎直接工作......

SELECT *, GEODIST(0.659298124, -2.136602399, latitude, longitude) AS distance 
   FROM addressIndex WHERE distance < 10000 GROUP BY company_id;

或者,如果您想要每个公司地址,请不要包含GROUP BY.

公司名称仍包含在全文搜索字段中。


推荐阅读