nerds / sphinxql
SphinxQL 库
Requires
- php: >=5.3.3
This package is not auto-updated.
Last update: 2024-09-28 16:05:04 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异常