sphinx是支持结果聚类的——WHERE、ORDER BY和GROUP BY

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

原生API提供的匹配筛选、排序和分组配置和SQL语法提供的WHERE、ORDER BY和GROUP BY语句的效果是一样的,你可以对匹配结果进行你需要的筛选、排序和分组匹配。例如,如果你要搜索MySQL中1990年代的书籍,并按照价格排序,可以这么写:

 
  1. $cl = new SphinxClient();
  2. $cl->SetFilterRange("year_published", 1990, 1999);
  3. $cl->SetSortMode(SPH_SORT_EXTENDED, "price DESC");
  4. $result = $cl->Query("mysql", "booksindex");

上述代码不仅一目了然而且也展示了通用API的使用模式:首先创建一个客户端对象,配置所有查询设置,然后启动搜索并获取结果。当然,产品级的代码应当添加错误处理:

 
  1. $cl = new SphinxClient();
  2. $cl->SetFilterRange("year_published", 1990, 1999);
  3. $cl->SetSortMode(SPH_SORT_EXTENDED, "price DESC");
  4. $result = $cl->Query("mysql", "booksindex");
  5. if (!$result)
  6. {
  7. // oops, there was an error
  8. DisplayErrorPage($cl->GetLastError());
  9. } else
  10. {
  11. // everything was good
  12. DisplaySearchResult($result);
  13. }

为了进一步完善,让我们也看看如何使用原生API来对年份来分组和计算数据:

 
  1. $cl = new SphinxClient();
  2. $cl->SetFilterRange("year_published", 1990, 1999);
  3. $cl->SetSortMode(SPH_SORT_EXTENDED, "price DESC");
  4. $cl->SetGroupBy("year_published", SPH_GROUPBY_ATTR);
  5. $cl->SetSelect("*, MIN(price) AS minprice,
  6. MAX(price) AS maxprice, AVG(price) AS avgprice");
  7. $result = $cl->Query("mysql", "booksindex");

你会发现,当我们进一步地为查询添加更多的处理时,代码也开始越来越像SQL了。但我们用的是零散的接口而不是单一的表达式来构建查询的。

 

摘自:https://www.zybuluo.com/lxjwlt/note/141406














本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/bonelee/p/6651290.html,如需转载请自行联系原作者

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
关系型数据库 PostgreSQL
PostgreSQL listagg within group (order by) 聚合兼容用法 string_agg ( order by) - 行列变换,CSV构造...
标签 PostgreSQL , order-set agg , listagg , string_agg , order 背景 listagg — Rows to Delimited Strings The listagg function transforms values from a g...
5822 0
|
5月前
|
SQL 关系型数据库 MySQL
mysql使用ORDER BY和GROUP BY
mysql使用ORDER BY和GROUP BY
39 0
|
11月前
|
缓存 Java 数据挖掘
白话Elasticsearch50-深入聚合数据分析之doc values机制
白话Elasticsearch50-深入聚合数据分析之doc values机制
73 0
|
11月前
|
SQL 关系型数据库 MySQL
MySQL - order by和 group by 优化初探
MySQL - order by和 group by 优化初探
92 0
MySQL - order by和 group by 优化初探
|
SQL 存储 关系型数据库
group by聚合小技巧
group by聚合小技巧
53 0
|
SQL 数据挖掘 Python
SQL练习:2(简单)+1(中等),常规题(group by\order by\avg...)
SQL练习:2(简单)+1(中等),常规题(group by\order by\avg...)
162 0
SQL练习:2(简单)+1(中等),常规题(group by\order by\avg...)
|
缓存 Java
Elasticsearch Query DSL之Compound queries(复合查询)
Elasticsearch Query DSL之Compound queries(复合查询)
Elasticsearch Query DSL之Compound queries(复合查询)
|
自然语言处理 算法
elasticsearch cardinality(近似聚合)与Global ordinals(全局字典)是什么
1.cardinality是ES的首个近似聚合语法 2.查询优化使用了execution_hint,原理是什么?
1072 0
|
关系型数据库 PostgreSQL
PostgreSQL sharding : citus 系列7 - topn 加速(count(*) group by order by count(*) desc limit x) (use 估值插件 topn)
标签 PostgreSQL , topn , topn.number_of_counters , count(*) group by order by count(*) desc limit x 背景 count(*) group by order by count(*) desc limit x 用来统计 topn。
1375 0