关闭

关闭

关闭

封号提示

内容

首页 Sphinx搜索引擎架构与使用文档(和MySQL结合)V1.1

Sphinx搜索引擎架构与使用文档(和MySQL结合)V1.1.doc

Sphinx搜索引擎架构与使用文档(和MySQL结合)V1.1

dou0_0 2011-02-17 评分 0 浏览量 0 0 0 0 暂无简介 简介 举报

简介:本文档为《Sphinx搜索引擎架构与使用文档(和MySQL结合)V1.1doc》,可适用于IT/计算机领域,主题内容包含Sphinx搜索引擎架构与使用文档(和MySQL结合)V作者:张宴(http:blogscom)时间:本文档修订历史:版本号修订人修订说明张宴新建张符等。

Sphinx搜索引擎架构与使用文档(和MySQL结合)V作者:张宴(http:blogscom)时间:本文档修订历史:版本号修订人修订说明张宴新建张宴增加搜索索引配置张宴增加在指定字段中搜索的SQL实例张宴修正小错误说明:水绿色背景表示LinuxShell命令、橄榄色背景表示MySQL的SQL语句、淡蓝色背景表示配置文件内容、黑底白字表示屏幕显示内容。目录TOCt"my,,my,,my,,my,"一、XX网搜索引擎架构设计:、搜索引擎架构图(基于PHPMySQLSphinx):、搜索引擎架构设计思路:、调用方式最简化:、创建索引、查询速度快:、按服务类型进行分离:、“主索引+增量索引”更新方式:、“Ext文件系统+tmpfs内存文件系统”相结合:、中文分词词库:二、MySQLSphinxSphinxSE安装步骤:、安装python支持、编译安装LibMMSeg、编译安装MySQLrc、Sphinx、SphinxSE存储引擎、创建Sphinx索引文件和MySQL数据文件存放目录、创建MySQL配置文件(以线上配置文件为准)、创建配置文件mysqlmycnf(以db的端口为例)、创建配置文件mysqlmycnf(以db的端口为例)、制作一份MySQLSlave供搜索引擎使用、创建快捷启动、停止、重启、杀死MySQL进程的脚本(以db的端口为例)三、Sphinx配置:、生成Sphinx中文分词词库、词典的构造、词典文件格式、XX网搜索引擎的中文分词词库、创建Sphinx主索引文件、增量索引文件存放目录、创建Sphinx配置文件、初始化sphinxconf中配置的全部索引、创建两个shell脚本一个用来创建主索引、一个用来创建增量索引。、主索引更新脚本、创建脚本buildmainindexsh:、赋予主索引更新脚本可执行权限:、每天凌晨定时重建主索引:、增量索引更新脚本、创建脚本builddeltaindexsh:、赋予增量索引更新脚本可执行权限:、每分钟自动重建一次搜索引擎的增量索引:、启动Sphinx守护进程(searchd)、配置服务器开机启动时需要自动执行的命令(以db为例)、创建Sphinx存储引擎表:、设置etchosts、登录运行在端口的MySQL服务器(提供“搜索查询服务”):、创建数据库“Sphinx”和相对应的Sphinx表(SQL语句):示例SQL:四、如何通过SQL语句调用搜索引擎:、搜索应用实例、XX网北京出租房搜索、XX网北京小区搜索、在指定字段中搜索(例如在字段“title”中搜索关键字“中关村”)、SphinxSE存储引擎及SQL语法详细说明一、XX网搜索引擎架构设计:、搜索引擎架构图(基于PHPMySQLSphinx):注:目前有两台搜索数据库db()(MySQL端口用于搜索查询、端口用于建索引)和db()(MySQL、端口用于搜索查询端口用于建索引)dbsearch为NetScaler虚拟IP(做db的db的、负载均衡)的hosts。、搜索引擎架构设计思路:、调用方式最简化:尽量方便前端Web工程师只需要一条简单的SQL语句“SELECTFROMJOINON(=)WHEREquery=''”即可实现高效搜索。、创建索引、查询速度快:、SphinxSearch是由俄罗斯人AndrewAksyonoff开发的高性能全文搜索软件包在GPL与商业协议双许可协议下发行。Sphinx的特征:Sphinx支持高速建立索引(可达MB秒而Lucene建立索引的速度是MB秒)高性能搜索(在GB的文本上搜索平均秒内获得结果)高扩展性(在单一CPU上实测最高可对GB的文本建立索引单一索引可包含亿条记录)支持分布式检索支持基于短语和基于统计的复合结果排序机制支持任意数量的文件字段(数值属性或全文检索属性)支持不同的搜索模式(“完全匹配”“短语匹配”和“任一匹配”)支持作为Mysql的存储引擎、通过国外《HighPerformanceMySQL》专家组的测试可以看出根据主键进行查询的类似“SELECTFROMWHEREid=”的SQL语句(其中id为PRIMARYKEY)每秒钟能够处理次以上的查询而普通的SELECT查询每秒只能处理几十次到几百次:、Sphinx不负责文本字段的存储。假设将数据库的id、date、title、body字段用sphinx建立搜索索引。根据关键字、时间、类别、范围等信息查询一下sphinxsphinx只会将查询结果的ID号告诉我们。要显示title、body等信息还需要根据此ID号去查询MySQL数据库或者从Memcachedb等其他的存储中取得。安装SphinxSE作为MySQL的存储引擎将MySQL与Sphinx结合起来是一种便捷的方法。创建一张Sphinx类型表将MyISAM表的主键ID和Sphinx表的ID作一个JOIN联合查询。这样对于MyISAM表来所只相当于一个WHEREid=的主键查询WHERE后的条件都交给Sphinx去处理可以充分发挥两者的优势实现高速搜索查询。、按服务类型进行分离:为了保证数据的一致性我在配置Sphinx读取索引源的MySQL数据库时进行了锁表。Sphinx读取索引源的过程会耗费一定时间由于MyISAM存储引擎的读锁和写锁是互斥的为了避免写操作被长时间阻塞导致数据库同步落后跟不上我将提供“搜索查询服务”的和提供“索引源服务”的MySQL数据库进行了分开。监听端口的MySQL提供“搜索查询服务”监听端口的MySQL提供“索引源服务”。、“主索引+增量索引”更新方式:XX网的特征:发帖较为频繁刚发完的帖被用户自己编辑、修改的可能性大新发的帖会被编辑审核(删除、标记为中介等)两天以前的老帖变动性较小。基于这个特征我设计了Sphinx主索引和增量索引。对于前天:之前的记录建立主索引每天凌晨自动重建一次主索引对于前天:之后到当前最新的记录间隔分钟自动重建一次增量索引。、“Ext文件系统+tmpfs内存文件系统”相结合:为了避免每分钟重建增量索引导致磁盘IO较重从而引起系统负载上升我将主索引文件创建在磁盘增量索引文件创建在tmpfs内存文件系统“devshm”内。“devshm”内的文件全部驻留在内存中读写速度非常快。但是重启服务器会导致“devshm”内的文件丢失针对这个问题我会在服务器开机时自动创建“devshm”内目录结构和Sphinx增量索引。、中文分词词库:XX网搜索引擎使用到的中文分词词库为本人根据“百度早期中文分词库”+“搜狗拼音输入法细胞词库”+“XX网地标词库”“LibMMSeg高频字库”综合处理而成。二、MySQLSphinxSphinxSE安装步骤:、安装python支持(以下针对CentOS系统其他Linux系统请使用相应的方法安装)yuminstallypythonpythondevel、编译安装LibMMSeg(LibMMSeg是为Sphinx全文搜索引擎设计的中文分词软件包其在GPL协议下发行的中文分词法采用ChihHaoTsai的MMSEG算法。LibMMSeg在本文中用来生成中文分词词库。)wgethttp:wwwcoreseekcomuploadssourcesmmsegtargztarzxvfmmsegtargzcdmmsegconfiguremakemakeinstallcd、编译安装MySQLrc、Sphinx、SphinxSE存储引擎wgethttp:blogscomsoftlinuxnginxphpmysqlmysqlrctargztarzxvfmysqlrctargzwgethttp:wwwsphinxsearchcomdownloadssphinxrctargzwgethttp:wwwcoreseekcomuploadssourcessphinxrczhcnsupportpatchwgethttp:wwwcoreseekcomuploadssourcesfixcrashinexcerptspatchtarzxvfsphinxrctargzcdsphinxrcpatchp<sphinxrczhcnsupportpatchpatchp<fixcrashinexcerptspatchcprfmysqlsemysqlrcstoragesphinxcdcdmysqlrcshBUILDautorunshconfigurewithplugins=sphinxprefix=usrlocalmysqlsearchenableassemblerwithextracharsets=complexenablethreadsafeclientwithbigtableswithreadlinewithsslwithembeddedserverenablelocalinfilemakemakeinstallcdcdsphinxrcCPPFLAGS=IusrincludepythonLDFLAGS=lpythonconfigureprefix=usrlocalsphinxwithmysql=usrlocalmysqlsearchmakemakeinstallcd、创建Sphinx索引文件和MySQL数据文件存放目录(mysqldata和mysqldata)mkdirpusrlocalsphinxvardatabeijinghousemkdirpusrlocalsphinxvardatashanghaihousemkdirpusrlocalsphinxvardataguangzhouhousemkdirpusrlocalsphinxvardatawuhanhousemkdirpusrlocalsphinxvardatananjinghousemkdirpusrlocalsphinxvardatatianjinhousemkdirpusrlocalsphinxvardatashenzhenhousemkdirpusrlocalsphinxvardataqitahousemkdirpdevshmsphinxvardatabeijinghousemkdirpdevshmsphinxvardatashanghaihousemkdirpdevshmsphinxvardataguangzhouhousemkdirpdevshmsphinxvardatawuhanhousemkdirpdevshmsphinxvardatananjinghousemkdirpdevshmsphinxvardatatianjinhousemkdirpdevshmsphinxvardatashenzhenhousemkdirpdevshmsphinxvardataqitahouseusrsbingroupaddmysqlusrsbinuseraddgmysqlmysqlchmodwusrlocalmysqlsearchchownRmysql:mysqlusrlocalmysqlsearchmkdirpmysqldatachmodwmysqldatamkdirpmysqldatachmodwmysqldatamkdirpmysqldatachmodwmysqldatachownRmysql:mysqlmysql#cpsupportfilesmymediumcnfmysqlmycnf#cpsupportfilesmymediumcnfmysqlmycnf#cpsupportfilesmymediumcnfmysqlmycnf、创建MySQL配置文件(以线上配置文件为准)、创建配置文件mysqlmycnf(以db的端口为例)vimysqlmycnf输入以下内容:client#password=yourpasswordport=socket=mysqlmysqlsockmysqldsafedatadir=mysqldatalogerror=mysqlmysqlerrorlogpidfile=mysqlmysqlpidmysqldport=socket=mysqlmysqlsockskiplocking#skipslavestartkeybuffer=Mmaxallowedpacket=Mtablecache=sortbuffersize=Mreadbuffersize=Mreadrndbuffersize=Mmaxlengthforsortdata=myisamsortbuffersize=Mthreadcache=querycachesize=M#TrynumberofCPU's*forthreadconcurrencythreadconcurrency=#skipnameresolvemaxconnections=maxconnecterrors=openfileslimit=ftminwordlen=concurrentinsert=lowpriorityupdates=slaveskiperrors=,,,,,,,serverid=#masterhost=db#masteruser=repl#masterpassword=slavepass#masterport=mysqldumpquickmaxallowedpacket=Mmysqlnoautorehash#RemovethenextcommentcharacterifyouarenotfamiliarwithSQL#safeupdatesisamchkkeybuffer=Msortbuffersize=Mreadbuffer=Mwritebuffer=Mmyisamchkkeybuffer=Msortbuffersize=Mreadbuffer=Mwritebuffer=Mmysqlhotcopyinteractivetimeout、创建配置文件mysqlmycnf(以db的端口为例)vimysqlmycnf输入以下内容:client#password=yourpasswordport=socket=mysqlmysqlsockmysqldsafedatadir=mysqldatalogerror=mysqlmysqlerrorlogpidfile=mysqlmysqlpidmysqldport=socket=mysqlmysqlsockskiplocking#skipslavestartkeybuffer=Mmaxallowedpacket=Mtablecache=sortbuffersize=Mreadbuffersize=Mreadrndbuffersize=Mmaxlengthforsortdata=myisamsortbuffersize=Mthreadcache=querycachesize=M#TrynumberofCPU's*forthreadconcurrencythreadconcurrency=#skipnameresolvemaxconnections=maxconnecterrors=openfileslimit=ftminwordlen=#lowpriorityupdates=slaveskiperrors=,,,,,,,serverid=#masterhost=db#masteruser=repl#masterpassword=slavepass#masterport=mysqldumpquickmaxallowedpacket=Mmysqlnoautorehash#RemovethenextcommentcharacterifyouarenotfamiliarwithSQL#safeupdatesisamchkkeybuffer=Msortbuffersize=Mreadbuffer=Mwritebuffer=Mmyisamchkkeybuffer=Msortbuffersize=Mreadbuffer=Mwritebuffer=Mmysqlhotcopyinteractivetimeout、制作一份MySQLSlave供搜索引擎使用、找一台MySQL从库停止同步进程(SQL语句:stopslave)、查看同步位置(SQL语句:showslavestatusG)记录以下几项值:MasterHost:dbMasterUser:replMasterPort:ConnectRetry:MasterLogFile:mysqlbinReadMasterLogPos:、可以使用导出、导入SQL的方法创建供搜索引擎使用的MySQL从库。对于MyISAM表可以直接拷贝文件(此步骤略)。、启动搜索引擎专用MySQL数据库:ulimitSHnbinshusrlocalmysqlsearchbinmysqldsafedefaultsfile=mysqlmycnfbinshusrlocalmysqlsearchbinmysqldsafedefaultsfile=mysqlmycnf、从命令行登录MySQL服务器(此步骤略)。、设置同步点并启动同步(SQL语句如下):CHANGEmasterTOmasterhost="db",masteruser="repl",masterpassword="slavepass",masterlogfile="mysqlbin",masterlogpos=STARTSLAVE、创建快捷启动、停止、重启、杀死MySQL进程的脚本(以db的端口为例)vimysqlmysql输入以下内容:#!binshmysqlport=mysqlusername="root"mysqlpassword="itsstyl"functionstartmysql(){printf"StartingMySQLn"binshusrlocalmysqlsearchbinmysqldsafedefaultsfile=mysql${mysqlport}mycnf>>dev}functionstopmysql(){printf"StopingMySQLn"usrlocalmysqlsearchbinmysqladminu${mysqlusername}p${mysqlpassword}Smysql${mysqlport}mysqlsockshutdown}functionrestartmysql(){printf"RestartingMySQLn"functionstopmysqlfunctionstartmysql}functionkillmysql(){kill$(psef|grep'binmysqldsafe'|grep${mysqlport}|awk'{printf$}')kill$(psef|grep'libexecmysqld'|grep${mysqlport}|awk'{printf$}')}if"$"="start"thenfunctionstartmysqlelif"$"="stop"thenfunctionstopmysqlelif"$"="restart"thenfunctionrestartmysqlelif"$"="kill"thenfunctionkillmysqlelseprintf"Usage:mysql${mysqlport}mysql{start|stop|restart|kill}n"fi赋予脚本可执行权限:chmodxmysqlmysql脚本执行方法:mysqlmysqlstartmysqlmysqlstopmysqlmysqlrestartmysqlmysqlkill注:用同样的方法创建另一个shell脚本“mysqlmysql”输入以上内容将上文中用红色标注的MySQL端口换成三、Sphinx配置:、生成Sphinx中文分词词库mmseguunigramtxtcpunigramtxtuniusrlocalsphinxetcunilib、词典的构造mmseguunigramtxt该命令执行后将会产生一个名为unigramtxtuni的文件将该文件改名为unilib完成词典的构造。需要注意的是unigramtxt必须为编码。、词典文件格式河x:造假者x:台北队x:湖边其中每条记录分两行。其中第一行为词项其格式为:词条t词频率。需要注意的是对于单个字后面跟这个字作单字成词的频率这个频率需要在大量的预先切分好的语料库中进行统计用户增加或删除词时一般不需要修改这个数值对于非单字词词频率处必须为。第二行为占位项LibMMSeg的用户只需要简单的在第二行处填"x:"即可。、XX网搜索引擎的中文分词词库XX网搜索引擎使用到的中文分词词库为本人根据“百度早期中文分词库”+“搜狗拼音输入法细胞词库”+“XX网地标词库”“LibMMSeg高频字库”综合处理而成。(双击打开)、创建Sphinx主索引文件、增量索引文件存放目录mkdirpusrlocalsphinxvardatabeijinghousemkdirpusrlocalsphinxvardatashanghaihousemkdirpusrlocalsphinxvardataguangzhouhousemkdirpusrlocalsphinxvardatawuhanhousemkdirpusrlocalsphinxvardatananjinghousemkdirpusrlocalsphinxvardatatianjinhousemkdirpusrlocalsphinxvardatashenzhenhousemkdirpusrlocalsphinxvardataqitahousemkdirpdevshmsphinxvardatabeijinghousemkdirpdevshmsphinxvardatashanghaihousemkdirpdevshmsphinxvardataguangzhouhousemkdirpdevshmsphinxvardatawuhanhousemkdirpdevshmsphinxvardatananjinghousemkdirpdevshmsphinxvardatatianjinhousemkdirpdevshmsphinxvardatashenzhenhousemkdirpdevshmsphinxvardataqitahouse、创建Sphinx配置文件(以db为例)viusrlocalsphinxetcsphinxconf输入以下内容(双击打开):、初始化sphinxconf中配置的全部索引usrlocalsphinxbinindexerall如果searchd处于运行状态则执行usrlocalsphinxbinindexerallrotate、创建两个shell脚本一个用来创建主索引、一个用来创建增量索引。、主索引更新脚本、创建脚本buildmainindexsh:viusrlocalsphinxbinbuildmainindexsh输入以下内容(双击打开):、赋予主索引更新脚本可执行权限:chmodxusrlocalsphinxbinbuildmainindexsh、每天凌晨定时重建主索引:crontabe增加以下内容:#每天凌晨点分重建一次搜索引擎的主索引***binshusrlocalsphinxbinbuildmainindexsh、增量索引更新脚本、创建脚本builddeltaindexsh:viusrlocalsphinxbinbuilddeltaindexsh输入以下内容(双击打开):、赋予增量索引更新脚本可执行权限:chmodxusrlocalsphinxbinbuilddeltaindexsh、每分钟自动重建一次搜索引擎的增量索引:crontabe增加以下内容:#每分钟自动重建一次搜索引擎的增量索引****binshusrlocalsphinxbinbuilddeltaindexsh、启动Sphinx守护进程(searchd)ulimitSHnusrlocalsphinxbinsearchd、配置服务器开机启动时需要自动执行的命令(以db为例)vietcrclocal在最末尾添加以下内容:#搜索引擎开机自动执行的命令(以下语句放在rclocal文件的最后)ulimitSHnbinshmysqlmysqlstartbinshmysqlmysqlstartbinshmysqlmysqlstartmkdirpdevshmsphinxvardatabeijinghousemkdirpdevshmsphinxvardatashanghaihousemkdirpdevshmsphinxvardataguangzhouhousemkdirpdevshmsphinxvardatawuhanhousemkdirpdevshmsphinxvardatananjinghousemkdirpdevshmsphinxvardatatianjinhousemkdirpdevshmsphinxvardatashenzhenhousemkdirpdevshmsphinxvardataqitahouse#usrbinnohupbinshusrlocalsphinxbinbuilddeltaindexsh>>dev#sleepbinshusrlocalsphinxbinbuilddeltaindexsh>>devusrlocalsphinxbinsearchd、创建Sphinx存储引擎表:、设置etchostsvietchosts添加以下内容:dbdb、登录运行在端口的MySQL服务器(提供“搜索查询服务”):usrlocalmysqlsearchbinmysqlurootpSmysqlmysqlsock、创建数据库“Sphinx”和相对应的Sphinx表(SQL语句):示例SQL:CREATEDATABASEsphinxUSEsphinxCREATETABLE`beijinghousebuylist`(`sphinxid`INTEGERNOT,`weight`INTEGERNOT,`query`VARCHAR()NOT,INDEX(`query`))ENGINE=SPHINXDEFAULTCHARSET=latinCONNECTION='sphinx::beijinghousebuylist'完整SQL(双击打开):四、如何通过SQL语句调用搜索引擎:、搜索应用实例、XX网北京出租房搜索SELECT*FROMbeijinghouserentlistJOINsphinxbeijinghouserentlistON(beijinghouserentlistsphinxid=houserentlistpostid)WHEREquery='中关村index=beijinghouserentlist,beijinghouserentlistdeltamode=booleansort=timesegments:datemaxmatches=offset=limit=range=price,,filter=districtid,'LIMIT,注:“offset=limit=”相当于“LIMIT,”注:“filter=districtid,”相当于“WHEREdistrictid=”注:“range=price,,”相当于“WHEREprice>=ANDprice<=”对于类似“WHEREprice>=”的查询在搜索中请指定一个比较大的数来实现比如“range=price,,”注:filter和range的条件值不能为负数。如果MySQL字段中有负数将其转为正整数(例如在sphinxconf中使用SELECTagentASagentFROM在搜索时也将该项值加上)。、XX网北京小区搜索SELECT*FROMbeijinghousesourceJOINsphinxbeijinghousesourceON(beijinghousesourcesphinxid=housesourceid)WHEREquery='中关村index=beijinghousesource,beijinghousesourcedeltamode=booleansort=timesegments:postatmaxmatches=offset=limit='北京小区可用的条件postat,agent,districtid,streetid,huxingshi,price、普通SQL语句SELECTtitle,id,huxingshi,huxingting,huxingwei,area,price,refreshatastime,districtid,streetid,agent,xiaoquFROMbeijinghousesourceWHEREdistrictid=''ANDstreetid=''ANDagent=''ANDpriceBETWEENANDANDhuxingshi=''AND(xiaoquLIKE'金隅丽港城'orxiaoquaddressLIKE'金隅丽港城')ORDERBYrefreshatDESCLIMIT,、以上SQL语句对应的Sphinx搜索SQL语句(相同颜色相对应)SELECTtitle,id,huxingshi,huxingting,huxingwei,area,price,refreshatastime,districtid,streetid,agent,xiaoquFROMbeijinghousesourceJOINsphinxbeijinghousesourceON(beijinghousesourcesphinxid=housesourceid)WHEREquery='金隅丽港城index=beijinghousesource,beijinghousesourcedeltamode=booleansort=timesegments:refreshatmaxmatches=offset=limit=filter=districtid,filter=streetid,filter=agent,range=price,,filter=huxingshi,'、在指定字段中搜索(例如在字段“title”中搜索关键字“中关村”)SELECTid,userid,title,agent,refreshatFROMsphinxbeijinghousesourceJOINbeijinghousesourceON(beijinghousesourcesphinxid=housesourceid)wherequery='title中关村index=beijinghousesource,beijinghousesourcedeltamode=extendedsort=attrdesc:refreshatmaxmatches=offset=limit='、SphinxSE存储引擎及SQL语法详细说明SphinxSE是一个可以编译进MySQLx版本的MySQL存储引擎它利用了该版本MySQL的插件式体系结构。SphinxSE不能用于MySQLx系列它需要MySQL或更高版本或MySQL或更高版本。尽管被称作“存储引擎”SphinxSE自身其实并不存储任何数据。它其实是一个允许MySQL服务器与searchd交互并获取搜索结果的嵌入式客户端。所有的索引和搜索都发生在MySQL之外。要通过SphinxSE搜索您需要建立特殊的ENGINE=SPHINX的“搜索表”然后使用SELECT语句从中检索把全文查询放在WHERE子句中。让我们从一个create语句和搜索查询的例子开始:CREATETABLEt(idINTEGERNOT,weightINTEGERNOT,queryVARCHAR()NOT,groupidINTEGER,INDEX(query))ENGINE=SPHINXCONNECTION="sphinx:localhost:test"SELECT*FROMtWHEREquery='testitmode=any'搜索表前三列的类型必须是INTEGERINTEGER和VARCHAR这三列分别对应文档ID匹配权值和搜索查询。查询列必须被索引其他列必须无索引。列的名字会被忽略所以可以任意命名。额外的列的类型必须是INTEGER或TIMESPTAMP之一。它们必须与Sphinx结果集中提供的属性按名称绑定即它们的名字必须与sphinxconf中指定的属性名一一对应。如果Sphinx搜索结果中没有某个属性名该列的值就为特殊的“虚拟”属性名也可以与SphinxSE列绑定。但特殊符号用sph代替。例如要取得group和count虚属性列名应使用sphgroup和sphcount。可以使用字符串参数CONNECTION来指定用这个表搜索时的默认搜索主机、端口号和索引。如果CREATETABLE中没有使用连接(connection)串那么默认使用索引名“*”(搜索所有索引)和localhost:。连接串的语法如下:CONNECTION="sphinx:HOST:PORTINDEXNAME"默认的连接串也可以日后改变:ALTERTABLEtCONNECTION="sphinx:NEWHOST:NEWPORTNEWINDEXNAME"也可以在查询中覆盖全部这些选项。如例子所示查询文本和搜索选项都应放在WHERE子句中对query列的限制中(即第三列)选项之间用分号分隔选项名与选项值用等号隔开。可以指定任意数目的选项。可用的选项如下:query查询文本mode匹配模式必须是“all”“any”“phrase”“boolean”或“extended”之一默认为“All”sort匹配项排序模式必须是“relevance”“attrdesc”“attrasc”“timesegments”或“extended”之一。除了“relevance”模式其他模式中还必须在一个冒号后附上属性名(或“extended”模式中的排序子句)。WHEREquery='testsort=attrasc:groupid'WHEREquery='testsort=extended:weightdesc,groupidasc'offset结果集中的偏移量默认是。limit从结果集中获取的匹配项数目默认为。index待搜索的索引:WHEREquery='testindex=test'WHEREquery='testindex=test,test,test'minid,maxid匹配文档ID的最小值和最大值weights逗号分隔的列表指定Sphinx全文数据字段的权值WHEREquery='testweights=,,'filter,!filter逗号分隔的列表指定一个属性名和一系列可匹配的属性值:#onlyincludegroups,andWHEREquery='testfilter=groupid,,,'#excludegroupsandWHEREquery='test!filter=groupid,,'range,!range逗号分隔的列表指定一个属性名和该属性可匹配的最小值和最大值:#includegroupsfromto,inclusiveWHEREquery='testrange=groupid,,'#excludegroupsfromtoWHEREquery='test!range=groupid,,'maxmatches此查询最大匹配的数量:WHEREquery='testmaxmatches='groupby分组(groupby)函数和属性:WHEREquery='testgroupby=day:publishedts'WHEREquery='testgroupby=attr:groupid'groupsort分组(groupby)排序子句WHEREquery='testgroupsort=countdesc'indexweights逗号分隔的列表指定一系列索引名和搜索时这些索引对应的权值WHEREquery='testindexweights=idxexact,,idxstemmed,'非常重要的注意事项:让Sphinx来对结果集执行排序、过滤和切片(slice)要比提高大匹配项数量然后在MySQL端用WHERE、ORDERBY和LIMIT子句完成对应的功能来得高效得多。这有两方面的原因。首先Sphinx对这些操作做了一些优化比MySQL效率更高一些。其次searchd可以打包更少的数据SphinxSE也可以传输和解包更少的数据。除了结果集额外的查询信息可以用SHOWENGINESPHINXSTATUS语句获得:mysql>SHOWENGINESPHINXSTATUS|Type|Name|Status||SPHINX|stats|total:,totalfound:,time:,words:||SPHIN

用户评论(0)

0/200

精彩专题

上传我的资料

每篇奖励 +1积分

资料评分:

/19
1下载券 下载 加入VIP, 送下载券

意见
反馈

立即扫码关注

爱问共享资料微信公众号

返回
顶部

举报
资料