mysqlmysql 全文检索 中文,切词的方法,该如何处理

基于MySQL全文检索引擎—sphinx
sphinx全文检索
(1)全文检索简介
1.1 数据分类
生活中的数据总体分为
①.结构化数据: 指具有固定格式或有限长度的数据,如数据库(int char),元数据等。
②.非结构化数据: 指没有固定格式或不定长的数据。如文本文档,text型数据,varchar型数据,word文档等。
非结构化数据还有一种叫法:全文数据
1.2搜索的分类
按数据的分类,搜索也分为两种:
①.对结构化数据的搜索如语句、文件名的搜索
②.对非结构化数据的搜索下的,对文章关键字的搜索。
对非结构化数据的搜索也叫对全文数据的搜索,即全文搜索。
1.3 全文搜索的方法
①.顺序扫描:如要找的内容包含某个字符串,会一个文档一个文档的从头到尾的找,如Like查找。
②.索引扫描:把非结构的数据中的内容(一般是单词、词组)提取出来一部分重新组织,让它变得有结构化,这部分我们提取出来的数据就叫做索引。(sphinx的工作内容)
1.3sphinx简介
sphinx是SQL phrase index(查询词组索引)的缩写,是一个基于SQL的全文检索引擎
sphinx 全文检索,不支持中文分词,不支持nosql数据库
Coreseek技术中文分词
sphinx+coreseek:支持中文的全文检索引擎
sphinx的优缺点:
mysql的全文索引full text和sphinx的区别
1.4 sphinx检索过程
[1]形成索引表
sphinx将原文本text,经过自己的分词(语句分为单词),将分词和原文本的id对应,形成一个索引表
原文本的id:表的字段,主键
文本:表的字段,text格式
sphinx分词后形成的索引结构图,如下(左边的为形成的索引、右边为原文本内容)
文本的id号
sphinx形成索引过程
1.将mysql内的文档(text格式)传给分词组件(Tokenizer)
2.分词组件将语句拆分,去除一些无用的词,形成词元,并传给语言处理组件
3.语言处理组件将得到的词元,经过处理(过去式转换、复数词转换等),和筛选(去重..)得到词,传给索引组件
4.索引组件生成索引(词 文本id)
sphinx形成索引过程图例
①.先准备文本文档
②.将原文本文档提交给分词组件
③.将词元传递给语言组件
④.将词传递给索引组件形成索引
注:最终形成的完整的索引格式为
文档频率 词频
文档频率:总共有多少文档出现过该词
词频:词在文档出现的次数
[2]搜索索引
搜索索引就是得到用户的查询请求,搜索创建的索引,然后返回结果的过程
搜索索引分步骤
①.用户输入查询语句
②.对查询语句进行词法分析,语法分析,及语言处理(对查询的搜索语句也进行了分词处理,比如:lamp linux进行分词后,会在索引搜索lamp和linux两个词)
③.搜索索引,得到符合语法树的文档
④.根据文档和查询语句的相关性,对结果进行排序(由匹配到的词,得到文档id,再执行SQL语句:where id=查询到的文档id 即可得到该文档的数据记录)
1.5sphinx创建索引和索引搜索总结
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!使用Coreseek-4.1快速搭建Sphinx中文分词 Php-Mysql 全文检索 搜索引擎 - 为程序员服务
使用Coreseek-4.1快速搭建Sphinx中文分词 Php-Mysql 全文检索 搜索引擎
CentOS-6.4 安装 Coreseek-4.1 使用 Sphinx 提升项目搜索功能的性能
本文只讲解如何在linux下使用:
安装Croeseek-4.1
yum -y install glibc-common libtool autoconf automake mysql-devel expat-devel
#如果不安装这个 可能下面 sh buildconf.sh会报错!!!
cd /data/src
tar -xjf ../software/autoconf-2.64.tar.bz2
cd autoconf-2.64/
./configure
make && make install
cd /data/software
wget http://www.coreseek.cn/uploads/csft/4.0/coreseek-4.1-beta.tar.gz
cd /data/src
tar zxf ../software/coreseek-4.1-beta.tar.gz
cd coreseek-4.1-beta/mmseg-3.2.14
./bootstrap
./configure --prefix=/usr/local/mmseg3
make && make install
cd /data/src/coreseek-4.1-beta/csft-4.1/
sh buildconf.sh
./configure --prefix=/usr/local/coreseek
--without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --without-mysql
make && make install
##测试mmseg分词,coreseek搜索(需要预先设置好字符集为zh_CN.UTF-8,确保正确显示中文)
cd testpack
cat var/test/test.xml
#此时应该正确显示中文
/usr/local/mmseg3/bin/mmseg -d /usr/local/mmseg3/etc var/test/test.xml
/usr/local/coreseek/bin/indexer -c etc/csft.conf --all
/usr/local/coreseek/bin/search -c etc/csft.conf 网络搜索
#创建sphinx创建索引的脚本:
mkdir -p /data/sh/other
设置Sphinx更新索引bash脚本
vi /data/sh/other/sphinx_update_index.sh
#!/bin/bash
CONFFILE=/usr/local/coreseek/etc/sphinx_index.conf
/bin/sed s#var\/data\/#var\/data2\/#g ${CONFFILE} > ${CONFFILE}.2
mkdir -p /usr/local/coreseek/var/data2
#/usr/local/coreseek/bin/indexer --config ${CONFFILE}.2 --all --rotate
/usr/local/coreseek/bin/indexer --config ${CONFFILE}.2 --all
pkill -9 searchd
/bin/rm -rf /usr/local/coreseek/var/data/
/bin/mv /usr/local/coreseek/var/data2/ /usr/local/coreseek/var/data/
/usr/local/coreseek/bin/searchd --config ${CONFFILE}
记得设置执行权限
chmod 755 /data/sh/other/sphinx_update_index.sh
配置Sphinx索引源参数配置
################################### PHPCMS ############################################
source cc_phpcms
type = mysql
sql_host = 172.26.11.75
#此处请改成您的真实配置
sql_user = phpcms
#此处请改成您的真实配置
sql_pass = 123456
#此处请改成您的真实配置
sql_db = phpcms
#此处请改成您的真实配置
sql_port= 3306
#此处请改成您的真实配置
sql_query_pre = SET SESSION query_cache_type=OFF
sql_query_pre = SET character_set_client = 'gbk'
sql_query_pre = SET character_set_connection ='gbk'
sql_query_pre = SET character_set_results ='utf8'
sql_query = SELECT `id`,`catid`,`typeid`,`title`,`status`,`updatetime` from `i_news` #此处请改成您的真实配置
sql_range_step
sql_attr_timestamp
= updatetime
sql_attr_uint
sql_attr_uint
sql_attr_uint
sql_query_post
sql_ranged_throttle= 0
index cc_phpcms
= cc_phpcms
= /dev/shm/cc_phpcms
#放这里比较好,因为这里是linux的内存区!
enable_star
morphology
min_word_len
charset_dictpath = /usr/local/mmseg3/etc/
charset_type
= zh_cn.utf-8
html_strip = 1
html_remove_elements = style, script
html_index_attrs = img=alt, a=
#################################### SETTING ############################################
= 9306:mysql41
= /usr/local/coreseek/var/log/searchd.log
= /usr/local/coreseek/var/log/query.log
read_timeout
max_children
= /usr/local/coreseek/var/log/searchd.pid
max_matches
seamless_rotate
接下来实现数据源支持:让Sphinx支持MySQL数据源
yum -y install mysql-devel libxml2-devel expat-devel
cd /data/src/coreseek-4.1-beta/csft-4.1/
make clean
sh buildconf.sh
./configure --prefix=/usr/local/coreseek
--without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql
make && make install
如果出现错误提示:“ERROR: cannot find MySQL include files…….To disable MySQL support, use –without-mysql option.“,可按照如下方法处理:
请找到头文件mysql.h所在的目录,一般是/usr/local/mysql/include,请替换为实际的
请找到库文件libmysqlclient.a所在的目录,一般是/usr/local/mysql/lib,请替换为实际的
onfigure参数加上:–with-mysql-includes=/usr/local/mysql/include –with-mysql-libs=/usr/local/mysql/lib,执行后,重新编译安装
#跑sphinx服务脚本
/data/sh/other/sphinx_update_index.sh
如果一切正常,将会顺利看到创建索引的信息如下:
[caption id="attachment_1192" align="alignnone" width="620"] 使用Coreseek-4.1快速搭建Sphinx中文分词 Php-Mysql 全文检索 搜索引擎[/caption]
/data/sh/other/sphinx_update_index.sh 跑了一次后,
vi /data/sh/other/sphinx_update_index.sh
#/usr/local/coreseek/bin/indexer --config ${CONFFILE}.2 --all --rotate
/usr/local/coreseek/bin/indexer --config ${CONFFILE}.2 --all
/usr/local/coreseek/bin/indexer --config ${CONFFILE}.2 --all --rotate
#/usr/local/coreseek/bin/indexer --config ${CONFFILE}.2 --all
也就是将注释调换,这样以后就可以设定个定时计划跑/data/sh/other/sphinx_update_index.sh 脚本了,跑了/sphinx_update_index.sh 脚本后,自动会用–rotate的方式重建索引,也就是说新增加的内容也将会被索引到了。
走过的路,流过的泪
原文地址:, 感谢原作者分享。
您可能感兴趣的代码mysql 的中文全文搜索,关于分词,有没有好的解决方案_百度知道
mysql 的中文全文搜索,关于分词,有没有好的解决方案
我有更好的答案
别用mysql直接做,效率差,实现也麻烦。我实践过一个失败的项目,做出来了功能与效率都没预期的好。java+lucense+中文分词词库+mysql全文索引。有人专门做过,全文索引的中间件,叫phinux。找这种组件做。
采纳率:84%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。PHP+MYSQL 简单实现中文分词全文索引 - A5创业网
扫一扫,联系编辑获得审核机会
符合以下要求,获得报道机会
1. 新公司求报道
2. 好项目求报道
3. 服务商求报道
4. 投资融资爆料
客服热线:400-995-7855
当前位置:&&&
PHP+MYSQL 简单实现中文分词全文索引
& 06:35&&来源:&
  相信很多人都研究过MYSQL的中文全文索引问题,目前MYSQL不支持中文全文索引,无奈~~~
  网上找了N多关于PHP+MYSQL中文全文索引的文章都没有一个好用的,对于一般的菜鸟根本不知道怎么使用,PHP中文分词有DDEDE的,DEDE的词库不是很强大,还算可以用吧!
  还有一个是《SCWS - 简易中文分词系统》这个目前对于一般菜鸟根本不知道怎么用,虽然有人编译了Windows版的,但安装还是挺麻烦的,我尚未测试过!
  //==========================
  废话不多说了,首先去DEDE下载分词算法函数和词库;下载地址:http://www.dedecms.com/html/chanpinxiazai/.html
  里面有详细的使用说明,我在这里举一个使用的例子;
  MYSQL表名:music
  字段:title,tag
  require(&lib_splitword_full.php&);
  $str = &这里是你要分词的内容,一般不要超过1024KB会好一点,否则会很慢!&;
  $sp = new SplitWord();//实例化
  $dd = explode(& &,$sp-&SplitRMM($str));
  foreach ($dd as $key=&$var) {
  if (strlen($var)&2)//UTF8编码的请设置为3,因为UTF8编码的中文一般为3个字节以上,过滤单个字不保存!
  $str.=base64_encode($var).& &;//由于MYSQL不支持中文全文索引,所以在分词中我们必须把词转换成字母或者数字,这里我选择了base64编码
  //当然大家还可以把中文转成区码,但我测试过区码的方法,感觉很一般,所以在这样我推荐大家使用base64
  if ($i&=50)//这里是设置你要存储多少个词组,如果是文章可能会有N多词组,你可以设置大一点,但如果你对标题分词的话,50个已经足够了!
  //这样运行未编码得出来的结果:这里 分词 内容 一般 不要 超过 1024KB 一点 否则
  //base64编码后的结果:1eLA7w== t9a0yg== xNrI3Q== 0ruw4w== srvSqg== s6y5/Q== MTAyNEtC 0ru14w== t/HU8g==
  这样我们就可以把分好词而且转换成编码的分词存进 tag 字段了,当然tag字段必须设置成全文索引 full text 而且数据表类型必须为MyISAM。
  tag字段数据类型为CHAR和VARCHAR、text,有关如何创建MYSQL全文索引,大家可以搜索一下《mysql创建索引》遍地开花,到处都是!
  下面的例子是根据TAG字段的内容进行全文索引查询:
  include(&Mysql.class.php&);
  $rs = $DB-&get_one(&select title,tag from music where id=$id&);//根据ID读取title和tag字段内容
  $title = $rs['title'];
  $sql = $DB-&query(&select title,MATCH(tag) AGAINST('&.trim($rs['tag']).&' IN BOOLEAN MODE) AS score from music where MATCH(tag) AGAINST('&.trim($rs['tag']).&' IN BOOLEAN MODE) ORDER BY score DESC limit 21&);//这里是查询20条相似的内容,而且按相似的排序,21是因为同一条记录都会匹配出来!
  while ($rs = $DB-&fetch_array($sql))
  if ($rs['title']!=$title)
  echo $rs['title'].&&;
  $DB-&close();
  如果大家想看效果可以到我的小站看演示:http://www.dj965.com
  以上的例子就实现了PHP+MYSQL简单的中文分词全文索引!
  希望对跟我一样的菜鸟有一定的帮助吧!
  本人BLOG:
扫一扫关注A5创业网公众号
责任编辑:编辑部&&&/&&&作者:牛仔
对于普通客户来说,建站的时候服务商的报价多少会多多少少影响客户的判断,客户在选择建站时对一些报价选项犹豫不决,而对于客户来说网站服务器视乎是个可有可无的东西,但是如果要进行高品质的建站,没有稳定的服务器是不行的。
前面我们已经讲述了《新手搭建DEDE织梦网站的详细操作流程》及《DEDECMS织梦网站的备份与上传空间操作流程》等。今天小编就在这给大家详细讲述一下织梦网站的首页仿制实战操作流程,希望能够帮助你快速掌握织梦网站的制作方法。
深圳处于互联网的最前沿,互联网意识非常普及,需求营造了市场,深圳网站建设公司因此而普遍,很多建站公司由于缺乏实力,缺乏专业团队,为了获得企业的关注,在宣传方面,经常会发布一些不实的广告,散发出一些诱导的信息,企业不懂得甄别,很容易被忽悠。
说到模板建站,可能会有很多用户和站长不太喜欢,认为模板建站会不利于SEO优化,所以想选择定制建站而不选择模板建站,但是,模板建站真的不利于SEO吗?
截止2018年5月底,已有超过50万的中小企业与个人选择米拓模板建站,那到底是什么原因导致米拓模板成为那么多人的建站首选呢?1、成本低。2、模板高端。3、方便快捷。4、有行业特性。5、操作简单。
成千上万的电子商务网站在各行各业满地开花,随之而来的网站制作也是热火朝天,各式各样的功能性网站、视觉系网站层出不穷。没有一个好的网站制作,网站便会默默无闻的沉静在网络当中。那么我们应该如何的将电子商务网站制作的让人眼前一亮,甚至是百里挑一呢?
如今,独立电商网站变得如火如荼,并且随着现代人的消费者习惯的改变,也有许多的企业需要进行独立电商网站部署来应对互联网,以此来获得一席之地。在快速发展的互联网时代,制作独立电商网站还需要对市场态势有一定的了解,下面跟着数商云小编一起来看看吧。
有人说,搭建网站或网店需要策划、设计、技术等人员,后期还要专人维护,实在成本太高,不愿意尝试。但如果现在能一站式免去这些繁琐步骤和人力成本,你还会犹豫吗?西部数码云建站,是用户快速搭建成品网站或网店的不二神器!
近年来,信息化成为了各行业讨论和热议的焦点,信息化不仅可以提升工作效率降低运营成本,还有助行业企业未来更好的发展。以建筑施工企业为例。周转材料管理是建筑项目施工管理的重要组成部分,管理的好坏直接影响到项目安全、质量、供应、进度、施工形象等,也是项目创效挖潜的主要手段。
圣辉友联网站建设公司是一家有十年建站经验的老牌网站建设公司,总部在北京5A级搜宝商务中心写字楼,先后在天津、石家庄、衡水、保定分别成立分公司,服务过上千家企事业单位。
创业好项目
写了4年多博客 我选择了从头再来
扫描二维码关注A5创业网了解最新创业资讯服务
&徐州八方网络科技有限公司&版权所有&
举报投诉邮箱:
扫一扫关注最新创业资讯PHP+MYSQL+SCWS 做自己的站内搜索引擎_SQL技巧_动态网站制作指南
PHP+MYSQL+SCWS 做自己的站内搜索引擎
来源:人气:404
?cx=:pf5fnahnzuw&cof=FORID:11&ie=UTF-8&q=危机&sa=搜索&siteurl=lusongsong.com/&
优点: 省心,没有比这个再省心的了.你啥都不用管.谷歌都是自家的了,人家的搜索算法,那怎么是咱们能比得了的呢.&
缺点: 1.需要使用IFRAME,或者直接打开谷歌的页面,或者用更复杂的API来实现. 2.只能按照文本搜索,只能全站搜索.我要想在某个频道下,搜索指定类型的文章等要求谷歌就不能实现了.一句话,就是不能自定义. 3.如果你的网站小,谷歌人家都不带收录你,啥也搜不出来你咋办?&
(三) lucene 全世界最好的开放源代码搜索引擎&
呃…没啥好介绍的,直接看优缺点吧&
优点: 完全开放源代码,完全可以自定义,完全…..
缺点: 写的,哥不会.你会java?你改个试试&
(四) ++SCWS 做自己的站内搜索引擎&
千呼万唤始出来!&
MySQL支持全文索引和搜索。全文索引在 MySQL 中是一个 FULLTEXT 类型索引。FULLTEXT 索引用于 MyISAM 表,可以在 CREATE TABLE 时或之后使用 ALTER TABLE 或 CREATE INDEX 在 CHAR、VARCHAR 或 TEXT 列上创建。&
函数 MATCH() 对照一个文本集(包含在一个 FULLTEXT 索引中的一个或多个列的列集)执行一个自然语言搜索一个字符串。搜索字符串做为 AGAINST() 的参数被给定。搜索以忽略字母大小写的方式执行。对于表中的每个记录行,MATCH() 返回一个相关性值。即,在搜索字符串与记录行在 MATCH() 列表中指定的列的文本之间的相似性尺度。&
当 MATCH() 被使用在一个 WHERE 子句中时,返回的记录行被自动地以相关性从高到低的次序排序。相关性值是非负的浮点数字。零相关性意味着不相似。&
在英语环境下,使用PHP和MYSQL就完全能够建立全文检索环境.步骤为:&
1. 建立内容表,灌入数据,在需要全文检索的字段上建立FULLTEXT索引&
2. 利用MATCH函数执行搜索条件&
3. 处理返回的数据,显示结果&
简单吧。。。&
问题是,中文不是自分词的语言,在MYSQL开来一大段中文就是一个单词,全文检索就失效了.解决这个问题的办法是,在灌入数据和搜索前,利用其他的工具来进行分词,将大段的中文分隔为一个一个的词,类似与英文的单词.&
最简单的工具就是SCWS. 官方站点: http://www.ftphp.com/scws/&
SCWS 是 Simple Chinese s Segmentation 的缩写,即简易中文分词系统。&
这是一套基于词频词典的机械中文分词引擎,它能将一整段的汉字基本正确的切分成词。词是汉语的基本语素单位,而书写的时候不像英语会在词之间用空格分开,所以如何准确而又快速的分词一直是中文分词的攻关难点。&
SCWS 在概念上并无创新成分,采用的是自行采集的词频词典,并辅以一定程度上的专有名称、人名、地名、数字年代等规则集,经小范围测试大概准确率在 90% ~ 95% 之间,已能基本满足一些中小型搜索引擎、关键字提取等场合运用。 SCWS 采用纯 C 代码开发,以
Unix-Like OS 为主要平台环境,提供共享函数库,方便植入各种现有软件系统。此外它支持 GBK,UTF-8,BIG5 等汉字编码,切词效率高。&
SCWS提供了纯PHP代码编写的中文分词类,使它不需要做任何额外的扩展就能在机会所有的服务器上使用.&
支持中文的基于PHP+MYSQL的全文检索的步骤为:&
1. 建立内容表(,将数据分词),灌入数据,在需要全文检索的字段上建立FULLTEXT索引&
2. (将要搜索的内容先分词再) 利用MATCH函数执行搜索条件&
3. 处理返回的数据,显示结果&
仍然是SO EASY!&
一个演示的例子: http://www.bnet.com.cn/files/search.php?word=%CA%D5%B9%BA&page=3&
执行搜索的语句是:
1 SELECT SQL_CALC_FOUND_ROWS *, MATCH (titlewords, keywords, author, contentwords) AGAINST ('$words') AS matchscore 2 FROM search
3 WHERE MATCH (titlewords, keywords, author, contentwords) AGAINST ('$words') & 0.5 4 LIMIT 10&
最后: 感谢全世界的开源作者
优质网站模板

我要回帖

更多关于 mysql 全文检索语句 的文章

 

随机推荐