ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:74.23KB ,
资源ID:29744455      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29744455.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Sphinx 全文搜索引擎.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Sphinx 全文搜索引擎.docx

1、Sphinx 全文搜索引擎Sphinx 全文搜索引擎1:索引与全文索引的概念数据库中,表中的行特别多,如何快速的查询某一行,或者某一个文章中的单词,索引-查询速度快全文索引-针对文章内容中的单词各做索引2:mysql支不支持全文索引?答:支持, 但是A:innoDB引擎在5.5,及之前的版本不支持(5.7实测可以在innodb上建fulltext),只能在myisam引擎上用fulltextB: mysql的全文索引功能不够强大C: 无法对中文进行合理的全文索引 - mysql.无法进行中文分词.注意: 全文索引的停止词停止词是指出现频率极高的单词, 不予索引.如果某单词出现频率50%以上,列

2、为停止词或者是经过统计的常用词,也列为停止词-如 is, are , she, he, this 等等就像中文中: “的”,”是”,”呵呵”总结: 我们要对中文做全文搜索引擎,需要解决2个问题1: 性能提高,用第3方的全文搜索引擎工具,如sphinx, solr等2: 中文分词! (如mmseg)编译安装sphinx+mmseg = coreseek官网: 0: 安装工具包yum install make gcc gcc-c+ libtool autoconf automake imake libxml2-devel expat-devel1: 下载解压源码,ls查看csft-4.1 mmse

3、g-3.2.14 README.txt testpack其中-csft-4.1是修改适应了中文环境后的sphinxMmseg 是中文分词插件Testpack是测试用的软件包2: 先安装 mmseg2.1: cd mmseg 2.2: 执行bootstrap脚本2.3: ./configure -prefix=/usr/local/mmseg2.4: make & make install3: 再安装sphinx(coreseek)3.1: 到其目录下执行 buildconf.sh3.2: ./configure -prefix=/usr/local/sphinx -with-mysql=/us

4、r/local/mysql -with-mmseg -with-mmseg-includes=/usr/local/mmseg/include/mmseg/ -with-mmseg-libs=/usr/local/mmseg/lib/3.3: make installSphinx的使用分三个部分:1: 数据源-要让sphinx知道,查哪些数据,即针对哪些数据做索引(可以定义多个源)2: 索引配置-针对哪个源做索引, 索引文件放在哪个目录? 等等3: 搜索服务器-sphinx可以在某个端口(默认9312),以其自身的协议,与外部程序做交互.具体的步骤:1: 数据源典型配置source test

5、type = mysql sql_host = localhost sql_user = root sql_pass = sql_db = test sql_query_pre = set names utf8 sql_query_pre = set session query_cache_type=off sql_query = select id,catid,pubtime,title,content from news sql_attr_uint = id sql_attr_uint = catid sql_attr_timestamp = pubtime sql_query_info

6、= select * from news where id=$id2: 索引典型配置index test type = plain source = test path = /usr/local/sphinx/var/data/test #生成索引放在哪 docinfo = extern charset_dictpath = /usr/local/mmseg/etc/ charset_type = zh_cn.utf-82.1: 生成索引文件/path/sphinx/bin/indexer -c ./etc/sphinx.test.conf test (test是索引名)2.2: 查询测试A:

7、在命令下,用 path/bin/search -c ./path/conf 关键词B:开启搜索服务器,利用客户端连接搜索服务器来查询,见下3: 配置搜索服务器接口,启动搜索服务器 searchd listen = localhost:9312 pid_file = /usr/local/sphinx/var/log/searchd.pid log = /usr/local/sphinx/var/log/test.log query_log =/usr/local/sphinx/var/log/test.query.log client_timeout = 5 max_children = 5

8、max_matches = 1000 seamless_rotate = 1 3.2 : 使用客户端连接搜索服务器1) 系统testpack包里带的 sphinxapi.php2) 编译php的sphinx扩展Sphinx扩展的编译1: 官方搜索下载 sphinx扩展的压缩包并解压(假设解析在/usr/local/src/sphinx)2: /path/php/bin/phpize 执行3: configure -with-php-config=/xxx/path/php/bin/php-config出错: error: Cannot find libsphinxclient headers错

9、误原因: 没有预告编译libsphinxclient4: 解决3中的错误cd /usr/local/src/sphinx/api/libsphixclient/目录下# sh buildconf.sh# ./configure # make & make install5: 编译php的sphinx.so扩展# cd /path/to/sphinx1.3.0/#./configure -with-php-config=/usr/local/php/bin/php-config -with-sphinx# make & make install6: 编辑php.ini,把sphinx.so扩展引

10、入并重启apache, 如果是php-fpm方式运行,则重启php-fpm进程Sphinx的查询语法:查询分3部分1: 查询2: 过滤3: 排序1.1: 查询的模式查询的模式直接影响查询结果,SPH_MATCH_ALL, 匹配所有查询词(默认模式);SPH_MATCH_ANY, 匹配查询词中的任意一个;SPH_MATCH_PHRASE, 将整个查询看作一个词组,要求按顺序完整匹配;SPH_MATCH_BOOLEAN, 将查询看作一个布尔表达式SPH_MATCH_ALL-Query(西瓜 南瓜) / 文档中有西瓜 并且 有南瓜 才被选中SPH_MATCH_ANY / -Query(西瓜 南瓜)

11、/ 文档中有西瓜 或 有南瓜 被选中SPH_MATCH_PHRASE / 严格理解为两词连续如内容”西瓜 南瓜 东瓜”-Query(西瓜 南瓜), 可以命中-Query(西瓜 东瓜), 不能命中, 因为 西瓜 东瓜两词不连续如果你觉得切换模式麻烦,可用BOOLEAN模式SPH_MATCH_BOOLAN / /这个模式,能达到上3个模式的效果,需要在查询词之间做表达式如 words1 & words2 则等同SPH_MATCH_ALL Words1 | words2 则,等同SPH_MATCH_ANY Words1 ”content 西瓜”注意: 按字段查询需要把查询模式设置成”SPH_MATC

12、H_EXTNEDED”2 按属性过滤SetIDRange($min,$max); / 按id的范围过滤 SetFilter($attr,$values=array(),$exclue=false); / SetFilterRange ( $attribute, $min, $max, $exclude=false )SetFilterFloatRange (设置浮点数范围)SetLimits($offset,$limits) /设置偏移量及取出条目例:-SetIDRange(2,3);-SetLimits(2,2); 取第3-4条-SetFilter(catid,array(3,4),fals

13、e) ; 以catid in (3,4) 为条件 进行过滤-SetFilter(catid,array(3,4),true) ; 以catid not in (3,4) 为条件,进行过滤注意:如果setLimits中碰到”per-query max_matches=0 out of bounds (per-server max_matches=1000)” 错误,可以通过给setLimits指定第3个参数为大于0的整数,来解决.3: 按属性或权重排序排序模式:SPH_SORT_RELEVANCE 模式, 按相关度降序排列(最好的匹配排在最前面)SPH_SORT_ATTR_DESC 模式, 按属

14、性降序排列 (属性值越大的越是排在前面)SPH_SORT_ATTR_ASC 模式, 按属性升序排列(属性值越小的越是排在前面)SPH_SORT_TIME_SEGMENTS 模式, 先按时间段(最近一小时/天/周/月)降序,再按相关度降序SPH_SORT_EXTENDED 模式, 按一种类似SQL的方式将列组合起来,升序或降序排列。SPH_SORT_EXPR 模式,按某个算术表达式排序。排序实例$sphinxclient-SetSortMode(SPH_SORT_ATTR_DESC,group_id); / 按组id倒序排列索引的合并当已有的数据非常大,比如100万条商品信息,每天新增的较少,比

15、如1000个商品这时,每增加1个商品, 就全新生成索引的话,IO操作很耗时.我们可以用”索引合并”.索引合并的IO代价比全新生成要小,索引合并命令:/pach/sphinx/bin/indexer -c /path/conf -merge 主索引 增量索引 -rotate1:增量索引的传统方法Idcnt15具体描述:创建1张表做主索引已索引行的计数器, 每隔5分钟,生成增量索引,合并到主索引并且-把当前最大的id更新到计数器2: 增量索引的新方法生成主索引并把最大id写入计数器5分钟全部把大于计数器的文档重新索引具体做法:1: 生成主索引,写入计数器2: 每5分钟,根据计数器,全新生成增量索引

16、3: 每晚凌晨负载低时,合并主索引+增量索引4: 每周固定某时间,全新生成总索引疑问: 1天内,岂不是都查询不到增量索引的内容?答: 查询是可以从多个索引来查询的分布式索引原理:定义一个类型为distribute的索引, 并设置后台真正的索引源(本索引只是一个前台代理)索引源 可以是远程主机,通过HOST/IP来访问index distribute type = distributed agent = 192.168.1.199:9312:shop agent = 192.168.1.199:9312:incre索引源也可以是本地的index distribute type = distributed Local = shop Local = incre如果:索引都是本地的,有什么意义呢?1: 可以用的主索引+分布式索引的同时搜索上(不合并状态,从2个索引搜索)2: 多核CPU的优化,可以更充分的利用多CPU的优势

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1