Sphinx全文检索
- 格式:ppt
- 大小:1.66 MB
- 文档页数:30
Sphinx 全文搜索引擎1:索引与全文索引的概念数据库中,表中的行特别多,如何快速的查询某一行,或者某一个文章中的单词,索引--->查询速度快全文索引-->针对文章内容中的单词各做索引2:mysql支不支持全文索引?答:支持, 但是A:innoDB引擎在5.5,及之前的版本不支持(5.7实测可以在innodb上建fulltext),只能在myisam 引擎上用fulltextB: mysql的全文索引功能不够强大C: 无法对中文进行合理的全文索引----- mysql.无法进行中文分词.注意:全文索引的停止词停止词是指出现频率极高的单词, 不予索引.如果某单词出现频率50%以上,列为停止词或者是经过统计的常用词,也列为停止词---如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 mmseg-3.2.14 README.txt testpack其中--csft-4.1是修改适应了中文环境后的sphinxMmseg 是中文分词插件Testpack是测试用的软件包2: 先安装mmseg2.1: cd mmseg2.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=/usr/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 {type = mysqlsql_host = localhostsql_user = rootsql_pass =sql_db = testsql_query_pre = set names utf8sql_query_pre = set session query_cache_type=offsql_query = select id,catid,pubtime,title,content from newssql_attr_uint = idsql_attr_uint = catidsql_attr_timestamp = pubtimesql_query_info = select * from news where id=$id}2: 索引典型配置index test {type = plainsource = testpath = /usr/local/sphinx/var/data/test #生成索引放在哪docinfo = externcharset_dictpath = /usr/local/mmseg/etc/charset_type = zh_cn.utf-8}2.1: 生成索引文件/path/sphinx/bin/indexer -c ./etc/sphinx.test.conf test (test是索引名)2.2: 查询测试A:在命令下,用path/bin/search -c ./path/conf 关键词B:开启搜索服务器,利用客户端连接搜索服务器来查询,见下3: 配置搜索服务器接口,启动搜索服务器searchd {listen = localhost:9312pid_file = /usr/local/sphinx/var/log/searchd.pidlog = /usr/local/sphinx/var/log/test.logquery_log =/usr/local/sphinx/var/log/test.query.logclient_timeout = 5max_children = 5max_matches = 1000seamless_rotate = 1}3.2 : 使用客户端连接搜索服务器1)系统testpack包里带的sphinxapi.php2)编译php的sphinx扩展1: 官方搜索下载sphinx扩展的压缩包并解压(假设解析在/usr/local/src/sphinx) 2: /path/php/bin/phpize 执行3: configure --with-php-config=/xxx/path/php/bin/php-config出错: e rror: Cannot find libsphinxclient headers错误原因: 没有预告编译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扩展引入并重启apache, 如果是php-fpm方式运行,则重启php-fpm进程查询分3部分1: 查询2: 过滤3: 排序1.1: 查询的模式查询的模式直接影响查询结果,SPH_MA TCH_ALL, 匹配所有查询词(默认模式);SPH_MA TCH_ANY, 匹配查询词中的任意一个;SPH_MA TCH_PHRASE, 将整个查询看作一个词组,要求按顺序完整匹配;SPH_MA TCH_BOOLEAN, 将查询看作一个布尔表达式SPH_MA TCH_ALL->Query(‘西瓜南瓜’) // 文档中有西瓜并且有南瓜才被选中SPH_MA TCH_ANY //->Query(‘西瓜南瓜’) // 文档中有西瓜或有南瓜被选中S PH_MA TCH_PHRASE // 严格理解为两词连续如内容”西瓜南瓜东瓜”->Query(‘西瓜南瓜’), 可以命中->Query(‘西瓜东瓜’), 不能命中, 因为西瓜东瓜两词不连续如果你觉得切换模式麻烦,可用BOOLEAN模式SPH_MA TCH_BOOLAN / /这个模式,能达到上3个模式的效果,需要在查询词之间做表达式如words1 & words2 则等同SPH_MA TCH_ALLWords1 | words2 则,等同SPH_MA TCH_ANYWords1 << word2 则是word1,word2都要有,且words1出现在word2前面1.2: 按字段查询如:要求只查content字段中的”西瓜”关键词“西瓜”====>”@content 西瓜”注意: 按字段查询需要把查询模式设置成”SPH_MA TCH_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),false) ; 以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_RELEV ANCE 模式, 按相关度降序排列(最好的匹配排在最前面)SPH_SORT_ATTR_DESC 模式, 按属性降序排列(属性值越大的越是排在前面)SPH_SORT_ATTR_ASC 模式, 按属性升序排列(属性值越小的越是排在前面)SPH_SORT_TIME_SEGMENTS 模式, 先按时间段(最近一小时/天/周/月)降序,再按相关度降序SPH_SORT_EXTENDED 模式, 按一种类似SQL的方式将列组合起来,升序或降序排列。
以下文档为根据网上某位网友的经验进行改进,实现了前台全文搜索。
phpwind本地部署,可以使用WAMP工具,方便快捷。
一拷贝pwsc到d盘二修改pwsc/bin 目录下的sphinx.conf 中的配置文件主要数据库账号密码等(回复日志没有做索引配置没有考虑主题分表的情况)三进入库建立表---- 表的结构`search_counter`--CREATE TABLE IF NOT EXISTS `search_counter` (`counterid` int(11) NOT NULL DEFAULT '0',`max_doc_id` int(11) NOT NULL DEFAULT '0',`min_doc_id` int(10) NOT NULL DEFAULT '0',PRIMARY KEY (`counterid`)) ENGINE=MyISAM DEFAULT CHARSET=gbk;---- 导出表中的数据`search_counter`--四建立索引dos下操作切换目录到d:/pwsc/bin 目录下indexer.exe --all --config ./sphinx.conf五D:\pwsc\bin\searchd.exe --install --config d:\pwsc\bin\sphinx.conf 添加为系统服务不用每次都手打启动D:\pwsc\bin\searchd.exe --delete 删除系统服务六dos 运行schtasks /create /sc minute /mo 20 /tn "pwsc" /tr d:\pwsc\searchd.bat(创建计划任务)schtasks /delete /tn * /f (删除所有计划任务)七到windows系统服务中启动searchd服务然后到后台开启sphinx功能在全局->创始人那里,可以开启后台全文搜索。
sphinx 原理
Sphinx是一种文本检索引擎,它基于全文搜索技术,可以快速地搜索和检索大量的文档。
Sphinx的原理主要包括索引和查询两个方面。
首先是索引过程。
Sphinx通过解析文档集合,并根据预定的规则和标准,对文本进行切词、分析和归类。
在切词过程中,Sphinx会去除停用词(如冠词、介词等)和特殊字符,同时将词语转化为规范形式,以提高搜索的准确性。
然后,Sphinx 将处理后的词语组成倒排索引,建立词项与文档的映射关系。
倒排索引类似于一个词典,可以根据词项快速地找到包含该词项的文档。
其次是查询过程。
当用户发起搜索请求时,Sphinx先对查询进行与索引相同的切词、分析和归类操作。
然后,Sphinx根据用户的查询条件,在倒排索引中查找与之相关的文档。
这个查找过程实际上是一个检索和排名的过程,Sphinx通过使用BM25算法或其他相似的算法,根据文档与查询的相关性分数进行排序,并返回排名最高的文档作为搜索结果。
总的来说,Sphinx的原理是通过建立倒排索引,将文档集合切分、分析和归类,然后根据用户的查询条件,在倒排索引中快速定位与之相关的文档,并根据相关性分数进行排序,最终返回搜索结果。
这种全文搜索技术可以应用于各种大规模文本数据的搜索和检索场景。
Table of Contents∙ 1. 简介o 1.1. 什么是Sphinx/Coreseeko 1.2. Sphinx/Coreseek 的特性o 1.3. 如何得到Sphinx/Coreseeko 1.4. 许可协议o 1.5. 作者和贡献者o 1.6. 历史∙ 2. 安装o 2.1. 支持的操作系统o 2.2. 需要的工具o 2.3. 在Linux、BSD上安装Sphinx/Coreseeko 2.4. 在Windows上安装Sphinx/Coreseeko 2.5. 已知的安装问题和解决办法o 2.6. Sphinx/Coreseek快速入门教程∙ 3. 建立索引o 3.1. 数据源o 3.2. 属性o 3.3. MVA (多值属性)o 3.4. 索引o 3.5. 源数据的限制o 3.6. 字符集、大小写转换和转换表o 3.7. SQL 数据源 (MySQL, PostgreSQL)o 3.8. xmlpipe 数据源o 3.9. xmlpipe2数据源o 3.10. Python 数据源o 3.11. 实时索引更新o 3.12. 索引合并∙ 4. 搜索o 4.1. 匹配模式o 4.2. 布尔查询语法o 4.3. 扩展查询语法o 4.4. 权值计算o 4.5. 排序模式o 4.6. 结果分组(聚类)o 4.7. 分布式搜索o 4.8. searchd查询日志格式o 4.9. MySQL 协议支持与 SphinxQL ∙ 5. 命令行工具参考o 5.1. indexer命令参考o 5.2. searchd命令参考o 5.3. search命令参考o 5.4. spelldump命令参考o 5.5. indextool命令参考6. API参考o 6.1. 通用API方法▪ 6.1.1. GetLastError (错误信息)▪ 6.1.2. GetLastWarning (告警信息)▪ 6.1.3. SetServer (设置搜索服务)▪ 6.1.4. SetRetries (设置失败重试)▪ 6.1.5. SetConnectTimeout (设置超时时间)▪ 6.1.6. SetArrayResult (设置结果返回格式)▪ 6.1.7. IsConnectError (检查链接错误)o 6.2. 通用搜索设置▪ 6.2.1. SetLimits (设置结果集偏移量)▪ 6.2.2. SetMaxQueryTime (设置最大搜索时间)▪ 6.2.3. SetOverride (设置临时属性值覆盖)▪ 6.2.4. SetSelect (设置返回信息的内容)o 6.3. 全文搜索设置▪ 6.3.1. SetMatchMode (设置匹配模式)▪ 6.3.2. SetRankingMode(设置评分模式)▪ 6.3.3. SetSortMode (设置排序模式)▪ 6.3.4. SetWeights (设置权重)▪ 6.3.5. SetFieldWeights (设置字段权重)▪ 6.3.6. SetIndexWeights (设置索引权重)o 6.4. 结果集过滤设置▪ 6.4.1. SetIDRange (设置查询ID范围)▪ 6.4.2. SetFilter (设置属性过滤)▪ 6.4.3. SetFilterRange (设置属性范围)▪ 6.4.4. SetFilterFloatRange (设置浮点数范围)▪ 6.4.5. SetGeoAnchor (设置地表距离锚点)o 6.5. 分组设置▪ 6.5.1. SetGroupBy (设置分组的属性)▪ 6.5.2. SetGroupDistinct (设置分组计算不同值的属性)o 6.6. 搜索数据▪ 6.6.1. Query (查询)▪ 6.6.2. AddQuery (增加批量查询)▪ 6.6.3. RunQueries (执行批量查询)▪ 6.6.4. ResetFilters (清除当前设置的过滤器)▪ 6.6.5. ResetGroupBy (清除现有的分组设置)o 6.7. 附加方法▪ 6.7.1. BuildExcerpts (产生文本摘要和高亮)▪ 6.7.2. UpdateAttributes (更新属性)▪ 6.7.3. BuildKeywords (获取分词结果)▪ 6.7.4. EscapeString (转义特殊字符)▪ 6.7.5. Status (查询服务状态)o 6.8. 持久连接▪ 6.8.1. Open (打开连接)▪ 6.8.2. Close (关闭连接)∙7. MySQL 存储引擎 (SphinxSE)o7.1. SphinxSE 概览o7.2. 安装 SphinxSE▪7.2.1. 为 MySQL 5.0.x 编译 SphinxSE▪7.2.2. 为 MySQL 5.1.x 编译 SphinxSE▪7.2.3. 检查 SphinxSE 安装o7.3. 使用 SphinxSEo7.4. 通过 MySQL 生成片段 (摘要)∙8. 报告BUG∙9. sphinx.conf选项参考o9.1. 数据源配置选项▪9.1.1. type▪9.1.2. sql_host▪9.1.3. sql_port▪9.1.4. sql_user▪9.1.5. sql_pass▪9.1.6. sql_db▪9.1.7. sql_sock▪9.1.8. mysql_connect_flags▪9.1.9. mysql_ssl_cert, mysql_ssl_key, mysql_ssl_ca▪9.1.10. odbc_dsn▪9.1.11. sql_query_pre▪9.1.12. sql_query▪9.1.13. sql_query_range▪9.1.14. sql_range_step▪9.1.15. sql_query_killlist▪9.1.16. sql_attr_uint▪9.1.17. sql_attr_bool▪9.1.18. sql_attr_bigint▪9.1.19. sql_attr_timestamp▪9.1.20. sql_attr_str2ordinal▪9.1.21. sql_attr_float▪9.1.22. sql_attr_multi▪9.1.23. sql_query_post▪9.1.24. sql_query_post_index▪9.1.25. sql_ranged_throttle▪9.1.26. sql_query_info▪9.1.27. xmlpipe_command▪9.1.28. xmlpipe_field▪9.1.29. xmlpipe_attr_uint▪9.1.30. xmlpipe_attr_bool▪9.1.31. xmlpipe_attr_timestamp▪9.1.32. xmlpipe_attr_str2ordinal▪9.1.33. xmlpipe_attr_float▪9.1.34. xmlpipe_attr_multi▪9.1.35. xmlpipe_fixup_utf8▪9.1.36. mssql_winauth▪9.1.37. mssql_unicode▪9.1.38. unpack_zlib▪9.1.39. unpack_mysqlcompress▪9.1.40. unpack_mysqlcompress_maxsize o9.2. 索引配置选项▪9.2.1. type▪9.2.2. source▪9.2.3. path▪9.2.4. docinfo▪9.2.5. mlock▪9.2.6. morphology▪9.2.7. min_stemming_len▪9.2.8. stopwords▪9.2.9. wordforms▪9.2.10. exceptions▪9.2.11. min_word_len▪9.2.12. charset_type▪9.2.13. charset_table▪9.2.14. ignore_chars▪9.2.15. min_prefix_len▪9.2.16. min_infix_len▪9.2.17. prefix_fields▪9.2.18. infix_fields▪9.2.19. enable_star▪9.2.20. ngram_len▪9.2.21. ngram_chars▪9.2.22. phrase_boundary▪9.2.23. phrase_boundary_step▪9.2.24. html_strip▪9.2.25. html_index_attrs▪9.2.26. html_remove_elements▪9.2.27. local▪9.2.28. agent▪9.2.29. agent_blackhole▪9.2.30. agent_connect_timeout▪9.2.31. agent_query_timeout▪9.2.32. preopen▪9.2.33. ondisk_dict▪9.2.34. inplace_enable▪9.2.36. inplace_docinfo_gap▪9.2.37. inplace_reloc_factor▪9.2.38. inplace_write_factor▪9.2.39. index_exact_words▪9.2.40. overshort_step▪9.2.41. stopword_stepo9.3. indexer程序配置选项▪9.3.1. mem_limit▪9.3.2. max_iops▪9.3.3. max_iosize▪9.3.4. max_xmlpipe2_field▪9.3.5. write_buffero9.4. searchd程序配置选项▪9.4.1. listen▪9.4.2. address▪9.4.3. port▪9.4.4. log▪9.4.5. query_log▪9.4.6. read_timeout▪9.4.7. client_timeout▪9.4.8. max_children▪9.4.9. pid_file▪9.4.10. max_matches▪9.4.11. seamless_rotate▪9.4.12. preopen_indexes▪9.4.13. unlink_old▪9.4.14. attr_flush_period▪9.4.15. ondisk_dict_default▪9.4.16. max_packet_size▪9.4.17. mva_updates_pool▪9.4.18. crash_log_path▪9.4.19. max_filters▪9.4.20. max_filter_values▪9.4.21. listen_backlog▪9.4.22. read_buffer▪9.4.23. read_unhinted10. Coreseek特殊选项参考o10.1. 中文分词核心配置▪10.1.1. charset_dictpath▪10.1.2. charset_typeo10.2. MMSEG分词配置选项▪10.2.1. merge_number_and_ascii▪10.2.2. number_and_ascii_joint▪10.2.4. seperate_number_asciio10.3. Python数据源程序接口▪10.3.1. GetScheme() (设置检索字段的属性)▪10.3.2. GetKillList() (设置不参与检索的文档编号)▪10.3.3. GetFieldOrder() (设置字段的顺序)▪10.3.4. Connected() (获取数据前的连接处理)▪10.3.5. OnBeforeIndex() (数据获取前处理)▪10.3.6. NextDocument() (文档获取处理)▪10.3.7. OnAfterIndex() (数据获取后处理)▪10.3.8. OnIndexFinished() (索引完成时处理)A. Sphinx revision history。
全文检索之Sphinx速成指南全文检索之Sphinx速成指南2008-07-02 12:24:51Database phpSphinx速成指南全文检索自动重建索引配置SphinxLeave a comment1. Sphinx简介1.1. 什么是全文检索全文检索是指以文档的全部文本信息作为检索对象的一种信息检索技术。
检索的对象有可能是文章的标题,也有可能是文章的作者,也有可能是文章摘要或内容。
1.2. 介绍Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。
Sphinx特别为一些脚本语言设计搜索API接口,如PHP,Python,Perl,Ruby等,同时为MySQL也设计了一个存储引擎插件。
1.3. Sphinx的特性高速索引(在新款CPU上,近10 MB/秒);高速搜索(2-4G的文本量中平均查询速度不到0.1秒);高可用性(单CPU上最大可支持100 GB的文本,100M文档); 提供良好的相关性排名支持分布式搜索;提供文档摘要生成;提供从MySQL内部的插件式存储引擎上搜索supports boolean, phrase, and word proximity queries;支持每个文档多个全文检索域(默认最大32个);支持每个文档多属性;支持断词;支持单字节编码与UTF-8编码;supports English stemming, Russian stemming, and Soundex for morphology;支持MySQ(MyISAM和InnoDB 表都支持);支持PostgreSQL.2. Sphinx安装(For MySQL)2.1. Windows下安装从上下载MySQL5.0.45版安装配置好MySQL,采用utf-8字符集从Sphinx官网上/downloads.html 下载mysql-5.0.45-sphinxse-r871-win32.zip和sphinx-0.9.8-svn-r985-win32.zip如果您的MySQL服务已启动请先停止掉解压mysql-5.0.45-sphinxse-r871-win32.zip,将里面bin与share目录覆盖掉你的mysql安装目录下的相应目录解压sphinx-0.9.8-svn-r985-win32.zip ,将里面的文件解压到D:\sphinxsphinx的配置与实际应用是相关的,因此以下我以例子进行说明,至此sphinx安装部分结束2.2. Linux下安装下载mysql-5.1.22-rc.tar.gz解压至/root/mysql-5.1.22下载sphinx-0.9.8-svn-r985.tar.gz,解压至/root/sphinx-0.9.8-svn-r985将/root/sphinx-0.9.8-svn-r985/mysqlse下的文件复制至/root/mysql-5.1.22/storage/sphinx在/root/mysql-5.1.22目录下运行sh BUILD/autorun.sh./configure --prefix=/usr/local/mysql --with-charset=utf8--with-extra-charsets=all --enable-thread-safe-client--enable-assembler --with-readline --with-big-tables--with-plugins=sphinxmake && make installgroupadd mysqluseradd –g mysql mysqlchown mysql:mysql /usr/local/mysql -Rcd /usr/local/mysqlbin/mysql_install_db –user=mysql(此时系统可能会提示:[Warning] Storage engine 'SPHINX' has conflicting typecode. Assigning value 42.可忽略,不影响使用)cp /root/mysql-5.1.22/support-files/mysql.server/etc/init.d/mysqldchmod 700 /etc/init.d/mysqldcp /root/mysql-5.1.22/support-files/f /etc/f /etc/init.d/mysql start(至些mysql启动了)然后进入mysql命令行,运行show engines,看是不是有一个叫sphinx的engine,有的话就表示sphinxSE(mysql的sphinx引擎)安装正常了进入/root/sphinx-0.9.8-svn-r985,运行ldconfig /usr/local/mysql/lib/mysqlldconfig /usr/local/mysql/include/mysql./configure --prefix=/usr/local/sphinx--with-mysql=/usr/local/mysqlmake && make install3. 实例说明为更好说明如何应用Sphinx,现结合实例说明,我们以网站的新闻文章表为例。
Sphinx+Python+Oracle构建全文检索系统Sphinx+Python+Oracle构建全文检索系统摘要目前,很多大型企业的CRM系统在构建时都是采用Oracle 作为数据库,本文正是为这类系统提供一个可以作为参考实现的基于Sphinx的站内全文检索系统的实现方法。
关键词全文检索;Sphinx;站内检索1 Sphinx简介Sphinx是一个在GPLv2下分发的全文检索软件包,是SQL Phrase Index的缩写。
它最初开发的目的是为了在数据库驱动的网站中寻找解决索引质量、搜索性能等各方面的问题而开发的一个高性能独立的全文搜索软件包,所以它可以非常容易的与SQL数据库集成,为数据库驱动的网站提供高质量、高性能的站内搜索。
当前,Sphinx系统内置了MySQL和PostgreSQL数据库数据源的支持,也支持从管道标准输入读取特定格式的XML数据。
但是,目前Sphinx还不支持直接将Oeacle数据库作为数据源,但在最新的版本中,添加了Python数据源支持,这极大的扩展了数据源的来源,我们可以操作Python脚本作为数据源来获取Oracle中的数据。
2 Python数据源操作Oracle数据库的设计与实现考虑到安全、性能等因素,目前,很多大型的网站,尤其是大型企业的CRM 系统,在数据库构建方面都采用了Oracle数据库。
基于此,我的研究正是基于Oracle构建的大型企业CRM系统,借助Sphinx软件包提供全文搜索功能,同时结合MMSeg中文分词软件包来为网站生成一个功能强大的站内搜索引擎。
2.1系统目标本系统要实现一个基于Oracle数据库构建的企业CRM系统的高效的全文检索系统,并保证查询性能和查询结果的准确性,具体应满足以下两方面要求:1)在数据量较大时具有较高的查询性能,在海量数据检索时仍能保持较快的响应速度和准确率;2)以CRM系统在Oracle数据库中所存储的数据为检索目标,系统提供易于操作和使用的查询接口,用户可以通过该系统检索CRM系统上所有的网页内容。
Sphinx全⽂索引引擎⼀、什么是sphinx原理:sphinx将数据库中的表建⽴索引,php操作sphinx时,将要查询的关键字进⾏匹配,返回⼀个id,php通过id到数据库中查询数据。
⼆、下载重要⽂件说明:三、使⽤sphinx1、复制csft_mysql.conf⽂件到sphinx根⽬录,并修改名称为sphinx.conf2、配置sphinx.conf#MySQL数据源配置,详情请查看:/products-install/mysql/#请先将var/test/documents.sql导⼊数据库,并配置好以下的MySQL⽤户密码数据库#源定义source exhibit{type = mysqlsql_host = localhostsql_user = rootsql_pass = rootsql_db = testsql_port = 3306sql_query_pre = SET NAMES utf8#要求:第⼀个字段必须是ID,如果不叫ID可以起个别名叫ID(类型必须是⾮零、唯⼀、不重复的整数)#sql_query第⼀列id需为整数#title、content作为字符串/⽂本字段,被全⽂索引sql_query = SELECT itemid as id, title, keyword, address FROM destoon_exhibitsql_attr_uint = itemid #从SQL读取到的值必须为整数#sql_attr_timestamp = date_added #从SQL读取到的值必须为整数,作为时间属性#命令⾏查询时,设置正确的字符集sql_query_info_pre = SET NAMES utf8#命令⾏查询时,从数据库读取原始数据信息#sql_query_info = SELECT * FROM documents WHERE id=$id}#index定义index exhibit{source = exhibit #对应的source名称path = G:/phpstudy/Sphinx/var/data/exhibit #请修改为实际使⽤的绝对路径,例如:/usr/local/coreseek/var/...docinfo = externmlock = 0morphology = nonemin_word_len = 1html_strip = 0#中⽂分词配置,详情请查看:/products-install/coreseek_mmseg/#charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾charset_dictpath = G:/phpstudy/Sphinx/etc/ #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...charset_type = zh_cn.utf-8}#全局index定义indexer{mem_limit = 128M}#searchd服务定义searchd{listen = 9312read_timeout = 5max_children = 30# 最⼤返回的记录数(即使查询出的记录数量多也只返回这些数据)max_matches = 1000seamless_rotate = 0preopen_indexes = 0unlink_old = 1pid_file = G:/phpstudy/Sphinx/var/log/searchd_mysql.pid #请修改为实际使⽤的绝对路径,例如:/usr/local/coreseek/var/...log = G:/phpstudy/Sphinx/var/log/searchd_mysql.log#请修改为实际使⽤的绝对路径,例如:/usr/local/coreseek/var/...query_log = G:/phpstudy/Sphinx/var/log/query_mysql.log#请修改为实际使⽤的绝对路径,例如:/usr/local/coreseek/var/...}3、安装sphinx服务器4、创建索引5、开启sphinx服务6、安装php扩展下载地址:将php_sphinx.dll⽂件复制到如图地址:重启服务器:四、PHP操作Sphinx<?php/*** Created by PhpStorm.* User: Yang* Date: 2019/8/14* Time: 16:16*/$sphinx = new SphinxClient();//设置searchd的主机名和TCP端⼝$sphinx->SetServer("localhost", 9312);//设置连接超时$sphinx->SetConnectTimeout(3);//控制搜索结果集的返回格式$sphinx->SetArrayResult(true);//设置全⽂查询的匹配模式/*SPH_MATCH_ALL 匹配所有查询词(默认模式).SPH_MATCH_ANY 匹配查询词中的任意⼀个.SPH_MATCH_PHRASE 将整个查询看作⼀个词组,要求按顺序完整匹配.SPH_MATCH_BOOLEAN 将查询看作⼀个布尔表达式.SPH_MATCH_EXTENDED 将查询看作⼀个Sphinx内部查询语⾔的表达式.SPH_MATCH_FULLSCAN 使⽤完全扫描,忽略查询词汇.SPH_MATCH_EXTENDED2 类似 SPH_MATCH_EXTENDED ,并⽀持评分和权重.*/$sphinx->SetMatchMode(SPH_MATCH_ANY);$q = "2017";$result = $sphinx->Query($q);var_dump($result['matches']);$id_array = array_column($result['matches'], "id");$ids = implode(",", $id_array);echo$ids;array(20) {[0]=>array(3) {["id"]=>string(4) "9388"["weight"]=>int(2574)["attrs"]=>array(1) {["addtime"]=>string(10) "1488729600"}}[1]=>array(3) {["id"]=>string(5) "24571"["weight"]=>int(2574)["attrs"]=>array(1) {["addtime"]=>string(10) "1488729600"}}[2]=>array(3) {["id"]=>string(2) "68"["weight"]=>int(2569)["attrs"]=>array(1) {["addtime"]=>string(10) "1504195200"}}[3]=>array(3) {["id"]=>string(2) "81"["weight"]=>int(2569)["attrs"]=>array(1) {["addtime"]=>string(10) "1504195200"}}...}9388,24571,68,81,3186,3213,3278,3444,3470,3645,3785,3843,3890,3907,4120,4164,4182,4212,4235,4568注意:要通过定时器定时建⽴索引。
Sphinx全文检索作者:余锐版本:v1.0 日期:20100118一简介 (3)二Sphinx在linux下的安装(RH 4) (4)2.1 安装前的准备 (4)2.2 安装步骤 (4)2.2.1 安装mmseg分词 (4)2.2.2 解压CSFT3.1 (5)2.2.3 安装mysql并编译sphinxSE (5)2.2.4 安装csft-3.1 (6)2.3 配置 (7)2.3.1 修改配置文件 (7)2.3.2 导入体验数据 (7)2.4 索引的问题及解决 (7)2.4.1 新建索引 (7)2.4.2 测试索引 (7)三在windows下的安装 (9)3.1 安装软件包 (9)3.2 安装csft3.1 (9)3.3 配置 (9)3.4 Windows下安装sphinxSE (10)四Sphinx对中文的支持 (11)五SphinxSE的使用 (12)5.1 sphinxSE使用示例 (12)5.2 sphinxSE语法 (12)六主索引+增量索引 (15)6.1 计数表与配置 (15)6.2 采用sphinxSE方式 (16)6.3 Java接口方式 (16)6.3.1 拷贝java文件 (17)6.3.2 添加一个servlet (17)6.3.3 修改SphinxSearch (18)七一些后续操作 (19)7.1 主索引更新脚本 (19)7.2 增量索引更新脚本 (19)7.3 定时运行脚本 (19)八Windows使用的风险 (20)一简介首先了解一下sphinx全文索引的相关知识官方网站:/官方文档:/docs/中文支持:/Sphinx的特征:•Sphinx支持高速建立索引(可达10MB/秒,而Lucene建立索引的速度是1.8MB/秒)•高性能搜索(在2-4 GB的文本上搜索,平均0.1秒内获得结果)•高扩展性(实测最高可对100GB的文本建立索引,单一索引可包含1亿条记录)•支持分布式检索•支持基于短语和基于统计的复合结果排序机制•支持任意数量的文件字段(数值属性或全文检索属性)•支持不同的搜索模式(“完全匹配”,“短语匹配”和“任一匹配”)•支持作为Mysql的存储引擎二 Sphinx在linux下的安装(RH 4)Coreseek 全文检索服务器版本已经集成sphinx和中文分词补丁,只需要下载MMSeg和Coreseek Fulltext Server(源代码),就能实现Sphinx服务支持。