我们目前正在生产服务器上运行带有实时索引的 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 索引的方法 - 这可能吗?