sphinx是支持结果聚类的——WHERE、ORDER BY和GROUP BY
原生API提供的匹配筛选、排序和分组配置和SQL语法提供的WHERE、ORDER BY和GROUP BY语句的效果是一样的,你可以对匹配结果进行你需要的筛选、排序和分组匹配。例如,如果你要搜索MySQL中1990年代的书籍,并按照价格排序,可以这么写:
$cl = new SphinxClient();
$cl->SetFilterRange("year_published", 1990, 1999);
$cl->SetSortMode(SPH_SORT_EXTENDED, "price DESC");
$result = $cl->Query("mysql", "booksindex");
上述代码不仅一目了然而且也展示了通用API的使用模式:首先创建一个客户端对象,配置所有查询设置,然后启动搜索并获取结果。当然,产品级的代码应当添加错误处理:
$cl = new SphinxClient();
$cl->SetFilterRange("year_published", 1990, 1999);
$cl->SetSortMode(SPH_SORT_EXTENDED, "price DESC");
$result = $cl->Query("mysql", "booksindex");
if (!$result)
{
// oops, there was an error
DisplayErrorPage($cl->GetLastError());
} else
{
// everything was good
DisplaySearchResult($result);
}
为了进一步完善,让我们也看看如何使用原生API来对年份来分组和计算数据:
$cl = new SphinxClient();
$cl->SetFilterRange("year_published", 1990, 1999);
$cl->SetSortMode(SPH_SORT_EXTENDED, "price DESC");
$cl->SetGroupBy("year_published", SPH_GROUPBY_ATTR);
$cl->SetSelect("*, MIN(price) AS minprice,
MAX(price) AS maxprice, AVG(price) AS avgprice");
$result = $cl->Query("mysql", "booksindex");
你会发现,当我们进一步地为查询添加更多的处理时,代码也开始越来越像SQL了。但我们用的是零散的接口而不是单一的表达式来构建查询的。
摘自:https://www.zybuluo.com/lxjwlt/note/141406
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」