nerds/sphinxql

v1.0.8.1 2014-06-09 15:16 UTC

README

测试需要 Phpunit。

如何使用:创建

$sphinx = new SphinxQL($server, $port)

获取查询模板:$query = $sphinx->getQuery();

然后构建查询:$time = time()-3600; $time2 = time()-600; $query->addIndex('my_index')->addField('field_name', 'alias')->addField('another_field')->addFields(array(array('field' => 'title', 'alias' => 'title_alias'), array('field' => 'user_id')))->search('要搜索的单词') ->addWhere('category1', 36) ->addWhere('category2', 0, '!=') ->addWhere('time', $time, '>') ->addWhere('time', $time2, '<=') ->addWhere('tags_i_do_not_want', array(4, 5, 6), 'NOT IN') ->addWhere('tags_i_would_like_one_of', array(7, 8, 9), 'IN') ->addWhere('tags_i_do_between', array(10, 11), 'BETWEEN') ->addOrderBy('@weight', 'desc') ->offset(10)->limit(50) ->addOption('max_query_time', '100') ->addGroupBy('field') ->groupOrder('another_field', 'desc');

生成的查询如下: "SELECT field_name AS alias, another_field, title AS title_alias, user_id FROM my_index WHERE MATCH('some words to search for') AND category1 = 36 AND category2 != 0 AND time > $time AND time <= $time2 AND tags_i_do_not_want NOT IN (4,5,6) AND tags_i_would_like_one_of IN (7,8,9) AND tags_i_do_between BETWEEN 10 AND 11 GROUP BY field WITHIN GROUP ORDER BY another_field desc ORDER BY @weight desc LIMIT 10, 50 OPTION max_query_time=100" 执行获取的查询

$sphinx->query($query);

如果需要执行自定义查询:$query = SphinxQLQuery::fromString('DELETE FROM test WHERE id = 123;');

执行后,我们可以得到查询对象。查询后,我们可以获取一个关联数组作为结果

$rows = $sphinx->fetch();

数字数组 $rows = $sphinx->fetch(SpinxQLClient::FETCH_NUM); 作为对象

$rows = $sphinx->fetch(SpinxQLClient::FETCH_OBJ, 'className');

可以使用循环或全部:$rows = $sphinx->fetchAll();

可以指定获取类型(例如 SpinxQLClient::FETCH_NUM),也可以逐行获取 Edit 查询构造器 查询构造器允许构建: SELECT UPDATE DELETE SHOW CALL KEYWORDS 选择查询,使用以下方法: addIndex($index) 可以添加多个 removeIndex($index) 删除不需要的索引 addField($field, $alias=null) 添加字段,支持别名 addFields($fields) 添加多个字段 removeField($alias) removeFields($array) setSearch($search) 设置搜索字符串,第二次调用时将重写 removeSearch() setOffset($offset) setLimit($limit) addWhere($field, $value, $operator=null) addGroupBy($field) removeGroupBy() groupOrder($field, $sort) removeGroupOrder() addOption($name, $value) removeOption($name = null, $value = null) addOrderBy($field, $sort = "ask") removeOrderBy($field = null) 测试中的示例用法,注释中包含期望的结果和小描述。

CALL KEYWORDS 查询,使用以下方法

$query = $sphinx->getQuery(); $query->setType(SphinxQLQuery::QUERY_CALL_KEYWORDS); $query->addIndex('index'); $query->setSearch('string');

此代码将执行查询:CALL KEYWORDS(string, index); SHOW 查询,使用以下方法

$query = $sphinx->getQuery(); $query->setType(SphinxQLQuery::QUERY_SHOW); $query->setTypeShow('meta');

此代码将执行查询:SHOW META;;

UPDATE $time = time()-3600; $time2 = time()-600; $query = new SpinxQLQuery(); $query->addUpdate(); $query->addIndex('tindex'); $query->addUpdateField('test1', 'testval1'); $query->addUpdateField('test2', 'testval2'); $query->addUpdateField('test3', 'testval3'); $query->search('this is search'); $query->addWhere('category1', 36) ->addWhere('category2', 0, '!=') ->addWhere('time', $time, '>') ->addWhere('time', $time2, '<=') ->addWhere('tags_i_do_not_want', array(4, 5, 6), 'NOT IN');

结果:UPDATE tindex test1=testval1,test2=testval2,test3=testval3 WHERE MATCH('this is search') AND category1 = 36 AND category2 != 0 AND time > $time AND time <= $time2 AND tags_i_do_not_want NOT IN (4,5,6)

更新方法:addUpdate() - 初始化更新请求 addIndex('tindex') - 添加索引 addUpdateField('test1', 'testval1') = 添加更新字段,第一名称为字段名,第二值为字段值 块addWhere和search与select相同 在出现错误时,抛出Nerds\SphinxQL\SphinxQLException异常

![Gitter](https://badges.gitter.im/Join Chat.svg)