ripaclub / zf2-sphinxsearch-tool

提供一组工具来创建和处理 Sphinx 搜索配置和数据源的实用程序

0.9.1 2015-01-20 12:25 UTC

This package is not auto-updated.

Last update: 2024-09-14 14:24:33 UTC


README

Help message

Sphinx 搜索工具 是一个实用程序,提供了一套用于 创建 Sphinx 搜索配置和数据源 的工具。

Latest Stable Version License

功能

  • 关于 Sphinx 搜索 配置 的控制台操作

    • 一个 变量替换机制(见此处

    • 从 ZF2 配置(例如,返回配置数组的 PHP 文件)自动构建 Sphinx 搜索 配置 的方法

    • 一组已定义的有用变量,特别是 UTF-8 字符集表

      • charset_utf8_digits,映射到仅标记数字

      • charset_utf8_alphabet,对 ISO 基本拉丁字母 不区分大小写的映射

      • charset_utf8_latin_extra,特殊拉丁字符的表

      • charset_utf8_acharset_utf8_z 的映射,用于标准化变音符号

      • charset_utf8_default,合并所有之前的映射

      • 基于语言的字符集表,例如 charset_utf8_itcharset_utf8_encharset_utf8_decharset_utf8_escharset_utf8_zhcharset_utf8_ja

  • 用于生成 Sphinx 搜索 数据源文件或流 的类

    • 用于生成 XML 数据的类,用于 xmlpipe2(见 文档

    • 用于生成 TSV 数据的类,用于 tsvpipe(见 文档

  • 可以作为 独立 CLI 工具 或作为 ZF2 模块 安装

参考

要求

  • Zend Framework 2.0.0 或更高版本

  • PHP 5.4.0 或更高版本

  • 对正在维护的应用程序的控制台访问(shell,命令提示符)

安装

使用 composer 的独立安装

  1. 打开控制台(命令提示符)

  2. git clone https://github.com/ripaclub/zf2-sphinxsearch-tool.git

  3. cd zf2-sphinxsearch-tool

  4. 运行 composer install

使用 composer 作为 ZF2 模块安装

  1. 打开控制台(命令提示符)

  2. 转到您的应用程序目录

  3. 在您的 composer.json 中添加以下内容

{
    ...,
    "require": {
        "ripaclub/zf2-sphinxsearch-tool": "dev-develop"
    },
    "repositories": [
        {
        "type": "vcs",
        "url": "https://github.com/ripaclub/zf2-sphinxsearch-tool.git"
        }
    ]
}
  1. 运行 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_pathlib_pathrun_pathidx_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)并提供搜索服务。

Analytics