sergebezborodov / sphinx-yii

关于此包的最新版本(0.1)没有提供许可证信息。

Sphinx搜索功能的扩展。

0.1 2013-09-09 10:57 UTC

This package is not auto-updated.

Last update: 2024-09-23 14:54:50 UTC


README

用于Sphinx搜索引擎的简单而强大的组件。

这是一个测试版,请帮助测试和报告错误。您可以在“发行版”页面找到旧稳定版本。

功能

  • 简单的查询方法
  • 扩展ESphinxSearchCriteria以进行复杂查询
  • 支持通过Sphinx API和Sphinx QL进行连接
  • 支持两种连接的打包查询
  • 单元测试覆盖率

如何安装

###1. 通过composer

"repositories": [
   {
    "type": "vcs",
    "url": "https://github.com/sergebezborodov/sphinx-yii"
   }
],
"require": {
    "sergebezborodov/sphinx-yii": "dev-master"
}

在配置中(假设您已将'vendor'别名指向composer目录)

'components' => array(
    'sphinx' => array(
        'class' => 'vendor.sergebezborodov.sphinx-yii.ESphinxApiConnection', // sphinx api mode
        //'class' => 'vendor.sergebezborodov.sphinx-yii.ESphinxMysqlConnection', for sphinx ql mode
        'server' => array('localhost', 3386),
        'connectionTimeout' => 3, // optional, default 0 - no limit
        'queryTimeout'      => 5, // optional, default 0 - no limit
    ),
),

###2. 旧式方法

在受保护目录中的extensions文件夹中下载并解压源文件。在配置中添加

'import' => array(
    // i hope remove this in new versions
    'ext.sphinx.*',
    'ext.sphinx.ql.*',
    'ext.sphinx.enums.*',
),

'components' => array(
    'sphinx' => array(
        'class' => 'ext.sphinx.ESphinxApiConnection', // sphinx api mode
        //'class' => 'ext.sphinx.ESphinxMysqlConnection', for sphinx ql mode
        'server' => array('localhost', 3386),
        'connectionTimeout' => 3, // optional, default 0 - no limit
        'queryTimeout'      => 5, // optional, default 0 - no limit
    ),
),

如何使用

所有组件类名以ESphinx开头。我们用于查询的主要对象是ESphinxQuery。

索引中的查询

Yii::app()->sphinx->executeQuery(new ESphinxQuery('Hello world!'), 'blog');

扩展查询

通常我们需要带有某些参数和选项的索引搜索。为此任务,组件包含ESphinxSearchCriteria类。它与CDbCriteria非常相似,具有相同的思想。

使用某些参数搜索文章索引

$criteria = new ESphinxSearchCriteria(array(
    'sortMode' => ESphinxSort::EXTENDED,
    'orders' => array(
        'date_created' => 'DESC',
        'date_updated' => 'ASC',
    ),
    'mathMode' => ESphinxMatch::EXTENDED,
));

$query = new ESphinxQuery('@(title,body) hello world', 'articles', $criteria);

标准可以在工作过程中更改。

$criteria = new ESphinxSearchCriteria(array('mathMode' => ESphinxMatch::EXTENDED));
$criteria->addFilter('user_id', 1000); // add filter by user, we can use integer or integer array
$criteria->addFilter('site_id', 123, false, 'site'); // add filter by site_id field with key value (will used later)

// querying
$result = Yii::app()->sphinx->executeQuery(new ESphinxQuery('', 'products', $criteria));

// search same query by another site
$criteria->addFilter('site_id', 321, false, 'site'); // change site_id param value

// querying
$result = Yii::app()->sphinx->executeQuery(new ESphinxQuery('', 'products', $criteria));

// search same query but without site_id param
$criteria->deleteFilter('site'); // delete filter on site_id field

// querying....

多查询

Sphinx的一项强大功能是多查询(打包查询)。当您发送两个或更多查询时,Sphinx会进行内部优化以提高效率。

$query1 = new ESphinxQuery('', 'products', array('filters' => array(array('site_id', 123))));
$query2 = new ESphinxQuery('', 'products', array('filters' => array(array('site_id', 321))));

$results = Yii::app()->sphinx->executeQueries(array($query1, $query2));

另一种添加查询的方法

$query = new ESphinxQuery('', 'products', array('filters' => array(array('site_id', 123, 'key' => 'site_id')))));
Yii::app()->sphinx->addQuery($query);

// change previous site_id filter value
$query->criteria->addFilter('site_id', 321, false, 'site_id');

$results = Yii::app()->sphinx->runQueries();

选项

####ESphinxSearchCriteria版本包含最后一个Sphinx测试版的所有可能选项。请确保您使用正确的函数来处理您的版本。

####排序方法对于SPH_SORT_EXTENDED(ESphinxSort::EXTENDED),您应使用setOrders()或addOrder()方法。对于其他排序模式,请使用setSortBy()方法对一个字段进行排序。