一、sphinx的基本介绍1、使用背景当对大文本数据进行单词匹配查询时如有一个歌曲网站数据库中收集着上百万首歌曲的信息如果要查询出歌词中带“爱情”的所有歌曲典型的做法是执行如下SQL语句ELECT * FROM songs WHERE content LIKE %爱情%。但是在MYSQL中以%开头的查询无法使用索引所以这条SQL语句将执行全表扫描性能极差。MyISAM引擎中的全文索引是专门对文本创建索引的但对中文的支持不好。好的解决方案使用sphinx !2、sphinx的原理第一步对应数据源建立索引中文分词技术今天 1下雨 1明天 1,2,3学习 2第二步执行查询返回查询到单词所在,mysql里面记录的idphp要把查询的单词给sphinx软件软件拿到要查询的单词后从索引里面进行匹配。返回该单词在mysql表里面记录的id、php拿到单词所在的额id后根据该id去mysql里面查找数据。3、什么是CoreseekCoreseek 是一款中文全文检索/搜索软件,基于Sphinx研发并独立发布专攻中文搜索和信息处理领域适用于行业/垂直搜索、论坛/站内搜索数据库搜索、文档/文献检索、信息检索、数据挖掘等应用场景二、开始安装执行1、下载软件解压后拷贝到指定的目录2、建立一个sphinx的配置文件。拷贝一份csft_mysql.conf文件到上一级目录并改名为shpinx.conf3、建立索引配置数据源 配置索引 配置服务器端的信息。1配置数据源语法source 数据源的名字在一个配置文件中可以配置多个数据源的。2针对数据源配置索引一个数据源对应一个索引的配置语法index 索引的名字3配置sphinx服务器端信息。4、根据sphinx.conf的配置创建索引以超级管理员以进入进入到d:/Apache/sphinx/bin目录语法indexer -c 配置文件 索引的名字建立的索引文件。5、安装sphinx(coreseek)启动服务,以管理员进入cmd进入到sphinx/bin目录使用searchd.exe命令语法searchd -c 配置文件 --install启动服务默认的端口号是9312总结1针对数据源建立索引要配置的是数据源数据源对应的索引服务器端配置使用indexer命令完成索引的创建。2启动sphinx的服务进行查询三、使用php查询测试1、要拷贝sphinx的接口文件到php项目中来。具体的代码四、查询的关键词要添加样式显示使用$sc-buildExcerpts()来完成对应关键词添加样式来显示$sc-buildExcerpts(一条记录的数组索引的名字查询的关键词,关键词添加的样式)$sc-buildExcerpts(一条记录的数组索引的名字查询的关键词,array(‘before_match’’font color”red”/’,‘after_match’’/font’))该函数返回的是一个索引的数组因此在输出时要使用下标来显示五、SPHINX的匹配模型1、SPH_MATCH_ALL 完全匹配所有的词如“冬天 的 雪”并不会匹配 “我爱冬天”,但可以匹配 “我的朋友爱冬天和雪”。因为“冬天的雪” 被分成 “冬天”“的”“雪”三个词匹配条件是同时包含这三个词“我爱冬天”里只包含一个“冬天”2、SPH_MATCH_ANY: 匹配任意一个词如“冬天 的 雪”并会匹配 “我爱冬天”。冬天的雪“ -》 ”冬天“ ”的“ ”雪“因为“我爱冬天”里有一个“冬天”相匹配。六、增量索引建立原来有1000万条记录建立完成索引了后来又添加了500条记录思路把后面添加的记录单独建立索引建立的增量索引再合并到主索引上面。具体实时1新建一张表用于记录电影最大的id,当主索引建完之后表里面就记录最大的id,2建立增量索引是主查询就使用条件了。select id,title,description from dede_archives where id(select max_id from a)步骤1新建一张表create table a(max_id int);2修改主数据源3添加增量数据源4配置增量索引5重新建立主索引添加数据进行建立增量索引6把增量索引合并到主索引上面indexer -c配置文件 --merge 主索引的名字 增量索引的名字 --rotate(不关闭服务强制