sphinx支持中文全文检索,并且支持分词高亮。sphinx高速的建立索引(峰值达10M/s),高性能的搜索(2-4G的文件数据上,平均每次检索0.1秒左右),可处理海量数据 (字符串,布尔..)。Sphinx的特点:
- 快速创建索引:3分钟左右即可创建近100万条记录的索引,并且采用了增量索引的方式,重建索引非常迅速。
- 闪电般的检索速度:尽管是1千万条的大数据量,查询数据的速度也在毫秒级以上,2-4G的文本量中平均查询速度不到0.1秒。
- 为很多脚本语言设计了检索API,如PHP,Python,Perl,Ruby等,因此你可以在大部分编程应用中很方便地调用Sphinx的相关接口。
- 为MySQL设计了一个存储引擎插件,因此如果你在MySQL上使用Sphinx,那简直就方便到家了。
- 支持分布式搜索,可以横向扩展系统性能。
sphinx安装
安装此 PECL 扩展相关的信息可在手册中标题为 PECL 扩展的安装章节中找到。但需要PHP 5.2.2+版本。
如果 ./configure 不能正确找到 libsphinxclient 文件 (例如, 他被安装在用户自己定义的目录中), 使用 ./configure--with-sphinx=$PREFIX来制定libsphinxclient的具体位置($PREFIX是libsphinxclient的安装位置).
范例
Example #1 基本使用范例
<?php $s = new SphinxClient; $s->setServer("localhost", 6712); $s->setMatchMode(SPH_MATCH_ANY); $s->setMaxQueryTime(3); $result = $s->query("test"); var_dump($result); ?>
以上例程的输出类似于:
array(10) { ["error"]=> string(0) "" ["warning"]=> string(0) "" ["status"]=> int(0) ["fields"]=> array(3) { [0]=> string(7) "subject" [1]=> string(4) "body" [2]=> string(6) "author" } ["attrs"]=> array(0) { } ["matches"]=> array(1) { [3]=> array(2) { ["weight"]=> int(1) ["attrs"]=> array(0) { } } } ["total"]=> int(1) ["total_found"]=> int(1) ["time"]=> float(0) ["words"]=> array(1) { ["to"]=> array(2) { ["docs"]=> int(1) ["hits"]=> int(1) } } }
it is deprecated, use instead SphinxQL-Query-Builder
SphinxQL-Query-Builder is an ORM for Sphinx. ORM generally is for dumb developers that have no ability to write SQL complex queries. More, ORMs are covering just 10...15% of the SQL syntax. So, my advice, don't go with ORM in any case ... Use the SQL syntax always: http://sphinxsearch.com/docs/current.html#sphinxql-reference PS: I have seen many ORMs like Doctrine or others, but they are a joke comparing with the SQL ;)
SphinxClient 类
SphinxClient { /* 方法 */ public addQuery ( string $query [, string $index = "*" [, string $comment = "" ]] ) : int public buildExcerpts ( array $docs , string $index , string $words [, array $opts ] ) : array public buildKeywords ( string $query , string $index , bool $hits ) : array public close ( void ) : bool public __construct ( void ) public escapeString ( string $string ) : string public getLastError ( void ) : string public getLastWarning ( void ) : string public open ( void ) : bool public query ( string $query [, string $index = "*" [, string $comment = "" ]] ) : array public resetFilters ( void ) : void public resetGroupBy ( void ) : void public runQueries ( void ) : array public setArrayResult ( bool $array_result = false ) : bool public setConnectTimeout ( float $timeout ) : bool public setFieldWeights ( array $weights ) : bool public setFilter ( string $attribute , array $values [, bool $exclude = false ] ) : bool public setFilterFloatRange ( string $attribute , float $min , float $max [, bool $exclude = FALSE ] ) : bool public setFilterRange ( string $attribute , int $min , int $max [, bool $exclude = FALSE ] ) : bool public setGeoAnchor ( string $attrlat , string $attrlong , float $latitude , float $longitude ) : bool public setGroupBy ( string $attribute , int $func [, string $groupsort = "@group desc" ] ) : bool public setGroupDistinct ( string $attribute ) : bool public setIDRange ( int $min , int $max ) : bool public setIndexWeights ( array $weights ) : bool public setLimits ( int $offset , int $limit [, int $max_matches = 0 [, int $cutoff = 0 ]] ) : bool public setMatchMode ( int $mode ) : bool public setMaxQueryTime ( int $qtime ) : bool public setOverride ( string $attribute , int $type , array $values ) : bool public setRankingMode ( int $ranker ) : bool public setRetries ( int $count [, int $delay = 0 ] ) : bool public setSelect ( string $clause ) : bool public setServer ( string $server , int $port ) : bool public setSortMode ( int $mode [, string $sortby ] ) : bool public status ( void ) : array public updateAttributes ( string $index , array $attributes , array $values [, bool $mva = FALSE ] ) : int }