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()方法对一个字段进行排序。