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
}
