在 Sphinx 中逼近 "Includes" 的最佳方法?

Best way to approximate "Includes" in Sphinx?

我有一个非常长且复杂的 sphinx config 文件,其中包含多个索引。主要的 (idx_Main) 不仅庞大,它还索引了超过 200 万条记录 table。有时我会遇到意想不到的搜索 (SphinxQL) 结果,并且由于长达一小时的轮换,测试成为一个挑战。理想情况下,我可以 运行 在测试 table 中使用完全相同的索引,并使用一些示例记录。

但是我还没有找到一个好的方法;

如果我使用另一个索引进行复制和粘贴(例如 idx_test),我很快就会失去同步(对 idx_test 的更改不会延续到 idx_Main 索引中的更改,并且反之亦然)

如果我只是改变 Select 我会覆盖原来的索引

如果我更改 Select 和索引名称以及 src_index 和旋转我似乎搞砸了 Sphinx 因为我现在有一个存储的索引 (idx_Main) 不是在配置文件中更长。

在理想情况下,我可以在配置中有一个 Include,这样我就可以存储例如

{ idx_Main 各种设置 }

{ idx_Test 包括 idx_Main 设置 }

但我看不出有什么办法。那么最有效的方法是使用相同的设置 w/o corrupting/overwriting production/main 索引在较小的 table 上测试大型生产索引的更改?

它没有得到很好的宣传,但 sphinx 配置文件本身可以是一个脚本。 (例如 PHP、Perl,甚至 SH 等)PHP 特别适合实现包含。

sphinx.conf:

#!/usr/bin/php
source src {

...
index inx1 {
  <?php include "main_settings.conf"; ?>
  ...

http://sphinxsearch.com/blog/2013/11/05/sphinx-configuration-features-and-tricks/

但大多数情况下也可以直接使用继承 - 在 'template' 索引中定义大量设置 - 然后最终索引只需要它想要覆盖的设置(比如路径!) 它在三角洲部分展示 http://sphinxsearch.com/docs/current.html#delta-updates

编辑补充,在有一个测试索引这一点上,继承和sql_query_range是相当酷的。

可以完全按照需要设置主索引(但使用 sql_query_range),然后创建第二个测试索引,它仅覆盖 sql_query_range。无需重新声明 sql_query 或任何 sql_attr_* 字段等。因此更改主索引,测试索引也会更新。

source main {
....
    sql_query_range = SELECT MIN(id),MAX(id) FROM documents
    sql_query = SELECT * FROM documents WHERE id>=$start AND id<=$end
    sql_attr_uint = category_id
...
}

...然后创建测试索引,仅重新声明 sql_query_range

source main_test : main {
    sql_query_range = SELECT 1,1000
}

index main_test : main {
    path = /var/sphinx/main_test
}

这就是创建第二个 'sample' 索引所需的全部内容,它重复使用了完全相同的设置(文档数量除外!)

(好吧,也许不是,如果使用 sql_joined_field and/or sql_attr_multi 它更复杂 http://sphinxsearch.com/bugs/view.php?id=1591