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+LibMMSeg搭建中文全文搜索引擎_安装配置
本文来源:/start_and_end/blog/item/28467c069e2a3b700308817d. htmlSphinx+LibMMSeg搭建中文全文搜索引擎_安装配置2009年12月30日星期三下午 07:00Sphinx为俄罗斯制作的开源搜索引擎,现在最新版本为0.9.8LibMMSeg为制作的基于复合最大匹配算法的中文分词法的中文分词库,采用Chih-Hao Tsai的MMSEG算法。
同时还为sphinx做了中文支持补丁,目前最新补丁针对sphinx 0.9.8 rc2安装mmesgwget /uploads/sources/mmseg-0.7.3.tar.gztar -xzvf mmseg-0.7.3.tar.gzcd mmseg-0.7.3./configuremakemake installcd ..下载sphinx并打中文补丁wget/uploads/sources/sphinx-0.98rc2.zhcn-support.p atchwget/uploads/sources/fix-crash-in-excerpts.patch wget /downloads/sphinx-0.9.8-rc2.tar.gztar -xzvf sphinx-0.9.8-rc2.tar.gzcd sphinx-0.9.8-rc2patch -p1 < ../sphinx-0.98rc2.zhcn-support.patchpatch -p1 < ../fix-crash-in-excerpts.patchcd ..下载MySQL数据库,添加se支持wget/archives/mysql-5.0/mysql-5.0.37.tar.gztar -xzvf mysql-5.0.37.tar.gzcd mysql-5.0.37patch -p1 < ../sphinx-0.9.8-rc2/mysqlse/sphinx.5.0.37.diffBUILD/autorun.shmkdir -p sql/sphinxcp ../sphinx-0.9.8-rc2/mysqlse/* sql/sphinxCFLAGS="-g -O2 -fno-omit-frame-pointer" CXX="gcc" \CXXFLAGS="-g -felide-constructors -fno-exceptions -fno-rtti -O2-fno-omit-frame-pointer" \CXXLDFLAGS="" \./configure –prefix=/usr/local/mysql-5-sphinx \–enable-assembler \–with-extra-charsets=complex \–enable-thread-safe-client \–with-readline \–with-big-tables \–enable-local-infile \–with-sphinx-storage-enginemakemake installcd ..编译安装sphinxcd sphinx-0.9.8-rc2/CPPFLAGS=-I/usr/include/python2.4LDFLAGS=-lpython2.4./configure –prefix=/usr/local/sphinx–with-mysql=/usr/local/mysql-5-sphinxmakemake installcd ../配置sphinxsource ds_discuz{type = mysqlsql_host = 127.0.0.1sql_user = discuzsql_pass = discuz@1\#sql_db = discuzsql_port = 3306 # optional, default is 3306sql_query_pre = SET NAMES utf8sql_query_pre = SET SESSIONquery_cache_type=OFFsql_query = \SELECT pid, fid,tid,authorid, dateline, \subject, message \FROM cdb_posts \WHERE pid > $start AND pid <= $endsql_query_range = SELECT MIN(pid),MAX(pid) FROM cdb_postssql_range_step = 1000sql_ranged_throttle = 1000sql_attr_uint = fidsql_attr_uint = tidsql_attr_uint = authoridsql_attr_timestamp = datelinesql_query_info = SELECT * FROM cdb_posts WHERE pid=$id}index discuz{source = ds_discuzpath =/usr/local/sphinx/var/data/discuzdocinfo = externcharset_type = zh_cn.utf-8charset_dictpath = /usr/local/sphinx/data/min_prefix_len = 0min_infix_len = 0min_word_len = 2}indexer{mem_limit = 64M}searchd{port = 3312log =/usr/local/sphinx/var/log/searchd.logquery_log =/usr/local/sphinx/var/log/query.logread_timeout = 5max_children = 30pid_file =/usr/local/sphinx/var/log/searchd.pidmax_matches = 1000seamless_rotate = 1preopen_indexes = 0unlink_old = 1}建立索引/usr/local/sphinx/bin/indexer –config/usr/local/sphinx/etc/sphinx.conf启动 searchd 服务/usr/local/sphinx/bin/searchd –config/usr/local/sphinx/etc/sphinx.conf测试 searchd 服务<?phprequire "sphinxapi.php";$q = $_POST['search'];if ($q=='') $q = '测试搜索引擎是否运行正常';echo "<form action='?' method='post'>search<input name='search' value='$q'><input type='submit' name='sub'></form>";echo "<br/>";echo "seach $q<br/>";$cl = new SphinxClient();$cl->SetServer('127.0.0.1', 3312);$cl->SetMatchMode(SPH_MATCH_ALL);$index="*";$res = $cl->Query($q, $index);print_r($res);?>到这儿,基本的安装配置就完成了,如果不使用修改了增加了se引擎的MySQL 存储数据,就利用不了和搜索结果的交叉查询,中间关于MySQL安装的那一段可以去除。
phpwind前台全文搜索实现(sphinx)
以下文档为根据网上某位网友的经验进行改进,实现了前台全文搜索。
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根据用户的查询条件,在倒排索引中查找与之相关的文档。
这个查找过程实际上是一个检索和排名的过程,Sphinx通过使用BM25算法或其他相似的算法,根据文档与查询的相关性分数进行排序,并返回排名最高的文档作为搜索结果。
总的来说,Sphinx的原理是通过建立倒排索引,将文档集合切分、分析和归类,然后根据用户的查询条件,在倒排索引中快速定位与之相关的文档,并根据相关性分数进行排序,最终返回搜索结果。
这种全文搜索技术可以应用于各种大规模文本数据的搜索和检索场景。
PHP中提高搜索性能的Coreseek(Sphinx)
PHP中提高搜索性能的Coreseek(Sphinx)1.PHP中提高搜索性能的Coreseek(Sphinx)1.1.什么是Coreseek(Sphinx)Coreseek 是一款中文全文检索/搜索软件,基于Sphinx研发并独立发布,专攻中文搜索和信息处理领域.Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。
1.2.为什么使用Sphinx和数据库相比Sphinx是专业做搜索,相比数据库的效率要高很多.1. 索引和搜索性能优异;2. 先进的索引和查询工具 (灵活且功能丰富的文本分析器,查询语言,以及多种不同的排序方式等等);3. 先进的结果集分析处理 (SELECT 可以使用表达式, WHERE, ORDER BY, GROUP BY 等对全文搜索结果集进行过滤);4. 实践证实可扩展性支持数十亿文档记录,TB级别的数据,以及每秒数千次查询;5. 易于集成SQL和XML数据源,并可使用SphinxAPI、SphinxQL或者SphinxSE搜索接口6. 易于通过分布式搜索进行扩展1.3.Sphinx在哪里使用适用于行业/垂直搜索、论坛/站内搜索、数据库搜索、文档/文献检索、信息检索、数据挖掘等应用场景. 只要需要搜索的地方都可以使用Sphinx提高搜索效率.2.Sphinx核心概念2.1.全文检索程序的工作流程如果信息检索系统在用户发出了检索请求后再去互联网上找答案,根本无法在有限的时间内返回结果。
所以要先把要检索的资源集合放到本地,并使用某种特定的结构存储,称为索引(中国叫做目录),这个索引的集合称为索引库。
由于索引库的结构是按照专门为快速查询设计的,所以查询的速度非常快。
我们每次搜索都是在本地的索引库中进行,如下图:从图片上可以看出,我们不仅要搜索,还要保证数据集合与索引库的一致性。
搭建Sphinx+MySQL5.1x+SphinxSE+mmseg中文分词搜索引擎架构
Sphinx+MySQL5.1x+SphinxSE+mmseg中文分词搜索引擎架构搭建手记研究了一下sphinx,发现真是个好东西,先来几句废话,什么是SphinxSphinx 是一个在GPLv2 下发布的一个全文检索引擎,一般而言,Sphinx是一个独立的搜索引擎,意图为其他应用提供高速、低空间占用、高结果相关度的全文搜索功能。
Sphinx可以非常容易的与SQL数据库和脚本语言集成。
当前系统内置MySQL和PostgreSQL 数据库数据源的支持,也支持从标准输入读取特定格式的XML数据。
通过修改源代码,用户可以自行增加新的数据源(例如:其他类型的DBMS的原生支持)。
Sphinx的特性高速的建立索引(在当代CPU上,峰值性能可达到10 MB/秒);高性能的搜索(在2 – 4GB 的文本数据上,平均每次检索响应时间小于0.1秒);可处理海量数据(目前已知可以处理超过100 GB的文本数据, 在单一CPU的系统上可处理100 M 文档);提供了优秀的相关度算法,基于短语相似度和统计(BM25)的复合Ranking方法; 支持分布式搜索;provides document exceprts generation;可作为MySQL的存储引擎提供搜索服务;支持布尔、短语、词语相似度等多种检索模式;文档支持多个全文检索字段(最大不超过32个);文档支持多个额外的属性信息(例如:分组信息,时间戳等);停止词查询;支持单一字节编码和UTF-8编码;原生的MySQL支持(同时支持MyISAM 和InnoDB );原生的PostgreSQL 支持.更多特性参考手册。
原生MySQL存储引擎检索流程:基于Sphinx存储引擎检索:开始本文以CentOS5.5+mysql-5.1.55+sphinx-0.9.9(coreseek-3.2.14.tar.gz)为例介绍Sphinx+MySQL5.1x+SphinxSE存储引擎+mmseg中文分词搜索引擎架构搭建过程。
Sphinx架构介绍(小树苗)
Sphinx架构介绍
Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。
Sphinx特别为一些脚本语言设计搜索API接口,如
PHP,Python,Perl,Ruby等,同时为MySQL也设计了一个存储引擎插件。
Sphinx 单一索引最大可包含1亿条记录,在1千万条记录情况下的查询速度为0.x秒(毫秒级)。
Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。
Sphinx的主要特性包括:
高速索引 (在新款CPU上,近10 MB/秒);
高速搜索 (2-4G的文本量中平均查询速度不到0.1秒);
高可用性 (单CPU上最大可支持100 GB的文本,100M文档);
提供良好的相关性排名
支持分布式搜索;
提供文档摘要生成;
提供从MySQL内部的插件式存储引擎上搜索
支持布尔,短语, 和近义词查询;
支持每个文档多个全文检索域(默认最大32个); 支持每个文档多属性;
支持断词;
支持单字节编码与UTF-8编码;。
Sphinx+Python+Oracle构建全文检索系统
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构建Web站内全文搜索系统的研究的开题报告
基于Sphinx构建Web站内全文搜索系统的研究的开题报告一、研究背景与意义随着互联网内容的爆炸式增长,网站上的信息海量化已成为常态。
如何快速、准确地检索所需的信息,成为了用户的重要需求。
然而,大部分网站的搜索功能存在以下几个问题:1. 搜索结果不准确或不完整,无法满足用户需求;2. 搜索速度慢,甚至出现500等错误,让用户无法使用;3. 不支持搜索指定类型的文件,如PDF、Word文档等;4. 不支持中文全文搜索,存在乱码等问题。
为了解决这些问题,建设一个高效、准确、全面的Web站内全文搜索系统变得愈加必要。
Sphinx是一种全文搜索引擎。
它采用高效的索引和查询算法,支持快速、准确地搜索大量关键词和文本。
与其他搜索引擎相比,Sphinx有如下优势:1. 支持分布式架构,可以横向扩展;2. 网站访问量大时,Sphinx能够快速响应;3. 支持多语言搜索,并且中文搜索支持良好;4. 可以针对不同类型的文件进行全文搜索;5. 支持多种查询方式,满足不同的搜索需求。
因此,本研究旨在探究基于Sphinx构建Web站内全文搜索系统的实现方式及其优化方法,以提高网站搜索的效率和准确性。
二、研究目标与方法本研究的主要目标是:1. 研究Sphinx搜索引擎的技术原理;2. 学习Web站内全文搜索系统的开发方法;3. 建立基于Sphinx的搜索引擎,并与网站进行集成;4. 对Sphinx搜索引擎进行优化,提高搜索效率和准确性。
本研究的方法为:1. 研究相关文献,了解Sphinx搜索引擎的基本原理、应用场景和优劣势;2. 设计Web站内全文搜索系统的系统架构、关键技术和接口规范;3. 根据系统设计,使用Python编写基于Sphinx的搜索引擎,并进行调试和测试;4. 针对搜索效率和准确性等方面进行优化,包括索引优化、查询优化、分布式架构优化等等;5. 与网站进行集成测试,在实际环境中验证搜索功能和性能。
三、预期成果与意义本研究的预期成果为:1. 建立一个基于Sphinx的Web站内全文搜索系统,实现搜索速度快、准确度高和支持多种文件格式的搜索;2. 完成Sphinx搜索引擎的优化工作,提高搜索效率和准确性;3. 提供搜索系统的使用文档和测试报告。
sphinx社区全文搜索平台配置手册
千万级Discuz!数据全文检索方案(Sphinx)前言:康盛创想的Discuz!从创立之初即以提高产品效率为突破口,随着编译模板,语法生成内核,数据缓存和自动更新机制等独创或独有技术的应用,和坚固的数据结构及最少化数据库查询设计,使得Discuz! 可以在极为繁忙的服务器环境下快速高效稳定运行。
由于Discuz!产品依赖MySQL数据库性能,在全文检索方面如果仅仅依靠MySQL的LIKE %关键词% 语句无法取得理想的成绩。
本文阐述经过Discuz!生产环境考验的构建在Sphinx基础上的千万级Discuz!数据全文检索解决方案。
出自俄罗斯的开源全文搜索引擎软件Sphinx在单一索引达到4千万条记录情况下的查询速度仍为0.x秒甚至0.0x秒级别。
Sphinx创建索引的速度约五分钟处理百万条记录,对于每分钟的增量索引重建只需要几十秒,每日的增量索引合并到主索引也只需一分钟左右。
此构架基础上的Discuz!高负载站点,已成功解决搜索速度慢、经常锁表、无法分布式搜索等问题。
千万级Discuz!数据全文检索方案(Sphinx)适用于繁忙的站点并且论坛访问者有大量的搜索需求,本方案主要解决搜索缓慢问题。
本文环境以CentOS 5为基准。
初始化一次全部索引,按系统计划任务crontab定时方式,每5分钟重建一次增量索引(增量索引不与主索引合并),每日凌晨3:30建立一次昨日比较的增量索引(合并到主索引中)。
主索引建立在磁盘目录/data/sphdata,增量索引建立在内存/dev/shm/中避免大量的I/O操作,由于帖子编辑限制,全部索引每两个月重建一次。
目录千万级Discuz!数据全文检索方案(Sphinx) (1)Sphinx快速介绍 (2)一、Sphinx全文检索方案构架图 (3)二、Sphinx中文分词 (4)三、Sphinx安装步骤 (4)1.安装、升级所需的程序库 (4)2.创建安装文件夹并下载源代码 (4)3.安装MMseg中文分词 (4)4.安装CSFT(Sphinx的CoreSeek修改版) (5)5.编译Sphinx过程可能出现的错误 (5)a)无法找到mysql路径 (5)b)无法找到libiconv (5)c)无法找到libmysqlclient.so.15 (5)d)php 5.2.11版本的api BUG (5)e)生成索引时容易发生磁盘空间不足写入失败的错误 (5)6.安装为php扩展(可选) (6)7.安装SphinxSE存储引擎(可选) (6)四、Sphinx配置 (6)1.mmseg中文分词词库 (6)a)词典格式 (6)b)词库生成方法 (7)2.创建sphinx数据目录结构 (7)3.创建sphinx.conf配置文件 (7)4.mmseg.ini分词配置文件 (14)5.建立Sphinx增量索引数据表 (14)6.书写常用的sphinx控制命令到sh文件 (14)7.创建相应的文件结构,初始化Sphinx的全部索引 (17)8.启动sphinx (17)9.设置计划任务项 (17)10.设置开机启动项 (17)五、通过命令行测试搜索 (17)六、通过php api调用Sphinx搜索 (18)七、通过MySQL的SphinxSE存储引擎调用Sphinx搜索(可选) (19)八、Sphinx数据占用量统计 (19)Sphinx快速介绍Sphinx是独立的搜索服务端,不依赖MySQL,当Sphinx和MySQL结合部署时,Sphinx的数据来源为MySQL。
Sphinx全文索引引擎
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
强大的开源全文检索引擎——Sphinx
乔楚
【期刊名称】《程序员》
【年(卷),期】2011(000)003
【摘要】随着互联网的发展,Web2.0带来了信息的井喷,我们可以接触和处理的数据越来越丰富,规模也越来越庞大。
不管是互联网网站还是企业自身,都需要对大量的数据进行管理和分析,并且用户对信息的组织、查询、可寻性、及时性的要求也越来越高,这一切都离不开全文检索引擎。
【总页数】2页(P126-127)
【作者】乔楚
【作者单位】不详
【正文语种】中文
【中图分类】TP393
【相关文献】
1.开源全文检索引擎Lucene本地化实践研究 [J], 吴鹏飞;马凤娟;李文革;郭鹏
2.基于Heritrix和Sphinx的购物比较搜索引擎研究 [J], 李远远;吕焱飞
3.基于Sphinx+MySql+Python的站内搜索引擎的设计与实现 [J], 周安
4.Sphinx+ Python +Oracle构建全文检索系统 [J], 徐佳男
5.基于Sphinx的社交网络搜索引擎的设计与分析 [J], 孙逸敏
因版权原因,仅展示原文概要,查看原文内容请购买。
Coreseek 全文检索服务器 2.0 (Sphinx 0.9.8)参考手册
文档Coreseek 全文检索服务器2.0 (Sphinx 0.9.8)参考手册文档版本:v0.9目录1. 简介1.1. 什么是Sphinx1.2. Sphinx 的特性1.3. 如何获得Sphinx1.4. 许可协议1.5. 作者和贡献者1.6. 开发历史2. 安装2.1. 支持的操作系统2.2. 依赖的工具2.3. 安装Sphinx2.4. 已知的问题和解决方法2.5. Sphinx 快速入门教程3. 建立索引3.1. 数据源3.2. 属性3.3. 多值属性( MV A :multi-valued attributes)3.4. 索引3.5. 数据源的限制3.6. 字符集, 大小写转换, 和转换表3.7. SQL 数据源(MySQL, PostgreSQL)3.8. xmlpipe 数据源3.9. xmlpipe2 数据源3.10. 实时索引更新3.11. 索引合并4. 搜索4.1. 匹配模式4.2. 布尔查询4.3. 扩展查询4.4. 权值计算4.5. 排序模式4.6. 结果分组(聚类)4.7. 分布式搜索4.8. searchd 日志格式5. API 参考5.1. 通用API 方法5.1.1. GetLastError5.1.2. GetLastWarning5.1.3. SetServer5.1.4. SetRetries5.1.5. SetArrayResult5.2. 通用搜索设置5.2.1. SetLimits5.2.2. SetMaxQueryTime5.3. 全文搜索设置5.3.1. SetMatchMode5.3.2. SetRankingMode5.3.3. SetSortMode5.3.4. SetWeights5.3.5. SetFieldWeights5.3.6. SetIndexWeights5.4. 结果集过滤设置5.4.1. SetIDRange5.4.2. SetFilter5.4.3. SetFilterRange5.4.4. SetFilterFloatRange5.4.5. SetGeoAnchor5.5. GROUP BY 设置5.5.1. SetGroupBy5.5.2. SetGroupDistinct5.6. 搜索5.6.1. Query5.6.2. AddQuery5.6.3. RunQueries5.6.4. ResetFilters5.6.5. ResetGroupBy5.7. 额外的方法5.7.1. BuildExcerpts5.7.2. UpdateAttributes6. MySQL 存储引擎(SphinxSE)6.1. SphinxSE 概览6.2. 安装SphinxSE6.2.1. 在MySQL 5.0.x 上编译SphinxSE6.2.2. 在MySQL 5.1.x 上编译SphinxSE6.2.3. SphinxSE 安装测试6.3. 使用SphinxSE7. 报告bugs8. sphinx.conf 选项参考8.1. Data source 配置选项8.1.1. type8.1.2. sql_host8.1.3. sql_port8.1.4. sql_user8.1.5. sql_pass8.1.6. sql_db8.1.7. sql_sock8.1.8. mysql_connect_flags8.1.9. sql_query_pre8.1.10. sql_query8.1.11. sql_query_range 8.1.12. sql_range_step8.1.13. sql_attr_uint8.1.14. sql_attr_bool8.1.15. sql_attr_timestamp8.1.16. sql_attr_str2ordinal8.1.17. sql_attr_float8.1.18. sql_attr_multi8.1.19. sql_query_post8.1.20. sql_query_post_index8.1.21. sql_ranged_throttle8.1.22. sql_query_info8.1.23. xmlpipe_command8.1.24. xmlpipe_field8.1.25. xmlpipe_attr_uint8.1.26. xmlpipe_attr_bool8.1.27. xmlpipe_attr_timestamp8.1.28. xmlpipe_attr_str2ordinal8.1.29. xmlpipe_attr_float8.1.30. xmlpipe_attr_multi8.2. 索引配置选项8.2.1. type8.2.2. source8.2.3. path8.2.4. docinfo8.2.5. mlock8.2.6. morphology8.2.7. stopwords8.2.8. wordforms8.2.9. exceptions8.2.10. min_word_len8.2.11. charset_type8.2.12. charset_table8.2.13. ignore_chars8.2.14. min_prefix_len8.2.15. min_infix_len8.2.16. prefix_fields8.2.17. infix_fields8.2.18. enable_star8.2.19. ngram_len8.2.20. ngram_chars8.2.21. phrase_boundary8.2.22. phrase_boundary_step8.2.23. html_strip8.2.24. html_index_attrs8.2.25. html_remove_elements8.2.26. local8.2.27. agent8.2.28. agent_connect_timeout8.2.29. agent_query_timeout8.2.30. preopen8.2.31. charset_dictpath 8.3. indexer 程序配置选项8.3.1. mem_limit8.3.2. max_iops8.3.3. max_iosize8.4. searchd 程序配置选项8.4.1. address8.4.2. port8.4.3. log8.4.4. query_log8.4.5. read_timeout8.4.6. max_children8.4.7. pid_file8.4.8. max_matches8.4.9. seamless_rotate8.4.10. preopen_indexes8.4.11. unlink_old1. 简介1.1. 什么是SphinxSphinx 是一个在GPLv2 下发布的一个全文检索引擎,商业授权(例如, 嵌入到其他程序中)需要联系我们()以获得商业授权。
全文搜索引擎有哪些
全文搜索引擎有哪些引言全文搜索引擎是一种用于根据关键词在大规模文本数据中检索相关信息的工具。
它可以帮助用户快速地找到所需的文档、文章、网页等内容,是现代信息检索领域的关键技术之一。
全文搜索引擎在互联网搜索、企业文档管理等领域发挥着重要的作用。
本文将介绍几种常见的全文搜索引擎及其特点。
全文搜索引擎的定义及应用场景全文搜索引擎是一种检索系统,可以根据关键词在大规模文本数据中进行快速搜索。
它通过对文本进行分词、索引等操作,建立起一个高效的关键词-文档倒排索引,用户可以通过输入关键词来获取相关的文档。
全文搜索引擎已经广泛应用于互联网搜索、企业文档管理、电子图书馆等领域。
全文搜索引擎的特点是快速、精确和高可靠性。
它采用先进的索引技术和搜索算法,能够在海量数据中快速找到相关的文档,大大提高了用户的检索效率。
此外,全文搜索引擎还支持高度定制化的搜索功能,用户可以根据自己的需求进行过滤、排序等操作。
全文搜索引擎的分类根据全文搜索引擎的架构和实现方式,可以将其分为两种类型:基于关系数据库的搜索引擎和基于倒排索引的搜索引擎。
基于关系数据库的搜索引擎是利用关系数据库的索引和查询机制来实现全文搜索。
它将文本数据存储在关系数据库中,并使用数据库的索引机制进行搜索。
这种全文搜索引擎具有较高的可靠性和易用性,但在处理大规模数据时性能较低。
基于倒排索引的搜索引擎是一种目前较为主流的全文搜索引擎实现方式。
它通过对文本进行分词、建立倒排索引等操作,将文本数据存储在倒排索引中,并利用倒排索引进行搜索。
这种全文搜索引擎具有较高的搜索速度和灵活性,在处理大规模数据时性能较好。
常见的全文搜索引擎下面将介绍几种常见的全文搜索引擎及其特点:1. Elasticsearch:Elasticsearch是一种基于Lucene的开源搜索引擎。
它具有横向扩展能力强、高性能、分布式、可靠性高等特点。
Elasticsearch支持全文搜索、分布式实时分析等功能,广泛应用于企业搜索、日志分析、产品推荐等领域。
manticoresearch 用法
manticoresearch 用法Manticore Search是一个基于开源搜索引擎Sphinx开发的全文检索解决方案。
它提供了强大的搜索和分析功能,是许多企业和网站用于构建高性能搜索引擎和复杂信息检索系统的首选工具。
Manticore Search的用法非常灵活,既可以作为单机版本使用,也可以通过分布式部署来处理大规模数据。
以下是一些关于Manticore Search的用法和功能的相关参考内容。
1. 安装和配置你可以在Manticore Search的官方网站上找到详细的安装和配置指南,这将帮助你快速启动Manticore Search并进行基本配置。
这些指南提供了在各种操作系统上安装Manticore Search的详细说明,以及如何设置索引和搜索项。
2. 索引和搜索Manticore Search支持多种类型的索引,包括全文搜索、属性过滤和地理位置搜索等。
它还支持多核和高性能,可以快速处理大规模的数据。
你可以使用索引创建语句来定义要索引的数据和字段,并使用搜索查询语句来检索匹配的结果。
3. 查询扩展Manticore Search提供了丰富的查询扩展功能,可以帮助你更灵活地构建复杂的搜索查询。
例如,你可以利用词根扩展和近似搜索来处理拼写错误或变体词,或者使用语义扩展来实现更智能的搜索。
此外,还可以使用布尔运算符和范围查询来进一步过滤和筛选结果。
4. 分布式部署Manticore Search还支持分布式部署,可以将数据和查询负载分布到多个节点上。
这种部署方式可以提高搜索性能和容错能力,并支持水平扩展来应对大量的数据和用户请求。
你可以根据需求设置不同的节点角色和复制策略,以实现更高的可靠性和可用性。
5. 安全性和访问权限Manticore Search提供了一套完整的安全性和访问权限机制,可以帮助你保护搜索引擎和数据的安全。
你可以配置用户和角色,并设置细粒度的权限控制,以限制用户的访问范围和操作权限。
sphinx全文检索之PHP使用教程
sphinx全文检索之PHP使用教程这是半年前没有对外写的文章,现在拿出来分享下。
可能会有一些不正确或不严谨的地方,某些语言可能比较轻浮,请见谅。
以上一篇的email数据表为例:数据结构:使用打开控制台,必需打开控制台PHP才能连接到sphinx(确保你已经建立好索引源):d:\coreseek\bin\searchd -c d:\coreseek\bin\sphinx.confcoreseek/api目录下提供了PHP的接口文件sphinxapi.php,这个文件包含一个SphinxClient的类在PHP引入这个文件,new一下';$result是一个数组,其中total是匹配到的数据总数量matches是匹配的数据,包含id,attrs这些信息words是搜索关键字的分词你可能奇怪为什么没有邮件的内容这些信息,其实sphinx并不会返回像mysql那样的数据数组,因为sphinx本来就没有记录完整的数据,只记录被分词后的数据。
具体还要看matches数组,matches中的ID就是指配置文件中sql_query SELECT语句中的第一个字段,我们配置文件中是这样的sql_query = SELECT emailid,fromid,toid,subject,content,sendtime,attachement FROM email所以matches中的ID是指emailid至于weight是指匹配的权重,一般权重越高被返回的优先度也最高,匹配权重相关内容请参考官方文档attrs是配置文件中sql_attr_ 中的信息,稍后会提到这些属性的用法说了这么多,即使搜索到结果也不是我们想要的email数据,但事实sphinx是不记录真实数据的,所以要获取到真实email数据还要根据matches中的ID去搜索mysql的email表,但总体来说这样一来一回的速度还是远远比mysql的LIKE快得多,前提是几十万数据量以上,否则用sphinx只会更慢。
Windows下安装使用Sphinx
Windows下安装使用S phinxlamp服务1使用PHP+Sphinx建立高效的站内搜索引擎1. 为什么要使用S p hinx假设你现在运营着一个论坛,论坛数据已经超过100W,很多用户都反映论坛搜索的速度非常慢,那么这时你就可以考虑使用S p hinx了(当然其他的全文检索程序或方法也行)。
2. Sphinx是什么Sphinx由俄罗斯人An drew Aksyono ff 开发的高性能全文搜索软件包,在GPL与商业协议双许可协议下发行。
全文检索是指以文档的全部文本信息作为检索对象的一种信息检索技术。
检索的对象有可能是文章的标题,也有可能是文章的作者,也有可能是文章摘要或内容。
3. Sphinx的特性l 高速索引 (在新款CPU上,近10 MB/秒);l 高速搜索 (2-4G的文本量中平均查询速度不到0.1秒);l 高可用性 (单CPU上最大可支持100 GB的文本,100M文档);l 提供良好的相关性排名l 支持分布式搜索;l 提供文档摘要生成;l 提供从MySQ L内部的插件式存储引擎上搜索l 支持布尔,短语, 和近义词查询;l 支持每个文档多个全文检索域(默认最大32个);l 支持每个文档多属性;l 支持断词;l 支持单字节编码与U TF-8编码;4. 下载并安装Sp hinx打开网址http://www.coresee /news/7/52/ 找到适合自己的操作系统的版本,比如我是Windows那么我就可以下载C oresee k Win32通用版本,Linux下可以下载源码包,自己编译安装。
这里解释下为什么我们下载的程序叫Coreseek,Coresee k是基于Sp hinx开发的一款软件,对Sphinx做了一些改动,在中文方面支持得比Sphi nx好,所以我们使用之。
强大的开源全文检索引擎——Sphinx
L c n 可 以嵌 入到 其他应 用使 用。相对 Xa in uee pa
而 言 ,S hn 更 具 有 优 势 : p ix ・开发 团 队活跃 ,社 区支持 活跃 ,文档详 细 ,案例 丰 富 ; ・功 能 更 全 面 ,可 靠 性 更 好 ; ・分 布 式 搜 索 更 灵 活 ;
术 社 区 ,狂 热 的 开 源 爱 好 者 和 传 播 者 ;在 Chn Unx 任 w e 服 务 ia i担 b
器 、PH P、W e 开 发 、互联 网行 业 b
四个 版 面 的资 深 技 术 版 主 。
一 责任编辑:高松 ( a s n @c d e) g o o g s nn t 2 O1 0 127 1 3
作 为 一 款 高 性 能 的 全 文 检 索 引擎 , S hn P to 、R b 、Jv 、CC +、C 等 ; 同 时 ,还 p ix yh n u y a a /+ 撑 支持使用S L 法进行查询 。 Q 语
・基 于 c++开 发 , 相 对 于 基 于 J v 的 a a
有 主 流 的 Li u 、 BS n x D、 M a OS、 S l r s c o ai 、
1 26 程序 员
・提供对互 联网黄金搭档 P . S L的完 HPMy Q
口, 可 以作 为 My QL 储 引擎 使 用 , 自身 也 可 S 存
L c n , 绝 对 称 得 上 短 小 精 干 , 同 时 支 持 在 所 美 结 合 ,提 供 了P 扩 展 和 P 代 码 的 查 询 接 ue e HP HP
从 2 0 年 开 始 ,我 们 基 于 S hn 开 发 了 专 用 性 。 06 p ix 门针对 中文环境 使用 的版本 一
Coreseek全文检索服务器2.0(Sphinx0.9.8)参考手册
Coreseek全⽂检索服务器2.0(Sphinx0.9.8)参考⼿册⽂档Coreseek 全⽂检索服务器2.0 (Sphinx 0.9.8)参考⼿册⽂档版本:v0.9⽬录1. 简介1.1. 什么是Sphinx1.2. Sphinx 的特性1.3. 如何获得Sphinx1.4. 许可协议1.5. 作者和贡献者1.6. 开发历史2. 安装2.1. ⽀持的操作系统2.2. 依赖的⼯具2.3. 安装Sphinx2.4. 已知的问题和解决⽅法2.5. Sphinx 快速⼊门教程3. 建⽴索引3.1. 数据源3.2. 属性3.3. 多值属性( MV A :multi-valued attributes)3.4. 索引3.5. 数据源的限制3.6. 字符集, ⼤⼩写转换, 和转换表3.7. SQL 数据源(MySQL, PostgreSQL)3.8. xmlpipe 数据源3.9. xmlpipe2 数据源3.10. 实时索引更新3.11. 索引合并4. 搜索4.1. 匹配模式4.2. 布尔查询4.3. 扩展查询4.4. 权值计算4.5. 排序模式4.6. 结果分组(聚类)4.7. 分布式搜索4.8. searchd ⽇志格式5. API 参考5.1. 通⽤API ⽅法5.1.1. GetLastError5.1.2. GetLastWarning5.1.3. SetServer5.1.4. SetRetries5.1.5. SetArrayResult5.2. 通⽤搜索设置5.2.1. SetLimits5.2.2. SetMaxQueryTime5.3. 全⽂搜索设置5.3.1. SetMatchMode5.3.2. SetRankingMode5.3.3. SetSortMode5.3.4. SetWeights5.3.5. SetFieldWeights5.3.6. SetIndexWeights5.4. 结果集过滤设置5.4.1. SetIDRange5.4.2. SetFilter5.4.3. SetFilterRange5.4.4. SetFilterFloatRange5.4.5. SetGeoAnchor5.5. GROUP BY 设置5.5.1. SetGroupBy5.5.2. SetGroupDistinct5.6. 搜索5.6.1. Query5.6.2. AddQuery5.6.3. RunQueries5.6.4. ResetFilters5.6.5. ResetGroupBy5.7. 额外的⽅法5.7.1. BuildExcerpts5.7.2. UpdateAttributes6. MySQL 存储引擎(SphinxSE)6.1. SphinxSE 概览6.2. 安装SphinxSE6.2.1. 在MySQL 5.0.x 上编译SphinxSE6.2.2. 在MySQL 5.1.x 上编译SphinxSE6.2.3. SphinxSE 安装测试6.3. 使⽤SphinxSE7. 报告bugs8. sphinx.conf 选项参考8.1. Data source 配置选项8.1.1. type8.1.2. sql_host8.1.3. sql_port8.1.4. sql_user8.1.5. sql_pass8.1.6. sql_db8.1.7. sql_sock8.1.8. mysql_connect_flags8.1.9. sql_query_pre8.1.10. sql_query8.1.11. sql_query_range 8.1.12. sql_range_step 8.1.13. sql_attr_uint8.1.14. sql_attr_bool8.1.15. sql_attr_timestamp8.1.16. sql_attr_str2ordinal8.1.17. sql_attr_float8.1.18. sql_attr_multi8.1.19. sql_query_post8.1.20. sql_query_post_index8.1.21. sql_ranged_throttle8.1.22. sql_query_info8.1.23. xmlpipe_command8.1.24. xmlpipe_field8.1.25. xmlpipe_attr_uint8.1.26. xmlpipe_attr_bool8.1.27. xmlpipe_attr_timestamp8.1.28. xmlpipe_attr_str2ordinal8.1.29. xmlpipe_attr_float8.1.30. xmlpipe_attr_multi8.2. 索引配置选项8.2.1. type8.2.2. source8.2.3. path8.2.4. docinfo8.2.5. mlock8.2.6. morphology8.2.7. stopwords8.2.8. wordforms8.2.9. exceptions8.2.10. min_word_len8.2.11. charset_type8.2.12. charset_table8.2.13. ignore_chars8.2.14. min_prefix_len8.2.15. min_infix_len8.2.16. prefix_fields8.2.17. infix_fields8.2.18. enable_star8.2.19. ngram_len8.2.20. ngram_chars8.2.21. phrase_boundary8.2.22. phrase_boundary_step8.2.23. html_strip8.2.24. html_index_attrs8.2.25. html_remove_elements8.2.26. local8.2.27. agent8.2.28. agent_connect_timeout8.2.29. agent_query_timeout8.2.30. preopen8.2.31. charset_dictpath 8.3. indexer 程序配置选项8.3.1. mem_limit8.3.2. max_iops8.3.3. max_iosize8.4. searchd 程序配置选项8.4.1. address8.4.2. port8.4.3. log8.4.4. query_log8.4.5. read_timeout8.4.6. max_children8.4.7. pid_file8.4.8. max_matches8.4.9. seamless_rotate8.4.10. preopen_indexes8.4.11. unlink_old1. 简介1.1. 什么是SphinxSphinx 是⼀个在GPLv2 下发布的⼀个全⽂检索引擎,商业授权(例如, 嵌⼊到其他程序中)需要联系我们(/doc/9ee0e07feefdc8d377ee320a.html )以获得商业授权。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18: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的方式将列组合起来,升序或降序排列。
SPH_SORT_EXPR 模式,按某个算术表达式排序。
排序实例$sphinxclient->SetSortMode(SPH_SORT_ATTR_DESC,'group_id'); // 按组id倒序排列索引的合并当已有的数据非常大,比如100万条商品信息, 每天新增的较少,比如1000个商品这时,每增加1个商品, 就全新生成索引的话,IO 操作很耗时. 我们可以用”索引合并”.索引合并的IO 代价比全新生成要小,索引合并命令:/pach/sphinx/bin/indexer -c /path/conf -merge 主索引 增量索引 ---rotate1:增量索引的传统方法具体描述:创建1张表做主索引已索引行的计数器, 每隔5分钟,生成增量索引,合并到主索引 并且------把当前最大的id 更新到计数器2: 增量索引的新方法具体做法:1: 生成主索引,写入计数器2: 每5分钟,根据计数器,全新生成增量索引3: 每晚凌晨负载低时,合并主索引+增量索引4: 每周固定某时间,全新生成总索引疑问: 1天内,岂不是都查询不到增量索引的内容?答: 查询是可以从多个索引来查询的分布式索引原理:定义一个类型为distribute的索引,并设置后台真正的索引源(本索引只是一个前台代理)索引源可以是远程主机,通过HOST/IP来访问index distribute {type = distributedagent = 192.168.1.199:9312:shopagent = 192.168.1.199:9312:incre}索引源也可以是本地的index distribute {type = distributedLocal = shopLocal = incre}如果:索引都是本地的,有什么意义呢?1: 可以用的主索引+分布式索引的同时搜索上(不合并状态,从2个索引搜索) 2: 多核CPU的优化,可以更充分的利用多CPU的优势。