我的sphinx.conf文件中有一个主要来源,在球场中看起来像这样:
sql_query = \
SELECT \
a.id, \
a.filter_by_id, \
a.filter_by_bool, \
a.search_from_1, \
b.search_from_2, \
c.search_from_3, \
a.sort_by_date, \
d.sort_by_float \
FROM \
table1 AS a \
LEFT JOIN \
table2 AS b ON a.b_id = b.id \
LEFT JOIN \
table3 AS c ON a.c_id = c.id \
LEFT JOIN \
table4 AS d ON a.id = d.a_id AND d.domain = 1
sql_attr_uint = filter_by_id
sql_attr_bool = filter_by_bool
sql_field_string = search_from_1
sql_field_string = search_from_2
sql_field_string = search_from_3
sql_attr_timestamp = sort_by_date
sql_attr_float = sort_by_float
然后我有9个继承的源只覆盖sql_query = ... d.domain = N
部分... aaand之后我为每个源定义了10个单独的索引....因此使我的searchd.exe耗尽了10倍存储器中。
因为对于table1中的每条记录,每个域的sort_by_float
都有不同的值。
Sphinx方面是否有办法处理索引上的重叠,或者我应该将所有不同的域sort_by_float
值绑定为一个索引上的单独列?
初始表在1-10m记录之间都相当小,Sphinx索引很简单,几乎都落在默认设置上。
答案 0 :(得分:1)
应该将所有不同的域sort_by_float值绑定为一个索引上的单独列吗?
是。这听起来是最好的主意。数据透视表的排序。
此外,sql_field_string
会将列设为字符串属性和字段。如果您不需要它作为属性,可以通过将其保留为字段来节省内存。