ripaclub / zf2-sphinxsearch-tool
提供一组工具来创建和处理 Sphinx 搜索配置和数据源的实用程序
Requires
- php: >=5.4
- zendframework/zend-config: ~2.2
- zendframework/zend-console: ~2.2
- zendframework/zend-filter: ~2.2
- zendframework/zend-modulemanager: ~2.2
- zendframework/zend-mvc: ~2.2
- zendframework/zend-text: ~2.2
Requires (Dev)
- phpunit/phpunit: ~4.3
This package is not auto-updated.
Last update: 2024-09-14 14:24:33 UTC
README
Sphinx 搜索工具 是一个实用程序,提供了一套用于 创建 Sphinx 搜索配置和数据源 的工具。
功能
-
关于 Sphinx 搜索 配置 的控制台操作
-
一个 变量替换机制(见此处)
-
从 ZF2 配置(例如,返回配置数组的 PHP 文件)自动构建 Sphinx 搜索 配置 的方法
-
一组已定义的有用变量,特别是 UTF-8 字符集表
-
charset_utf8_digits
,映射到仅标记数字 -
charset_utf8_alphabet
,对 ISO 基本拉丁字母 不区分大小写的映射 -
charset_utf8_latin_extra
,特殊拉丁字符的表 -
charset_utf8_a
到charset_utf8_z
的映射,用于标准化变音符号 -
charset_utf8_default
,合并所有之前的映射 -
基于语言的字符集表,例如
charset_utf8_it
,charset_utf8_en
,charset_utf8_de
,charset_utf8_es
,charset_utf8_zh
,charset_utf8_ja
等
-
-
-
用于生成 Sphinx 搜索 数据源文件或流 的类
-
可以作为 独立 CLI 工具 或作为 ZF2 模块 安装
参考
要求
-
Zend Framework 2.0.0 或更高版本
-
PHP 5.4.0 或更高版本
-
对正在维护的应用程序的控制台访问(shell,命令提示符)
安装
使用 composer 的独立安装
-
打开控制台(命令提示符)
-
git clone https://github.com/ripaclub/zf2-sphinxsearch-tool.git
-
cd zf2-sphinxsearch-tool
-
运行
composer install
使用 composer 作为 ZF2 模块安装
-
打开控制台(命令提示符)
-
转到您的应用程序目录
-
在您的 composer.json 中添加以下内容
{ ..., "require": { "ripaclub/zf2-sphinxsearch-tool": "dev-develop" }, "repositories": [ { "type": "vcs", "url": "https://github.com/ripaclub/zf2-sphinxsearch-tool.git" } ] }
- 运行
composer update
使用
该工具的入口点是 sphinx-tool.php
文件。
因此,在没有任何命令的情况下执行它,即 php -f sphinx-tool.php
,将显示帮助消息。
该工具的使用是自我解释的。
您可以将存储在 ZF2 配置文件(例如 module.config.php
)或外部配置文件(例如 sphinx.conf.php
)中的 Sphinx 搜索设置输出到您的控制台(作为数组)。
这里指定的 Sphinx 搜索设置将合并到 ZF2 Sphinx 搜索工具中包含的默认设置中。
php -f sphinx-tool.php sphinx show config php -f sphinx-tool.php sphinx show config --file=sphinx.conf.php
此外,您还可以直接以 Sphinx 搜索格式写入配置。
php -f sphinx-tool.php sphinx print config --output=config/sphinx.dev.conf php -f sphinx-tool.php sphinx print config --input=sphinx.conf.php --output=config/sphinx.dev.conf
注意
如果您将 ZF2 Sphinx 搜索工具作为包含在您的应用程序中的模块使用,您可以从应用程序的入口点调用其操作。
配置
可以在您的ZF2配置文件中通过sphinxsearch
节点元素定义Sphinx搜索配置。此节点的子节点将与ZF2 Sphinx搜索工具提供的默认值合并(即添加或替换)。
它可以有这些子节点:
-
变量
此节点包含将要替换到所有Sphinx搜索配置选项中的变量。一些默认变量包括
log_path
、lib_path
、run_path
和idx_path
(分别设置为/var/log/sphinx
、/var/lib/sphinx
、/var/run/sphinx
和/var/idx/sphinx
)。您可以定义自己的变量(或覆盖默认值),并在其他设置中使用它们,将它们放在括号内。 -
searchd
在此处插入您的搜索配置选项
-
indexer
在此处插入您的索引器配置选项
-
common
在此处插入您的通用部分配置选项
-
indexes
此节点包含您的索引配置,作为一个关联数组,其键对应索引名称。对于您定义的每个索引,您必须通过关联数组(如果需要,也可以是多维的)指定其选项。
-
sources
此节点包含您数据源配置,作为一个关联数组,其键对应数据源名称。对于您定义的每个数据源,您必须通过关联数组(如果需要,也可以是多维的)指定其选项。
示例
以下是一个PHP数组示例,用于定义Sphinx搜索配置
return [ 'sphinxsearch' => [ 'variables' => [ 'idx_path' => '/path/to/idx' ], 'searchd' => [ 'listen' => '9306:mysql41', 'log' => '{log_path}/searchd.log', 'query_log' => '{log_path}/query.log', 'pid_file' => '{run_path}/searchd.pid', 'workers' => 'threads', 'binlog_path' => '{lib_path}', 'sphinxql_state' => '{run_path}/state.sql', ], 'indexer' => [ 'mem_limit' => '512M', 'write_buffer' => '16M', ], 'indexes' => [ 'realtime' => [ 'type' => 'rt', 'path' => '{idx_path}/realtime', 'rt_field' => ['title', 'content'], 'rt_attr_uint' => 'gid', ], 'main' => [ 'source' => 'main', 'path' => '{idx_path}/main', ], 'delta : main' => [ 'source' => 'delta', 'path' => '{idx_path}/delta', ] ], 'sources' => [ 'main' => [ 'sql_query_pre' => ['SET NAMES utf8', 'REPLACE INTO sph_counter SELECT 1, MAX(id) FROM documents'], 'sql_query' => 'SELECT id, title, body FROM documents WHERE id<=(SELECT max_doc_id FROM sph_counter WHERE counter_id=1)', ], 'delta : main' => [ 'sql_query_pre' => 'SET NAMES utf8', 'sql_query' => 'SELECT id, title, body FROM documents WHERE id>(SELECT max_doc_id FROM sph_counter WHERE counter_id=1)', ] ] ] ];
创建数据源
假设您从数据库(例如MongoDB)获取了一个结果集(例如变量$results
),并希望将其与Sphinx搜索索引以通过普通索引提供搜索服务。
首先,我们需要创建一个数据源(例如一个xmlpipe2
源),该源将我们的文档流式传输到标准输出(为此我们未指定任何URI作为写入器的目的)。
use SphinxSearch\Tool\Source\Writer\XML2; ... $writer = new XML2(); $writer->setFields( [ ['name' => 'name', 'attr' => 'string'], ['name' => 'type'], ] ); $writer->setAttributes( [ ['name' => 'lat', 'type' => 'float'], ['name' => 'lng', 'type' => 'float'], ['name' => 'price', 'type' => 'int'], ] ); echo $writer->beginOutput(); $count = 1; foreach ($results as $result) { $document = [ 'id' => $count, 'name' => $result['name'], 'lat' => deg2rad(floatval($result['lat'])), 'lng' => deg2rad(floatval($result['lng'])), 'price' => (int) $result['price'], ]; echo $writer->addDocument($document); $count++; } echo $writer->endOutput(); ...
假设将上述代码封装在控制器控制台操作中(即sphinx xmlpipe2
),因此我们可以将其用作我们的xmlpipe_command
来填充Sphinx搜索索引。
我们的项目中的sphinx.config.php
如下所示
return [ 'sphinxsearch' => [ 'indexes' => [ 'my_idx' => [ 'type' => 'plain', 'path' => '{idx_path}restaurant_it', 'source' => 'my_source', 'dict' => 'keywords', 'charset_type' => 'utf-8', 'charset_table' => '{charset_utf8_default}', ], ], 'sources' => [ 'my_source' => [ 'type' => 'xmlpipe2', 'xmlpipe_command' => '/usr/bin/php -f /path/to/project/public/index.php sphinx xmlpipe2' ] ] ] ];
我们现在可以生成sphinx.conf
./vendor/bin/sphinx-tool.php sphinx print config --input=sphinx.config.php --output=sphinx.conf
现在一切准备就绪。我们可以调用索引器命令(即indexer -c sphinx.conf --all --rotate
)并提供搜索服务。