主页
软件技术
返回
Sphinx mysql全文索引

        Sphinx特性:

        高速的建立索引(在当代CPU上,峰值性能可达到10MB/秒);高性能的搜索(在2– 4GB的文本数据上,平均每次检索响应时间小于0.1秒);可处理海量数据(目前已知可以处理超过100GB的文本数据,在单一CPU的系统上可处理100M文档);提供了优秀的相关度算法,基于短语相似度和统计(BM25)的复合Ranking方法;支持分布式搜索;

        提供文件的摘录生成;可作为MySQL的存储引擎提供搜索服务;支持布尔、

        最大不超过短语、词语相似度等多种检索模式;文档支持多个全文检索字段(32个);文档支持多个额外的属性信息(例如:分组信息,时间戳等);停止utf-8编码;原生的MySQL支持(同时支持MyISAM查询;支持单一字节编码和UTF

        和InnoDB);原生的PostgreSQL支持.以上纯属废话,下面来看配置:下载程序文件,然后解压,放到一个目录下,放哪无所谓,关键是配置文件,这才是重点我们把sphinx.conf.in改为sphinx.conf,修改里面的配置,如下:source gccompany//source后的名称想怎么命名都行,但是index中会用到这个名字

        {//以下配置跟连接你本地数据库有莫大的关系

        type=mysql//数据库类型mysql sql_host=localhost//连接本地数据库,下面是账号、密码、数据库、端口、SET NAMES utf8这都不用说了

        sql_user=root sql_pass=330318747 sql_db=gongchang sql_port=3307

        sql_query_pre=SET NAMES utf8 sql_query=select*from f_company

        sql_attr_uint=cid//sql_attr_这就有点问题了,只有

        uint,str2ordinal,timestamp,float,multi有限的了,而且str2ordinal sql_attr_str2ordinal=account sql_attr_timestamp=addtime//开始想不通以上为什么只能这么简单的几个属性,后来还是想通了,sphinx将指定的查询数据索引后,你查出来的并不是sql语句想要查出//的所有信息,只会有sql_attr_设定的几列,你还需要根据差出来的去查数据库。如果需要排序,排序的字段也一般都是按时间、id排序。//(*^__^*)嘻嘻…,以上纯属个人,臆断。

        #sql_query_info=SELECT*FROM f_company WHERE cid=$id//这说是测试用的,也不知道干嘛滴。

        }

        index gccompany

        {

        source=gccompany//这个gccompany就是上面那个source后的名字,这下该知道他们什么关系了。

        path=F:/www/APMServ5.2.6/sphinx/data/gccompany///创建索引保存的位置这个需要自己建立目录

        docinfo=extern charset_type=utf-8//设定编码

        charset_table=0.9,A.Z-a.z,_,a.z,U+410.U+42F-

        U+430.U+44F,U+430.U+44F//设定允许的字符表

        ngram_len=1//这条和下条是配置支持中文索引的配置,啥意思,此处略去一万字。

        ngram_chars=U+3000.U+2FA1F

        }

        indexer

        {

        mem_limit=200M//允许索引的大小

        }

        searchd

        {

        port=9312//程序开启的端口,以下的配置,大家看着该,(*^__^*)嘻嘻…,

        己配得方便,而且配置的发现没,我用的是张宴的集成安装环境,的确比自//

        性能啊~也比我这菜鸟好的多,

        log=F:/www/APMServ5.2.6/sphinx/log/searchd.log query_log=F:/www/APMServ5.2.6/sphinx/log/query.log read_timeout=5 max_children=30

        pid_file=F:/www/APMServ5.2.6/sphinx/log/searchd.pid

        max_matches=10000000 seamless_rotate=1 preopen_indexes=0 unlink_old=1

        }以上就是配置了,然后让我们来生成索引命令提示符,跳到sphinx/bin下,那有好几个exe,分别支持不同的指令。indexer--config F:

        /www/APMServ5.2.6/sphinx/sphinx.conf gccompany//这个gccompany是index后的名称哦,知道怎么对应吧~该指令就是执行指定的配置文件,然后索引指定的index,如果没有错误的话,而且数据大量的话,会有一个执行时间,否则会有错误信息提示。执行好后,我们去看data/company下的有没有东西,忘了说了,这个目录需要自己建立,切记。生成完索引后,我们就可以开启程序的守护进程,或直接安装(我没成功过,你们可以试试,有成功的可以给我留言)还是spinx/bin目录下,searchd.exe支持的searchd命令searchd--config F:/www/APMServ5.2.6/sphinx/sphinx.conf或者安装searchd--config F:/www/APMServ5.2.6/sphinx/sphinx.conf--install开启守护进城后,程序就能使用函数了,连接程序了,不过别把命令提示符关了,关了,程序就不运行了。然后找spinx源码,有个api/sphinxapi.php,这个是关键,将他拷贝你apache服务目录下,应为程序中需要引用

        include'sphinxapi.php';

        $sc=new SphinxClient();

        $sc-setServer('localhost',9312);//sphinx配置中,我们用的是9312端口

        $sc-setMatchMode(SPH_MATCH_ALL);//匹配模式,全局匹配,还能排序操作,分组什么的吧~

        $res=$sc-query($text,'gccompany');//$text是要索引的字符串,gccompany当然是我们已经索引的index名称啦。

        print_r($res);看看效果吧~不会你会发现得到的结果并不一定是你预料中的,没关系,那是正确的,显示的只有sql_attr_那几项,你还需要根据那几项再去查数据库才能获得你想要的东西,这玩意就说到这把~还得学习。 

        


四川2015年注册安全工程师执业资格考试有关问题的通知
2013年1-12月江苏省商品混凝土产量统计(分月度)
浅谈电子式电能表的应用与推广
分包法律风险的防范秘笈
混凝土搅拌站操作工岗位责任规则
南水北调工程被质疑四大问题 官方作出回应
2013年1-12月湖北省瓦产量统计(分月度)
三种常见的家用中央空调形式 优缺点比较
信息发布:名易软件http://www.myidp.net