如何避免 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 使列既是 字符串属性 又是 字段 。如果你不需要它作为一个属性,可以通过将它保留为一个字段来节省内存。