最近公司有个老项目想做个app,之前已经累积了蛮多数据,做接口给安卓对接时发现模糊查询实在太慢,所以就给这个接口重做做成用sphinx来查询了,几十万数据一下子就查出来了,果然是查询神器啊!另外老项目服务器环境是windows的,所以这里的随笔也是windows环境下的
1. 直接在 http://www.sphinxsearch.com/downloads.html 找 到最新的 windows 版本,我这里下的是 32位的2.1.5的版本,下载后解压你喜欢的目录下;
2.解压后配置一个sphinx.conf的文件,直接丢在sphinx/bin目录就好;
3.sphinx.conf代码,你可以复制进去改一下参数和路径
#配置数据源 sourceIndex { #要索引的数据库类型(mysql, pgsql, mssql, xmlpipe, xmlpipe2, odbc) type = mysql #mysql服务器地址 sql_host = localhost #数据库用户 sql_user = root #数据库密码 sql_pass = #要进行全文索引的数据库 sql_db = #数据库端口 sql_port = 3306 #数据源的编码字符 sql_query_pre = SET NAMES utf8 sql_query_pre = SET SESSION query_cache_type=OFF #数据源配置 sql_query = select id,title from pro_co #sphinx需要读取的数据表主键信息 sql_query_info = select id,title from pro_co where id=$id } #配置数据源索引 index myIndex { source = Index path = D:/sphinx/data/ #支持中文 ngram_len = 1 ngram_chars = U+3000..U+2FA1F dict = keywords mlock = 0 morphology = none min_word_len = 1 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 } indexer { mem_limit = 128M } searchd { listen = 9312 listen = 9306:mysql41 log = D:sphinxlogsearchd.log query_log = D:sphinxlogquery.log read_timeout = 5 client_timeout = 300 max_children = 30 persistent_connections_limit = 30 pid_file = D:sphinx/log/searchd.pid max_matches = 1000 seamless_rotate = 1 preopen_indexes = 1 unlink_old = 1 mva_updates_pool = 1M max_packet_size = 8M max_filters = 256 max_filter_values = 4096 max_batch_queries = 32 workers = threads }
4,接下来用win+r输入cmd到sphinx/bin目录 输入 indexer.exe --all
5 , 接下来再输入searchd
ok差不多了
上面的配置已经配了中文搜索
接下来就是新建一个php文件了
<?php require './sphinxapi.php'; $s = new SphinxClient(); $s->SetServer('localhost',9312); $result = $s->Query('奥迪'); var_dump($result); ?>
就能使用sphinx查到你想要的了,真是简单粗暴