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)并提供搜索服务。
