在 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 )
我有一个非常长且复杂的 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 )