开场白:sphinx是一个简单但功能相当强大的基于mysql的一个搜索插件包.
1 搜索速度方面稍比lucene快,索引分词速度上也比lucene的分词工具如:IK,paoding等快.(个人平时实践而言)
2 内存搜索与CPU占用方面,比lucene要控制得好.
3 灵活性明显比lucene要差,因为索引字段一定要基于数据库的字段,不能象lucene一样可以随时建立索引的字段.
4 不能象lucene一样只要继承Similarity就可以重写lucene排序的方法,即,关于排序的功能不如lucene好.
开始:这次我们讨论的不是讨论sphinx上的搜索,只是讨论聚类方面的实现.包括于mysql的表设计.
现在举一个例子:
现在有一个表,记录了包括各个分组的名称,结构如下
table person_info 个人信息
table group_mapping 分组映射表
记录了每一个分组的名称与分组的Id,同时person_info 中的分组Id都是基于 group_mapping 中的分组名称对应的Id.这样做是因为sphinx中不能直接保存数据的内容.所以如果对分组的中文进行分组,则返回的不是字段内容,而是一串数字,所以要用这样的groupId来表示分组,这样sphinx在建立索引的时候可以用数字作为建立索引了.
当我们对person_info做完索引的时候,可以启动sphinx提供的java接口的程序,来查询,当然我这里只是提供聚类的搜索,其实就是类似于 sql 语句的 group by .这可以实现了,
我们以刚才需要做聚类统计的字段 groupId 作为了group by 的条件.注意,比如现在输入某一个关键字来搜索的时候,同时也选择了某一个聚类的条件,搜索条件需要是这样的
@info 关键字 @groupIdVar 3
它的意思是指定了搜索字段,我们现在是用SphinxClient.SPH_MATCH_EXTENDED这种模式下搜索.大家会问,为什么聚类统计就是用groupId字段,但是搜索的要用groupIdVar呢?这样不是多此一举吗?直接搜索groupId就可以了吧...经过实践,发现,在搜索指定的字段方面,只能搜索是varchar类型的字段,而groupId却是一个int类型的,所以才会把表设计成相同的数值但不同的类型的原因了.总结就是.groupId是用来作聚类统计,groupIdVar则是用来指定搜索的.数值是一样,只是类型不相同.
OK,现在我们看看效果吧.可以看到,我们整一个person_info表中groupId只有四种,groupId=1,2,3,4
同时每一聚类的数量都由@count表示出来了,这样就实现了聚类了,同时如果按照聚类去搜索则可以以 @groupIdVar 聚类Id 就可以了.
可以看到搜索出来的全部都是以groupId=3的.
结论:coreseek以shpinx作为了对中文的支持,是大数据量的搜索提供了非常好另一个解决方案.不过个人认为coreseek其实可以完全脱离mysql而存在,这样可以使用sphinx使用更灵活,同时shpinx特别适合于一些对数据格式化不多的搜索应用.以上文章难免有错误之外,如有发现请欢迎随时提出.
欢迎连载,请注意出处 http://kernaling-wong.iteye.com/blog/642135 by kernaling.wong
分享到:
相关推荐
Python数据分析与应用是现代数据科学领域中的核心技能之一。Python以其简洁易读的语法和丰富的库支持,成为了数据处理、统计分析以及机器学习的理想选择。37304-Python数据分析与应用的PPT课件提供了全面的学习路径...
10. 数据报告与分享:最后,将分析结果整理成报告,可能需要用到Jupyter Notebook或Python的报告生成库,如Sphinx。 以上所述是基于描述的推测,具体项目可能会根据实际数据和问题而有所不同。这些项目不仅有助于...
Python是一种广泛应用于数据分析领域的编程语言,其简洁的语法和丰富的库使得数据处理、统计分析以及可视化变得简单易行。在"Python招聘数据分析"的主题中,我们可以深入探讨以下几个关键知识点: 1. **Python基础*...
6. 数据挖掘与机器学习:如果评估系统包含预测或分类任务,Python的Scikit-learn库提供了大量的机器学习算法,如回归、分类、聚类等。此外,TensorFlow和PyTorch等深度学习库可以用于更复杂的神经网络模型。 7. ...
标题中的"cliffs_lic_data"项目显然与攀岩馆的数据收集和分析有关。这个项目可能涉及从不同来源抓取攀岩馆的数据,包括但不限于会员信息、攀岩活动记录、客户反馈、攀岩课程报名情况等。数据分析部分可能涵盖了统计...
在本项目"Election_Analysis:Python"中,我们聚焦于使用Python进行选举数据分析。...在实际项目"Election_Analysis-main"中,这些技术将被整合到一个主程序或脚本中,实现选举数据分析的自动化流程。
"fm-sales" 项目似乎是一个基于 Python 的销售...以上是对 "fm-sales" 项目可能涉及的 Python 技术栈的概述,具体实现将取决于项目的需求和设计。为了深入了解项目,需要解压文件并查看其中的代码、文档和其他资源。
Python作为流行的编程语言,具有丰富的科学计算和数据分析库,如NumPy、Pandas和Matplotlib,使得开发者能够高效地进行数据清洗、统计分析和可视化工作。 1. **数据处理**: - 数据导入:项目可能包含用于读取不同...
10. 文档编写:使用 Sphinx 或 Markdown 编写清晰的文档和README文件,可以帮助评委理解项目的工作原理和实现细节。 在这个活动中,参赛者不仅要掌握Python编程技术,还需要具备解决问题的创新思维,以及良好的团队...
Pythondata 是一个与数据处理相关的项目,很可能是一个使用Python编程语言和Jupyter Notebook工具的教程或案例集合。Jupyter Notebook 是一个广泛使用的交互式计算环境,特别适合数据分析、机器学习和可视化任务。它...
4. **结果分析**:Python强大的科学计算库,如SciPy和Statsmodels,可用于统计分析,如聚类、差异分析等。 从压缩包文件名"research-codes-master"来看,这可能是一个开源项目的主分支,其中可能包含以下文件结构:...
6. **数据分析**:使用统计方法和机器学习技术对数据进行深度分析。NumPy提供数学计算功能,而SciPy则包含许多科学计算工具。对于机器学习,Scikit-learn库提供了大量模型和算法,如回归、分类和聚类等。 7. **版本...
标题 "nesta_skills" 暗示我们关注的是与 NESTA(英国国家经济和社会研究所)相关的技能或项目,很可能涉及到数据分析、经济研究或者技术应用。由于标签是 "Python",我们可以推测这是一个使用 Python 语言进行的...
在GMAO的炒锅项目中,Python可能被用来编写核心算法,实现数据操作和分析。 2. **数据分析框架**:可能使用了如Pandas、NumPy或SciPy等Python库进行数据导入、清洗、转换和统计分析。Pandas提供了高效的数据结构...
2. **数据分析**:Python 的 SciPy 和 Statsmodels 库提供了广泛的统计分析功能,包括假设检验、回归分析、时间序列分析等。对于更复杂的数据探索,可以使用 matplotlib 和 seaborn 进行数据可视化。 3. **机器学习...
Pandas提供了DataFrame和Series数据结构,便于处理表格型数据,进行数据清洗、统计分析和数据转换。NumPy则专注于数组操作,提供高效的数学计算。 3. **文件操作**:在Python中,可以使用内置的`open()`函数读取和...