博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sphinx是支持结果聚类的
阅读量:7046 次
发布时间:2019-06-28

本文共 1711 字,大约阅读时间需要 5 分钟。

Coreseek 4.1 参考手册 / Sphinx 2.0.1-beta

Sphinx--强大的开源全文检索引擎,Coreseek--免费开源的中文全文检索引擎

版权 © 2001-2011 Andrew Aksyonoff

版权 © 2008-2011 Sphinx Technologies Inc, 

版权 © 2006-2011 选择软件(), nzinfo, , HonestQiao, 

本地化服务

中文技术支持:

中文文档翻译:

5.7. 结果分组(聚类)

有时将搜索结果分组(或者说“聚类”)并对每组中的结果计数是很有用的-例如画个漂亮的图来展示每个月有多少的blog日志,或者把Web搜索结果按站点分组,或者把找到的论坛帖子按其作者分组等等。

理论上,这可以分两步实现:首先在Sphinx中做全文检索,再在SQL服务器端对得到的ID分组。但是现实中在大结果集(10K到10M个匹配)上这样做通常会严重影响性能。

为避免上述问题,Sphinx提供了一种“分组模式”,可以用API调用SetGroupBy()来开启。在分组时,根据group-by值给匹配项赋以一个分组。这个值用下列内建函数之一根据特定的属性值计算:

  • SPH_GROUPBY_DAY, 从时间戳中按YYYYMMDD格式抽取年、月、日;
  • SPH_GROUPBY_WEEK, 从时间戳中按YYYYNNN格式抽取年份和指定周数(自年初计起)的第一天;
  • SPH_GROUPBY_MONTH, 从时间戳中按YYYYMM格式抽取月份;
  • SPH_GROUPBY_YEAR, 从时间戳中按YYYY格式抽取年份;
  • SPH_GROUPBY_ATTR, 使用属性值自身进行分组.

 

最终的搜索结果中每组包含一个最佳匹配。分组函数值和每组的匹配数目分别以“虚拟”属性 @group 和 @count 的形式返回.

结果集按group-by排序子句排序,语法与的语法相似。除了@id@weight,分组排序子句还包括:

  • @group (groupby函数值),
  • @count (组中的匹配数目).

 

默认模式是根据groupby函数值降序排列,即按照 "@group desc".

排序完成时,结果参数total_found会包含在整个索引上匹配的组的总数目。

注意: 分组操作在固定的内存中执行,因此它给出的是近似结果;所以total_found报告的数目可能比实际给出的个分组数目的和多。@count也可能被低估。要降低不准确性,应提高max_matches。如果max_matches允许存储找到的全部分组,那结果就是百分之百准确的。

例如,如果按相关度排序,同时用SPH_GROUPBY_DAY函数按属性"published"分组,那么:

  • 结果中包含每天的匹配结果中最相关的那一个,如果那天有记录匹配的话,
  • 结果中还附加给出天的编号和每天的匹配数目,
  • 结果以天的编号降序排列(即最近的日子在前面).

 

从版本0.9.9-rc2开始, 当使用GROUP BY时,可以通过 API调用聚合函数 (AVG(), MIN(), MAX(), SUM())

 

因此如下Sphinx调用

$cl->SetGroupBy ( "category", SPH_GROUPBY_ATTR, "@count desc" );$cl->SetGroupDistinct ( "vendor" );

等价于如下的SQL语句:

SELECT id, weight, all-attributes,	COUNT(DISTINCT vendor) AS @distinct,	COUNT(*) AS @countFROM productsGROUP BY categoryORDER BY @count DESC

在上述示例伪代码中,SetGroupDistinct()调用只与COUNT(DISINCT vendor)对应。

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

你可能感兴趣的文章
android KeyEvent for dot "."
查看>>
第九篇:使用 AdaBoost 元算法提高分类器性能
查看>>
你的身份信息已失效,请重新输入密码登录
查看>>
Serviceability
查看>>
Gson、FastJson、json-lib对比与实例
查看>>
[i.MX6q]i.MX6q处理器,linux操作系统平台搭建 从SD卡启动系统
查看>>
I.MX6 FFmpeg 录制视频
查看>>
伪类元素实现可伸缩时间轴
查看>>
Javscript调用iframe框架页面中函数的方法
查看>>
Java程序员应该了解的10个设计原则
查看>>
Cocos2d-x 3.x游戏开发之旅 笔记
查看>>
如何使用易我数据恢复向导恢复数码相机删除的图片
查看>>
Android系统篇之—-编写系统服务并且将其编译到系统源码中【转】
查看>>
External component has thrown an exception
查看>>
SQLyog之MySQL客户端的下载、安装和使用(旗舰版)(推荐)
查看>>
shadowMap
查看>>
使用JQuery获取被选中的checkbox的value值 以及全选、反选
查看>>
【ztree系列——图标的修改】Bootstrap风格的ztree
查看>>
lua去掉字符串中的UTF-8的BOM三个字节
查看>>
在DevExpress程序中使用PopupContainerEdit和PopupContainer实现数据展示
查看>>