如何通过Sphinx实现高级筛选功能?

2026-04-01 06:141阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计640个文字,预计阅读时间需要3分钟。

如何通过Sphinx实现高级筛选功能?

此方法基于`sphinx_client.class`封装sphinx版本2.0以上,使用以下格式:

php$WHERE=array();$WHERE['index']=String; // 查询索引名$WHERE['search_key']=String; // 模糊查询关键字$WHERE['field']=String; // 查询返回字段$WHERE['key']=array('字段'); // 查询关键字段

此方法基于sphinx_client.class封装sphinx版本在2.0以上


$where = arrray();

$whrer['index'] = String --查询索引名

$where['search_key'] = String --模糊查询

$where['field'] = String --查询返回字段

$where['key'] = ['字段1'=>[值1,值2,],'字段2'=>[值1,值2,]] --等量查询多维数组

$where['not_key'] = ['字段1'=>[值1,值2,],'字段2'=>[值1,值2,]] --取反查询

$where['or_key'] = String --范围查询

$where['or_min'] = int -- 范围查询起点

$where['or_max'] = int -- 范围查询终点

$where['where_or'] = String --或操作 a OR b

$where['sorting'] = String --排序id DESC/ASC

$where['group_key'] = String --分组查询

$where['group_key_order'] = String -- 分组查询排序方式 DESC ASC

$where['start'] = int -- 分页偏移开始

$where['limit'] = int --获取数据条数


/**sphinx查询

* @param $where

*/

public function sphinx_api($where){

$this->config->load('sphinx');

$this->load->library('sphinx_client');

$this->sphinx_client->setServer(主机IP, 端口 port);

$this->sphinx_client->setMatchMode(SPH_MATCH_ALL);

$this->sphinx_client->setMaxQueryTime(设置超时时间);

$this->sphinx_client->ResetFilters();

$this->sphinx_client->ResetGroupBy();

if (array_key_exists("field",$where)) {

if(array_key_exists("where_or",Misplaced &where['where_or'])){

where['field'].',if(('.$where['where_or'].'),1,0) as or_filter';

$this->sphinx_client->SetFilter('or_filter', [1]);

}

where['field']);

}else{

$where['field'] = '*';

if(array_key_exists("where_or",Misplaced &where['where_or'])){

where['field'].',if(('.$where['where_or'].'),1,0) as or_filter';

$this->sphinx_client->SetFilter('or_filter', [1]);

}

where['field']);

}

if (array_key_exists("sorting",$where)) {

where['sorting']);

}

if (array_key_exists("key",Misplaced &where['key'])) {

foreach (key=>$value) {

key, $value);

}

}

if (array_key_exists("not_key",Misplaced &where['not_key'])) {

foreach (key=>$value) {

key, $value,true);

}

}

if (array_key_exists("or_key",$where)) {

where['or_key'], where['or_max']);

}

if(array_key_exists('group_key',$where)) {

if (array_key_exists('group_key_order',$where)) {

where['group_key'], SPH_GROUPBY_ATTR,$where['group_key_order']);

}else{

where['group_key'], SPH_GROUPBY_ATTR);

}

}

if(array_key_exists("limit",Misplaced &where)){

where["start"],$where['limit'],15000);

}


if (!array_key_exists("search_key",$where)) {

$where['search_key'] = '';

}

if (!array_key_exists("index",$where)) {

return false;

}

this->sphinx_client->query(where['index']);

this->sphinx_client->GetLastError();

if(!empty($error)) return false;

if($res['total']==0) return false;

if($res){

res["matches"]);

res['total'];

如何通过Sphinx实现高级筛选功能?

return $arr;

}else{

return false;

}

}

github: github.com/wulimax

本文共计640个文字,预计阅读时间需要3分钟。

如何通过Sphinx实现高级筛选功能?

此方法基于`sphinx_client.class`封装sphinx版本2.0以上,使用以下格式:

php$WHERE=array();$WHERE['index']=String; // 查询索引名$WHERE['search_key']=String; // 模糊查询关键字$WHERE['field']=String; // 查询返回字段$WHERE['key']=array('字段'); // 查询关键字段

此方法基于sphinx_client.class封装sphinx版本在2.0以上


$where = arrray();

$whrer['index'] = String --查询索引名

$where['search_key'] = String --模糊查询

$where['field'] = String --查询返回字段

$where['key'] = ['字段1'=>[值1,值2,],'字段2'=>[值1,值2,]] --等量查询多维数组

$where['not_key'] = ['字段1'=>[值1,值2,],'字段2'=>[值1,值2,]] --取反查询

$where['or_key'] = String --范围查询

$where['or_min'] = int -- 范围查询起点

$where['or_max'] = int -- 范围查询终点

$where['where_or'] = String --或操作 a OR b

$where['sorting'] = String --排序id DESC/ASC

$where['group_key'] = String --分组查询

$where['group_key_order'] = String -- 分组查询排序方式 DESC ASC

$where['start'] = int -- 分页偏移开始

$where['limit'] = int --获取数据条数


/**sphinx查询

* @param $where

*/

public function sphinx_api($where){

$this->config->load('sphinx');

$this->load->library('sphinx_client');

$this->sphinx_client->setServer(主机IP, 端口 port);

$this->sphinx_client->setMatchMode(SPH_MATCH_ALL);

$this->sphinx_client->setMaxQueryTime(设置超时时间);

$this->sphinx_client->ResetFilters();

$this->sphinx_client->ResetGroupBy();

if (array_key_exists("field",$where)) {

if(array_key_exists("where_or",Misplaced &where['where_or'])){

where['field'].',if(('.$where['where_or'].'),1,0) as or_filter';

$this->sphinx_client->SetFilter('or_filter', [1]);

}

where['field']);

}else{

$where['field'] = '*';

if(array_key_exists("where_or",Misplaced &where['where_or'])){

where['field'].',if(('.$where['where_or'].'),1,0) as or_filter';

$this->sphinx_client->SetFilter('or_filter', [1]);

}

where['field']);

}

if (array_key_exists("sorting",$where)) {

where['sorting']);

}

if (array_key_exists("key",Misplaced &where['key'])) {

foreach (key=>$value) {

key, $value);

}

}

if (array_key_exists("not_key",Misplaced &where['not_key'])) {

foreach (key=>$value) {

key, $value,true);

}

}

if (array_key_exists("or_key",$where)) {

where['or_key'], where['or_max']);

}

if(array_key_exists('group_key',$where)) {

if (array_key_exists('group_key_order',$where)) {

where['group_key'], SPH_GROUPBY_ATTR,$where['group_key_order']);

}else{

where['group_key'], SPH_GROUPBY_ATTR);

}

}

if(array_key_exists("limit",Misplaced &where)){

where["start"],$where['limit'],15000);

}


if (!array_key_exists("search_key",$where)) {

$where['search_key'] = '';

}

if (!array_key_exists("index",$where)) {

return false;

}

this->sphinx_client->query(where['index']);

this->sphinx_client->GetLastError();

if(!empty($error)) return false;

if($res['total']==0) return false;

if($res){

res["matches"]);

res['total'];

如何通过Sphinx实现高级筛选功能?

return $arr;

}else{

return false;

}

}

github: github.com/wulimax