sphinx是支持结果聚类的

简介:

Coreseek 4.1 参考手册 / Sphinx 2.0.1-beta

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

版权 © 2001-2011 Andrew Aksyonoff

版权 © 2008-2011 Sphinx Technologies Inc, http://sphinxsearch.com

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

本地化服务

中文技术支持:http://www.coreseek.cn/contact/

中文文档翻译:http://www.coreseek.cn/products-install/#doc_cn

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排序子句排序,语法与SPH_SORT_EXTENDED 排序子句的语法相似。除了@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时,可以通过SetSelect() 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 @count
FROM products
GROUP BY category
ORDER BY @count DESC

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













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

相关文章
|
12天前
|
数据可视化 数据挖掘 Python
Python用 tslearn 进行时间序列聚类可视化
Python用 tslearn 进行时间序列聚类可视化
|
15天前
|
机器学习/深度学习 存储 算法
【数据分享】R语言SVM和LDA文本挖掘分类开源软件存储库标签数据和词云可视化
【数据分享】R语言SVM和LDA文本挖掘分类开源软件存储库标签数据和词云可视化
|
9月前
|
存储 机器学习/深度学习 自然语言处理
基于 Elasticsearch 向量检索的以文搜图
本实验通过简易快速的阿里云相关组件和开源模型部署,通过1小时的动手实操,搭建基于Elasticsearch向量检索的以文搜图的搜索服务原型。
1891 4
|
10月前
|
存储 算法 搜索推荐
LLM之高性能向量检索库
LLM之高性能向量检索库
578 0
|
SQL 存储 自然语言处理
sphinx(一)全文检索引擎sphinx
Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用 程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设计搜索API接口,如PHP,Python,Perl,Ruby等,同时为MySQL 也设计了一个存储引擎插件。
558 0
sphinx(一)全文检索引擎sphinx
|
自然语言处理 搜索推荐 人机交互
全新Gensim4.0代码实战(03)-相似性查询
全新Gensim4.0代码实战(03)-相似性查询
145 0
|
Java API Apache
lucene 相关性参考
假期梳理了之前在新浪博客的文档,将一些有用的内容搬到这里。本文是lucene序列原理分享之一:相关性原理。
64 0
|
PHP
sphinx(九)根据关键词相似度排序
全文检索通过sphinx搜索出来的内容是没有问题的。这里使用了PHP内置的similar_text函数对文章的描述以及标题进行相似度的计算,然后根据计算之后的相似度数值进行倒叙排序。
97 0
sphinx(九)根据关键词相似度排序
|
关系型数据库 MySQL 测试技术