如何避免 Sphinx 索引中的列重复?
How to avoid column duplication in Sphinx indexes?
我的 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
部分... aa 然后我为每个源定义 10 个单独的索引.... 从而使我的 searchd.exe 使用内存增加 10 倍。
只是因为对于表 1 中的每条记录,每个域的 sort_by_float
都有不同的值。
在 Sphinx 方面有没有办法处理索引上的这种重叠,或者我应该求助于将所有这些不同的域 sort_by_float
值绑定为一个索引上的单独列?
初始表在 1-10m 记录之间都相当小,Sphinx 索引很简单并且几乎符合默认设置。
should just binding all those different domain sort_by_float values as separate columns on one index?
是的。这听起来是最好的主意。有点像支点 table。
还 sql_field_string
使列既是 字符串属性 又是 字段 。如果你不需要它作为一个属性,可以通过将它保留为一个字段来节省内存。
我的 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
部分... aa 然后我为每个源定义 10 个单独的索引.... 从而使我的 searchd.exe 使用内存增加 10 倍。
只是因为对于表 1 中的每条记录,每个域的 sort_by_float
都有不同的值。
在 Sphinx 方面有没有办法处理索引上的这种重叠,或者我应该求助于将所有这些不同的域 sort_by_float
值绑定为一个索引上的单独列?
初始表在 1-10m 记录之间都相当小,Sphinx 索引很简单并且几乎符合默认设置。
should just binding all those different domain sort_by_float values as separate columns on one index?
是的。这听起来是最好的主意。有点像支点 table。
还 sql_field_string
使列既是 字符串属性 又是 字段 。如果你不需要它作为一个属性,可以通过将它保留为一个字段来节省内存。