ergnuor / sphinx-config
PHP Sphinx 配置助手
Requires
- php: >=5.6.0
Requires (Dev)
- phpunit/phpunit: 5.7.*
This package is auto-updated.
Last update: 2024-09-11 21:02:32 UTC
README
关于
这是一个 Sphinx 配置助手,它扩展了块继承,并允许您通过使用占位符的方式将配置集成到您的应用程序中。
使用方法
独立使用
在这种情况下,您可以使用常见的控制台命令: searchd -c /path/to/sphinx/config/preciousConfig.conf
并且 /path/to/sphinx/config/preciousConfig.conf
文件应包含以下内容
#!/usr/bin/php <?php // generated by composer --dump-autoload require_once '/path/to/autoload/autoload.php'; use Ergnuor\SphinxConfig\Config; $config = Config::phpArrayToNativeConfigStdout('/path/to/config/source'); $config ->transform('preciousConfig');
应用程序集成
您可以将 SphinxConfig 集成到您的应用程序中,并创建脚本以生成配置文件并运行所需的 Sphinx 命令。所以脚本可能看起来像这样
//... use Ergnuor\SphinxConfig\Config; $config = Config::phpArrayToNativeConfigFile( '/path/to/config/source', '/path/to/sphinx/config' ); $config->transform('preciousConfig'); exec('searchd -c /path/to/sphinnx/config/presiousConfig.conf'); //...
在任何情况下,您都需要描述一个源 配置。
先决条件
SphinxConfig 除了 PHP 5.6+ 外没有依赖项
结构
配置结构
目前,配置由 PHP 数组描述(计划有更多格式)。下面是配置结构的简单示例
<?php return [ 'source' => [ 'main' => [ 'sql_query_pre' => [ 'SET NAMES utf8', 'SET CHARACTER SET utf8' ], // ... all other setting ], ], 'index' => [ 'main' => [ 'source' => 'main', 'path' => '/path/to/main', // ... all other setting ], ], 'indexer' => [ 'mem_limit' => '1024M', // ... all other setting ], 'searchd' => [ 'listen' => 'localhost:9306:mysql41', // ... all other setting ], 'common' => [ 'lemmatizer_base' => '/usr/local/share/sphinx/dicts/', // ... all other setting ], ];
Source
和 index
部分 由块组成。块,以及 indexer
、searchd
和 common
部分,包含参数。
文件结构约定
下面是配置的典型完整文件结构
├── preciousConfig
│ ├── sectionType
│ │ └── blockName.php # Block is located in a separate file
│ └── sectionType.php # Section is located in a separate file
└── preciousConfig.php # Whole configuration is located in one file
您不需要像上面那样全面地描述配置的结构。您可以选择以下选项之一,或者根据自己的意愿组合它们
- 整个配置位于一个文件中。
例如:/path/to/configs/preciousConfig.php
, - 部分位于单独的文件中。
例如:/path/to/configs/preciousConfig/sectionType.php
, - 块位于单独的文件中。
例如:/path/to/configs/preciousConfig/sectionType/blockName.php
。此选项可能对存储由不同配置使用的常用参数很有用。有关更多信息,请参阅 继承配置之间的部分。
继承
要继承块,应使用具有父块名称的值的 'extends'
参数。
例如
<?php return [ 'source' => [ 'main' => [ // ... other block settings ], 'delta' => [ 'extends' => 'main', // ... pther block settings ] ], ];
多值参数的继承
默认情况下,多值参数的值会附加到父块参数的值上。要忽略父块中的值,您必须使用 :clear
修饰符。
例如
'sql_query_pre:clear' => [ 'SET NAMES utf8', // ... other pre queries ],
您还可以为多值参数的值指定别名。因此,您可以在子块中引用该值并覆盖它。
例如
<?php return [ 'source' => [ 'main' => [ 'sql_query_pre' => [ 'SET NAMES utf8', // ... other pre queries 'sph_counter' => 'INSERT INTO sphCounter (indexingStartedAt, caption) VALUES(NOW(), \'main\') ON DUPLICATE KEY UPDATE indexingStartedAt = now()' ], // ... other block settings ], 'delta' => [ 'extends' => 'main', 'sql_query_pre' => [ 'sph_counter' => 'INSERT INTO sphCounter (indexingStartedAt, caption) VALUES(NOW(), \'delta\') ON DUPLICATE KEY UPDATE indexingStartedAt = now()' ], // ... other block settings ] ], ];
结果得到以下配置
source main {
sql_query_pre = SET NAMES utf8
// ... other pre queries
sql_query_pre = INSERT INTO sphCounter (indexingStartedAt, caption) \
VALUES(NOW(), 'main') \
ON DUPLICATE KEY UPDATE indexingStartedAt = now()
// ... other block settings
}
source delta : main {
sql_query_pre = SET NAMES utf8
// ... other pre queries
sql_query_pre = INSERT INTO sphCounter (indexingStartedAt, caption) \
VALUES(NOW(), 'delta') \
ON DUPLICATE KEY UPDATE indexingStartedAt = now()
// ... other block settings
}
使用这种方法,您不需要从父块复制多值参数的所有值。此示例可以通过使用 占位符 来进一步缩短。
配置之间的继承
您可以从其他配置中引用块。为此,您需要指定配置名称,并使用 @
符号将其与块名称分开。请注意,配置应位于同一目录中。
使用示例是存储数据库连接设置在 /path/to/configs/common/source/connection.php
块中,并通过 'extends' => 'common@connection'
参数从其他配置中引用它。
请注意,在内部表示中,indexer
、searchd
和 common
部分被转换为包含自命名块的章节。这使得它们可以像 source
和 index
部分一样使用。因此,就像在最后一个例子中一样,您可以将 indexer
、searchd
和 common
部分的常用设置存储在单独的块中,并从中继承。
占位符
Sphinx 参数的每个值都可能包含一个格式为 ::path.to.value:
的占位符。占位符使用点表示法,因此可以从多维数组中提取值。替换值本身也可以包含占位符。因此,占位符是递归引用的。
有两种传递值的方式
- 您可以使用
setPlaceholderValues()
方法传递整个配置的全局值。
这可能对传递来自您应用程序的值很有用,例如数据库连接参数。 - 可以使用
'placeholderValues'
参数为每个块指定局部值,
使用此功能,我们可以简化多值参数继承部分的示例
return [ 'source' => [ 'main' => [ 'sql_query_pre' => [ 'SET NAMES utf8', // ... other queries 'INSERT INTO sphCounter (indexingStartedAt, caption) VALUES(NOW(), \'::sourceName::\') ON DUPLICATE KEY UPDATE indexingStartedAt = now()' ], 'placeholderValues' => [ 'sourceName' => 'main', ], // ... other block settings ], 'delta' => [ 'extends' => 'main', 'placeholderValues' => [ 'sourceName' => 'delta', ], // ... other block settings ] ], ];
结果得到以下配置
source main {
sql_query_pre = SET NAMES utf8
// ... other pre queries
sql_query_pre = INSERT INTO sphCounter (indexingStartedAt, caption) \
VALUES(NOW(), 'main') \
ON DUPLICATE KEY UPDATE indexingStartedAt = now()
// ... other block settings
}
source delta : main {
sql_query_pre = SET NAMES utf8
// ... other pre queries
sql_query_pre = INSERT INTO sphCounter (indexingStartedAt, caption) \
VALUES(NOW(), 'delta') \
ON DUPLICATE KEY UPDATE indexingStartedAt = now()
// ... other block settings
}
参数值
多行值会自动添加一个尾随斜杠。这在格式化查询时很有用。
自定义参数
如果参数的名称以下划线开头,则该参数将被忽略。这允许您添加用于内部使用的参数,例如,如果配置正在预处理,并且您想要能够配置此过程。
配置参数列表
'extends'
指定父块的名称。可以引用同一目录中另一个配置的块。为此,您必须指定与块名称分开的配置名称,使用@
符号。
'extends' => 'blockName'
'extends' => 'otherConfig@blockName'
'placeholderValues'
占位符的值,'isPseudo'
将块标记为伪块。伪块不会出现在结果配置中。如果您想创建一个仅用于存储其他块中常见参数的容器块,则这可能对继承目的很有用。
许可证
本项目根据 Apache 2.0 许可证授权 - 有关详细信息,请参阅 LICENSE 文件。