0

我们目前正在生产服务器上运行带有实时索引的 Sphinx。我们的多租户架构意味着我们为每个租户维护一个单独的索引(我们将我们的租户分成单独的数据库,并选择在 Sphinx 中保持这种隔离)。

然而,我们遇到的问题是,当我们创建一个新租户时,我们无法让 Sphinx “热交换” .conf 以添加新添加的索引。

示例 sphinx.conf

index gs_index_cartoncloud_tenant_1
{
    type                    = rt
    dict                    = keywords
    min_prefix_len          = 3
    expand_keywords         = 1
    rt_mem_limit            = 32M

    path                    = /var/lib/sphinx/gs_index_tenant_1

    rt_field                = title
    rt_attr_string          = title
    rt_field                = heading
    rt_attr_string          = heading
    rt_field                = body
    rt_attr_string          = body
    rt_field                = model_name
    rt_attr_string          = model_name
    rt_attr_uint            = weight
    rt_attr_uint            = customer_id
    rt_attr_timestamp       = created
}

index gs_index_cartoncloud_tenant_2
{
    type                    = rt
    dict                    = keywords
    min_prefix_len          = 3
    expand_keywords         = 1
    rt_mem_limit            = 32M

    path                    = /var/lib/sphinx/gs_index_tenant_2

    rt_field                = title
    rt_attr_string          = title
    rt_field                = heading
    rt_attr_string          = heading
    rt_field                = body
    rt_attr_string          = body
    rt_field                = model_name
    rt_attr_string          = model_name
    rt_attr_uint            = weight
    rt_attr_uint            = customer_id
    rt_attr_timestamp       = created
}

index gs_index_cartoncloud_tenant_3
{
    ....
}

....

虽然我们能够重建配置,但在 searchd 服务重新启动之前,Sphinx 不会使用它。要求 sphinx 重新启动将导致锁定的 binlog 文件出现问题——这也会导致服务在短时间内退出,这意味着某些文件没有被索引——这并不理想。

我们正在寻找一种可以“即时”添加新 rt 索引的方法 - 这可能吗?

4

0 回答 0