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系统上所有的网页内容。
- 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的优势。