`
henry2009
  • 浏览: 93495 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

sphinx tokyocabinet 轻量级搜索框架(1.0)

阅读更多

轻量级搜索框架

先介绍一下工具吧:

Sphinx :Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设计搜索API接口,如PHP,Python,Perl,Ruby等,同时为MySQL也设计了一个存储引擎插件。

 

下载方式:http://www.sphinxsearch.com/

基于sphinx的coreseek:http://www.coreseek.cn/

中文分词工具:LibMMSeg:http://www.coreseek.cn/opensource/mmseg/

 

tokyocabinet:在我第一篇博客有详细介绍。

mysql:大家都熟悉的开源数据库。

 

这个轻量级框架,保守估计,可以支持5线程同时并发搜索,根据我自己测试的结果,tokyocabinet(下称tc )FIFO队列返回10w条数据,只需要10ms,100w条数据要100ms左右。tc的key-value方式缓存,保守估计,100w条数据100ms没问题。

 

 介绍一下流程主要部分吧(看图流程,比较像张宴的“亿万级搜索框架”,老实说当时我看过,只是表面了解一下 | 恕我冒犯,大师级的东东我不是很懂,图片漂亮,但是内部实现,根本是比较模糊的,算是一半原创吧,哈哈)。

 

1、程序入口会判断用户输入的关键字是否有关键字缓存,如果不存在,就会调用sphinx对mysql数据库进行全文检索。

然后sphinx会吧搜索索引的文档id结果缓存到tc。

我故意把数据库的文本结果缓存到FiFo队列。因为sphinx是不会做文本索引的,所以它返回的知识搜索索引的文档id,也就是数据库主键id(或用户自定义ID),程序必须要吧结果id放到数据库搜索,吧文本结果取出来。虽然mysql根据id返回搜索结果的速度很快,(如果单用int类型id以递增方式查询mysql数据库,每秒可处理1000w数据)。但实际不会这么用。所以文本结果缓存就显得格外重要了。

最后通过FIFO队列,把相同关键字的搜索结果返回到页面现实。

 

2、当然,如何关键字缓存存在,就会直接从FIFO队列返回搜索结果。

 

我的想法:

因为知道sphinx的缺陷,所以想尽办法弥补,一个基于mysql的全文检索工具,速度之快,很是让人佩服。

 

问题总结:

1、简单统计: 用了tc缓存,其实有很大一部分原因是用来做统计。很多搜索引擎,都是用mencache,但是mencache是建立在内存上面的,不释放的话,资源消耗颇大。而tc就不一样,它是写入文本的,缓存数据得以保存。在做简单统计的时候,比如说:

统计"java" 跟"C语言"的用户搜索情况,我可以从tc中读出关键词缓存,知道搜索密度情况。

 

2、完成复杂统计: 复杂统计的话,必须要定义好,复杂的sql语句,要用到left join这样那样的函数,配置比较麻烦。但问题依然可以解决。(说是这么说,但是具体怎么做头绪还差一丁点~~牵扯到多表查询,性能如何还是要尝试尝试~)

 

希望看过文章的可以给点意见,我努力完善,献丑啦~~

6
1
分享到:
评论
2 楼 henry2009 2009-09-14  
kernaling.wong 写道
其实这几天我也在想关于复杂统计与简单统计的问题,不过基本上已经想明白如何去做了..对了,之前说过的关于sphinx与tokyocabinet的整合应用,我个人更趋向于把tokyocabinet作为一个保存数据库的每一条记录,当sphinx搜索出来的结果再从tokyocabinet中取出,因为要知道sphinx搜索结果只是数据库的ID,要进行复杂与简单统计一定需要知道统计字段的值....

谢谢你的建议,我在2.0有修改
1 楼 kernaling.wong 2009-09-09  
其实这几天我也在想关于复杂统计与简单统计的问题,不过基本上已经想明白如何去做了..对了,之前说过的关于sphinx与tokyocabinet的整合应用,我个人更趋向于把tokyocabinet作为一个保存数据库的每一条记录,当sphinx搜索出来的结果再从tokyocabinet中取出,因为要知道sphinx搜索结果只是数据库的ID,要进行复杂与简单统计一定需要知道统计字段的值....

相关推荐

    sphinx4-1.0beta3-bin Java语音识别

    Sphinx4是一个强大的Java实现的开源语音识别框架,它的全称为“Sphinx4-1.0beta3-bin”。这个框架的主要目标是为开发者提供一个易于使用的工具,以便他们能够构建自己的语音识别应用。Sphinx4的出现,使得语音识别...

    sphinx4-1.0beta6-bin.zip

    Sphinx4是一个强大的Java语音识别框架,它的1.0 beta 6版本的二进制包简化了开发者集成语音识别功能的过程。通过理解和利用Sphinx4的各个组件,可以构建出适应不同应用场景的语音识别系统。对于希望快速入门ASR的...

    带有sphinx搜索功能的yii2框架实例

    在本文中,我们将深入探讨如何在Yii2框架中集成Sphinx搜索功能,为你的Web应用程序提供高效的全文检索体验。Yii2是一款快速、安全且可扩展的PHP框架,而Sphinx是一个开源的、高性能的全文搜索引擎,它允许快速、精确...

    sphinx4-1.0beta6-src

    Sphinx4是一个开源的、基于Java的语音识别框架,它为开发者提供了构建语音识别系统的能力。这个"**sphinx4-1.0beta6-src**"是Sphinx4的源代码版本,相对应的"**sphinx4-1.0beta6-bin**"则是编译好的二进制版本,通常...

    配合《带有sphinx搜索功能的yii2框架实例》的资源

    在《带有sphinx搜索功能的yii2框架实例》这本书中,作者可能详细介绍了如何在Yii2框架中配置和使用Sphinx或CoreSeek。这可能包括以下步骤: 1. **安装与配置**:首先,你需要在服务器上安装Sphinx或CoreSeek,然后...

    alabaster, 轻量级,可以配置的Sphinx主题现在,Sphinx默认 !.zip

    alabaster, 轻量级,可以配置的Sphinx主题现在,Sphinx默认 ! Alabaster?雪花是一个可视化的( c ) 精简,响应性,可以配置的主题,用于 Sphinx的文档系统。 兼容 python 2 3兼容。它作为第三方主题开始,仍然独立...

    pocketsphinx-go:用于Golang的CMU PocketSphinx,一种轻量级的语音识别引擎

    CMUSphinx for Golang 介绍 收集了20多年的CMU研究。 所有优点都很难列举,仅举几例: 先进的语音识别算法,可进行有效的语音... 首先,通过框架,我只需几个小时的配置调整就可以创建与Pocketsphinx核心库和sphinxb

    基于Sphinx+MySQL的千万级数据全文检索

    【基于Sphinx+MySQL的千万级数据全文检索】的架构设计着重解决大数据量下的高效全文检索问题。Sphinx是一款源自俄罗斯的开源全文搜索引擎,它在处理海量数据时表现出极高的性能和可扩展性。在DELL PowerEdge 6850...

    数据库 搜索引擎 sphinx

    Sphinx的核心特性包括实时索引、近实时搜索以及高度可扩展性,使得它在处理大数据量时表现优异。 1. **全文检索**: Sphinx支持对文本进行全文检索,能对文本内容进行分词、建立索引,从而在用户输入查询时提供相关...

    php 搜索Sphinx

    Sphinx作为一种高性能的全文检索引擎,为大数据量的搜索提供了强有力的解决方案。结合PHP语言的强大功能,开发者可以轻松构建高效、灵活的搜索系统,满足各种复杂场景下的搜索需求。无论是企业级应用还是个人项目,...

    PHP搜索引擎Sphinx使用教程.zip

    1. **Sphinx搜索引擎**:Sphinx是一款独立的、高性能的全文检索引擎,支持实时索引和千万级数据量的搜索。它的主要特点包括快速的全文索引、准确定位结果、丰富的排序方式以及对多种数据库的支持,如MySQL和...

    pocketsphinx-android-demo资源包

    Pocketsphinx以其轻量级和高效的特点,被广泛应用于嵌入式系统和移动设备中。它支持命令词识别,即用户可以预先设定一组关键词,Pocketsphinx会实时监听并识别这些关键词,无需完整的语句。 二、Pocketsphinx在...

    sphinx中文包zh-CN.zip

    Pocketsphinx是Sphinx的一个轻量级版本,适用于移动设备和嵌入式系统,它在处理实时语音识别方面表现出色。 1. **Sphinx基础知识**: - **语音识别原理**:Sphinx采用 Hidden Markov Model (HMM) 理论,通过识别...

    (源码)基于C++和Sphinx框架的云搜索系统.zip

    # 基于C++和Sphinx框架的云搜索系统 ## 项目简介 本项目是一个基于C++和Sphinx框架的云搜索系统,旨在为产品内部提供高效的搜索和搜索建议功能。系统支持实时索引、快速建库、快速查询和超大数据处理,适用于云城...

    java 整合 sphinx

    Java整合Sphinx主要涉及到的是在Java应用程序中使用Sphinx搜索引擎进行数据检索的技术。Sphinx是一款高性能、全文搜索引擎服务器,常用于构建实时的、基于全文的搜索功能。它提供了丰富的API和多种语言的客户端库,...

    pocketsphinx在windows下的中文语音识别Demo

    Pocketsphinx是一个轻量级的语音识别引擎,尤其适用于嵌入式系统,由Carnegie Mellon University开发,并且是CMU Sphinx语音识别工具包的一部分。 描述中的链接是一个CSDN博客文章,虽然具体内容未给出,但可以推测...

    用Sphinx搭建MySQL中文全文搜索

    这时,我们可以借助第三方工具如Sphinx来增强MySQL的全文检索能力,实现高效且精准的中文搜索。本文将详细介绍如何使用Sphinx搭建MySQL的中文全文搜索。 首先,Sphinx是一个开源的全文搜索引擎,它的设计目标是提供...

    php7的sphinx扩展,适用linux,mac

    在PHP开发环境中,Sphinx是一个强大的全文搜索引擎库,它提供了高效、可定制的搜索功能,广泛应用于数据分析和网站内容检索。对于PHP7来说,Sphinx的扩展使得开发者能够轻松地在PHP应用程序中集成全文搜索。本文将...

    sphinx中文语音训练手册

    2)解压Sphinx中除sphinx4-1.0beta6-bin.zip外的压缩文件到d:\sphinxtrain下 3)安装audacity-win-2.0.3rc1.zip和FairStars.zip 4)安装UltraEdit-32.rar(绿色,解压即可) 5.2 准备文本语料 这里需要使用我们提供的...

Global site tag (gtag.js) - Google Analytics