karolnet/sphinxbundle

SphinxSearch的Symfony集成

1.1.4 2016-01-15 11:34 UTC

This package is auto-updated.

Last update: 2024-08-29 04:25:23 UTC


README

一些与Symfony集成的SphinxSearch,包括对gigablah/sphinxphpfoolz/sphinxql-query-builder的支持。 Alt text

版本0.1.*是在Codewave的shipit day!期间发布的

安装

通过composer安装

composer require karolnet/sphinxbundle

添加到AppKernel.php

new \Ekiwok\SphinxBundle\EkiwokSphinxBundle()

QueryBuilder

您可以注册多个连接。以下是一个示例配置:

ekiwok_sphinx:
    connection:
        host: localhost
        port: 9306
        driver: pdo

默认连接将始终创建,除非您提供替代默认配置

    host: localhost
    port: 9306
    driver: pdo

这意味着如果您想使用pdo并且您在本地主机上运行sphinx守护程序,端口为9306,您不需要提供任何配置。

用法示例

        $sphinx = $this->get('sphinx');
        $conn = $sphinx->getConnection();
        $recipes = $conn->createQueryBuilder()
                        ->select('id', 'title')
                        ->from('recipes')
                        ->match('title', 'chicken')
                        ->limit(100)
                        ->execute();
        $sphinx = $this->get('sphinx');
        $conn = $sphinx->getConnection();
        $recipes = $conn->query('SELECT id, title FROM recipes WHERE MATCH("(@title chicken)")');

更多信息请访问https://github.com/FoolCode/SphinxQL-Query-Builder

gigablah/sphinxphp

新用户

如果您是刚开始在项目中使用sphinx,您只需声明默认连接即可

    sphinx.default.connection:
        class: Sphinx\SphinxClient
        calls: 
            - [setServer, ['127.0.0.1', 9312] ]

然后使用数据收集器对其进行装饰

    sphinx.default:
        class: Ekiwok\SphinxBundle\Sphinx\SphinxDataCollector
        arguments: [@sphinx.default.connection, @sphinx_stats]

@sphinx_stats是一个提供数据给分析器的服务。您可以通过实现Ekiwok\SphinxBundle\Sphinx\SphinxDataCollector来提供自己的提供者

现在使用sphinx.default就像使用Sphinx\SphinxClient

$sphinxClient = $this->get('sphinx.default');

替换Sphinx\SphinxClient

Symfony 2.5+

如果您使用的是Symfony 2.5+,您可能对服务装饰感兴趣:https://symfony.com.cn/doc/current/components/dependency_injection/advanced.html#decorating-services

替换Sphinx\SphinxClient

如果您已经将SphinxClient注册为例如sphinx.default,可以使用一个小技巧,将此服务名称更改为sphinx.default.connection,并将SphinxDataCollector注册为sphinx.default。因为SphinxDataCollector扩展了SphinxClient,它不应该对您的项目产生副作用

    sphinx.default:
        class: Ekiwok\SphinxBundle\Sphinx\SphinxDataCollector
        arguments: [@sphinx.default.connection, @sphinx_stats]

您始终可以手动实例化SphinxDataCollector(例如,在没有容器管理SphinxClient的情况下)

    // $sphinxClient is instance of Sphinx\SphinxClient
    $sphinxStats = $this->get('sphinx_stats');
    $sphinxClient = new \Ekiwok\SphinxBundle\Sphinx\SphinxDataCollector($sphinxClient, $sphinxStats);

这个包做什么?

它会在分析器和工具栏中显示一些花哨的东西。这些是查询调用和错误。所以它所做的只是跟踪SphinxClient查询方法的调用,并测量此方法的执行时间(是的,这不是实际的查询时间)。

因为SphinxClient使用二进制协议,所以这个包不会显示可以复制到sphinx cli的真实人类可读的查询。(现在 =)不幸的是,它只显示传递给查询方法的参数(查询、索引和注释)。

这个包跟踪执行查询期间出现的所有错误。

作者

这个包最初是由Piotr Kowalczyk开发的