文档章节

关于全文搜索的技术方案

0-1
 0-1
发布于 2014/06/24 17:58
字数 1710
阅读 553
收藏 20
点赞 1
评论 2

一、 MySQL FULLTEXT

1.   介绍: Fulltext是全文索引,mysql支持英文的全文索引(通过寻找某些分隔符来确定单词的起         始位置和结束位置),是mysql的一部分,如果需要建立中文的全文索引需要安装插件。

2.   使用:

     CREATE TABLE 时或之后使用 ALTER TABLE CREATE INDEX CHARVARCHAR 或          TEXT 列上创建。全文搜索时通过 MATCH() 函数完成。

3.   优点: Mysql自带,实现简单

4.   缺点: 仅支持MyISAM引擎表;对中文支持差;效率可能一般;

5.   参考:

    MySQL 英文全文搜索和中文全文搜索

          http://blog.sina.com.cn/s/blog_4b3c9085010005hd.html

    MySQL Ver5.1全文搜索官方手册

                http://dev.mysql.com/doc/refman/5.1/zh/functions.html#fulltext-search

6.   补充: 如果是英语系,可以考虑直接使用?

7.   加分词插件?

 >> 我们用的Innodb存储引擎,排除。

二、 Lucene/Solr

1.   介绍:Lucene是一套用于全文检索搜寻开放源码程式库,近几年最受欢迎的免费Java资讯        检索程式库。Solr - 使用Lucene的企业搜索服务器。

2.   使用:安装jdk, tomcat等环境;

3.   优点:开箱即用;对任何文件建立索引进行搜索,速度快; 使用的人多;配置等比较灵活;

4.   缺点:实现比较复杂, 不支持JAVA以外的API?;索引难维护;

5.   参考:http://lucene.apache.org/

6.   推荐书籍:《Lucene IN ACTION

 >> 该方案需要JAVA同事搭建一个通用的搜索引擎,并提供接口。 看项目整体架构设计了。


三、 Sphinx(SQL Phrase Index)/ Coreseek/SphinxSE

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

     CoreseekSphinx的本地化版本,开源的中文检索/搜索引擎。

     SphinxSE是一个可以编译进MySQL 5.x版本的MySQL存储引擎,它利用了该版本MySQL的插件式体系结构。它其实是一个允许MySQL服务器与searchd交互并获取搜索结果的嵌入式客户端。所有的索引和搜索都发生在MySQL之外。
显然,SphinxSE的适用于:
使将MySQL FTS 应用程序移植到Sphinx;
使没有Sphinx API的那些语言也可以使用Sphinx;
当需要在MySQL端对Sphinx结果集做额外处理(例如对原始文档表做JOIN,MySQL端的额外过滤等等)时提供优化。http://www.coreseek.cn/products-install/sphinxse/

     2.   使用:网上文档和资料很多。

     3.   优点:开发源码为C/C++;MYSQL POSTGRES集成的非常好, 支持原生的          mysql/xml/python等数据源;应用的人多;性能还不错;

     4.   缺点:索引的实时更新不如lucene(新版有提高);功能不如lucene强大;

               SphinxSE需要对Mysql源码重编译;

     5.   参考:

         Coreseek官网                   

              http://www.coreseek.cn/opensource/Sphinx/

         Sphinx+Mysql+中文分词安装-实现中文全文搜索

       http://blog.csdn.net/lgm252008/article/details/5373436 

   与luceneMySQL's full-text search的比较

           http://stackoverflow.com/questions/737275/comparison-of-full-text-search-engine-lucene-sphinx-postgresql-mysql

   推荐:基于Sphinx+MySQL的千万级数据全文检索(搜索引擎)架构设计[原创] by 张宴

>> 可以考虑,已安装测试中。

四、 Xunsearch

1.   http://www.xunsearch.com/

2.   只提供PHPAPI,不考虑。主要为hightman(scws中文分词作者)个人开发贡献。

3.   比较

>> PHP专属,不考虑。

五、 Clucene

1.   介绍:C++版的全文检索引擎,完全移植于Lucene(通过修改Java的代码改编),采用 STL 编写。有php扩展,对中文支持不是很好。

2.   缺点:比较非主流..; 若干年未更新,使用人很少;

3.   参考:http://sourceforge.net/projects/clucene/files/   源码

            http://clucene.sourceforge.net/doc/html/files.html  api文档

>> 没更新,没人用,不考虑

六、 Xapian

1.   介绍:Xapian是一个用C++编写的全文检索程序,他的作用类似于Javalucene。尽管在Java世界lucene已经是标准的全文检索程序,但是C/C++世界并没有相应的工具,而Xapian则填补了这个缺憾。

2.   使用:个优秀的开源搜索引擎项目。上述xunsearch的后台索引设计就是基于Xapian和          scws中文分词。

3.   优点:原生的C++编程接口;性能和Lucene不会差太多;可扩展性强;

4.   缺点:工程大,资料少; 应用人群少;主要是怕短期搞不定。。;

5.   参考:http://xapian.org/

              利用Xapian构建自己的搜索引擎: http://www.oschina.net/question/11_7280

      >> 短期难度大,需投入较多人力研究和验证, 暂不考虑。

//==============================网友评论摘录 Lucene  VS  Sphinx =======================

    选择Lucene,基于以下几点:
1.Sphinx
MySQL是基于数据库的全文引擎,创建索引是B+树和hash key-value的方式。而Lucene使用的倒排序索引,即每个词与包含这个词的文件形成对应关系。这样对于搜索文档,显然倒排序索引快。
2.Lucene
除了索引功能,还提供文件格式识别(并建立索引)、分词(以前用的版本只有英文、德文等欧洲的语言)、评分算法(依据此结果排序)、多种搜索方式(组合、模糊、正则等)、搜索词高亮显示等诸多功能。
3.
C/SB/S方式分别提供支持。
4.Lucene
提供多种语言开发的版本,如:C++JavaC#RubyPython等。 ???
5.
提供扩展接口,方便功能扩展。

选择sphinx

支持高速建立索引(可达10MB/秒,而Lucene建立索引的速度是1.8MB/秒)

高性能搜索(在2-4 GB的文本上搜索,平均0.1秒内获得结果)
高扩展性(实测最高可对100GB的文本建立索引,单一索引可包含1亿条记录)
支持分布式检索
支持基于短语和基于统计的复合结果排序机制
支持任意数量的文件字段(数值属性或全文检索属性)
支持不同的搜索模式(完全匹配短语匹配任一匹配
支持作为Mysql的存储引擎(可以只改变sql就能实现全文搜索)
coreseek
就是基于sphinx实现的开源中文检索引擎

 如果是用php作服务器端脚本,最好还是用sphinx。如果用java做服务器端脚本,lucenesphinx相比lucene,配置简单,易用,功能没有lucene完善和强大。【服务端用C++的比较纠结 .. 】

 

© 著作权归作者所有

共有 人打赏支持
0-1

0-1

粉丝 92
博文 246
码字总数 145989
作品 0
福州
程序员
加载中

评论(2)

0-1
0-1
现在改成由JAVA同事开发设计一个通用和独立的搜索引擎(不访问业务DB),各业务主动讲相关信息(批量,延时,实时?)推送给该引擎建立索引和数据( 每日主索引更新+定时增量索引更新(data 置于/dev/shm) ), 至于客户端通过业务服转发获取搜索结果还是直接访问搜索服,这个待定。
0-1
0-1
目前方案是在考虑Sphinx/Coreseek + libsphinxclient + Mysql(SphinxSE),快速应用实验。
DKH大数据整体解决方案的优势介绍

大数据技术的发展与应用已经在深刻地改变和影响我们的日常生活与工作,可以预见的是在大数据提升为国家战略层面后,未来的几年里大数据技术将会被更多的行业应用。 相信很多人对于大数据技术...

adnb34g ⋅ 05/18 ⋅ 0

打算搞个在线文档管理工具

一直在为团队寻找一款开源的文档管理工具(部署在我们自己的服务器上),用途主要有两个: 产品和研发编写文档,方便日后解决问题和新人培训 面向公司其他部门的一个QA平台 我希望它拥有的功...

testglory ⋅ 2017/05/17 ⋅ 0

微信手机端的本地数据全文检索优化之路

本文由微信团队原创分享,转自 WeMobileDev,感谢原作者。 1、前言 基于本地数据的全文搜索(Full-Text-Search,FTS)在移动应用上扮演着重要的角色。与基于服务端提供的搜索服务不同,移动端...

JackJiang2011 ⋅ 2017/10/18 ⋅ 0

Elasticsearch:准确值与全文本

概括地说,Elasticsearch将数据分成两类:准确值(Exact values)和全文本(Full text)。 准确值就是它们听上去的那样。诸如日期或用户ID。当然字符串也可以是准确值,如用户名或邮件地址。...

翟志军 ⋅ 2015/05/28 ⋅ 4

利用PostgreSQL实现毫秒级全文检索

Lateral是一家内容推荐服务提供商,其模拟程序使用PostgreSQL存储文档。每个文档包含一个 text列和一个存储标题、日期和URL等元数据的JSON列。他们希望为模拟程序创建快速搜索功能,搜索文档...

Yamazaki ⋅ 2015/08/04 ⋅ 0

微信全文搜索优化之路

欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者: jiaminchen,微信终端开发团队的一员 本文首次发表在《程序员》杂志 2017 年 09 月期。 前言 基于本地数据的全文搜索(...

⋅ 2017/12/18 ⋅ 0

关于用Java实现在线wiki系统

很想用Java开发一个Wiki(登录、搜索、编辑,本来想着挺简单),主要想借此探索一直想要学习的技术,遇到几个难点: 考虑集群环境(其实没有接触过,但总要有第一次嘛); 数据库存储还是文件...

中场三分 ⋅ 2014/05/16 ⋅ 1

译:Hibernate Search - Getting started(Chapter 2)

Getting started with Hibernate Search 本章内容包括: ■ 什么是 Hibernate Search? ■ 如何建立和配置 Hibernate Search ■ 领域模型映射简介 ■ 数据索引简介 ■ 全文查询简介 ■ 如何使...

cwalet ⋅ 2012/06/01 ⋅ 0

搜索引擎选型调研文档

Elasticsearch简介* Elasticsearch是一个实时的分布式搜索和分析引擎。它可以帮助你用前所未有的速度去处理大规模数据。 它可以用于全文搜索,结构化搜索以及分析,当然你也可以将这三者进行...

看看这天 ⋅ 2016/04/05 ⋅ 0

搜索引擎选择: Elasticsearch与Solr

搜索引擎选型调研文档 Elasticsearch简介* Elasticsearch是一个实时的分布式搜索和分析引擎。它可以帮助你用前所未有的速度去处理大规模数据。 它可以用于全文搜索,结构化搜索以及分析,当然...

开源中国首席码农 ⋅ 2016/11/15 ⋅ 4

没有更多内容

加载失败,请刷新页面

加载更多

下一页

聊聊spring cloud gateway的LoadBalancerClientFilter

序 本文主要研究一下spring cloud gateway的LoadBalancerClientFilter GatewayLoadBalancerClientAutoConfiguration spring-cloud-gateway-core-2.0.0.RELEASE-sources.jar!/org/springfram......

go4it ⋅ 43分钟前 ⋅ 0

详解:Nginx反代实现Kibana登录认证功能

Kibana 5.5 版后,已不支持认证功能,也就是说,直接打开页面就能管理,想想都不安全,不过官方提供了 X-Pack 认证,但有时间限制。毕竟X-Pack是商业版。 下面我将操作如何使用Nginx反向代理...

问题终结者 ⋅ 49分钟前 ⋅ 0

002、nginx配置虚拟主机

一、nginx配置虚拟主机可分为三种方式,分别为: 1、基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站 2、基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站...

北岩 ⋅ 52分钟前 ⋅ 0

shell脚本之死循环写法

最近在学习写shell脚本,在练习if while等流程控制时,突然它们的死循环写法是怎么样的?经过百度与亲测记录如下: for死循环 #! /bin/bashfor ((;;));do date sleep 1d...

hensemlee ⋅ 55分钟前 ⋅ 0

苹果的ARKit2.0有多可怕,看了就知道

序言 ARKit主要由三部分组成: 跟踪(Tracking) 跟踪是ARKit的核心组件之一,其提供了设备在物理世界中的位置与方向信息,并对物体进行跟踪,如人脸。 2.场景理解(Scene Understanding) 场...

_小迷糊 ⋅ 56分钟前 ⋅ 0

5.1 vim介绍 5.2 vim移动光标 5.3 ,5.4vim一般模式下移动光标,复制粘贴

vim命令 vim是vi的一个升级版;vim可以显示文字的颜色 安装vim这一个包vim-enhanced 如果不知道安装包,可以使用 命令下面命令来查看vim命令是那个包安装的。 [root@linux-128 ~]# yum prov...

Linux_老吴 ⋅ 59分钟前 ⋅ 0

vim一般模式

vim 是什么 vim是什么 ? 在之前接触Linux,编辑网卡配置文件的时候我们用过了vi ,vim简单说就是vi的升级版,它跟vi一样是Linux系统中的一个文本编辑工具。 如果系统中没有vim ,需要安装一...

李超小牛子 ⋅ 今天 ⋅ 0

docker实战

构建企业级Docker虚拟化平台实战 重点剖析虚拟化和云计算概念; 分析Docker虚拟化的概念和原理; 从0开始实战Docker虚拟化平台; 基于Docker构建Nginx WEB服务器和CentOS虚拟机; 基于开源监...

寰宇01 ⋅ 今天 ⋅ 0

vim介绍、vim颜色显示和移动光标、vim一般模式下移动光标、一般模式下复制粘贴剪切

VIM Vim 是 UNIX 文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff),语法高亮,全面的帮助系统,本地脚本(Vimscript),和便于选择的...

蛋黄Yolks ⋅ 今天 ⋅ 0

springboot+mockito测试controller层遇到的问题

使用MockitoJUnitRunner测试的一个例子,原来报错无法找到bean, 类似的异常如下:createBeanError..... 原因:是因为@Runwith使用了SpringRunner,应该修改为MockitoJUnitRunner 代码如下: ...

writeademo ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部