Windows 使用Sphinx 配合Mysql搜索
Sphinx特性:
- 高速的建立索引(在当代CPU上,峰值性能可达到10MB/秒);
- 高性能的搜索(在2–4GB的文本数据上,平均每次检索响应时间小于0.1秒);
- 可处理海量数据(目前已知可以处理超过100GB的文本数据,在单一CPU的系统上可处理100M文档);
- 提供了优秀的相关度算法,基于短语相似度和统计(BM25)的复合Ranking方法;
- 支持分布式搜索;
-
提供文件的摘录生成;
- 3
-
可作为MySQL的存储引擎提供搜索服务;
-
支持布尔、短语、词语相似度等多种检索模式;
-
文档支持多个全文检索字段(最大不超过32个);
-
文档支持多个额外的属性信息(例如:分组信息,时间戳等);
-
停止词查询;
-
支持单一字节编码和UTF-8编码;
-
原生的MySQL支持(同时支持MyISAM和InnoDB);
-
原生的PostgreSQL支持.
简单的理解:
先对数据源建立索引。采用分词技术,形成一个索引表。当查询某个单词的时候,先到sphinx建立的索引去查找,然后再去数据库用id查找。
1.直接在http://www.sphinxsearch.com/downloads.html找到最新的windows版本:
我是安装在 D:\sphinx;
2 在sphinx文件夹data里面新建存放数据得文件 我这里和数据库保持了一致:
D:\sphinx\data\jkadmin
新建log文件夹用于存放搜索日志D:\sphinx\data\log
3 在etc目录下找到sphinx-min.conf.dist 重名为sphinx.conf,将配置文件移动到bin目录下,方便操作。
4 修改配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | # # Minimal Sphinx configuration sample (clean, simple, functional) # source doc { type = mysql sql_host = localhost sql_user = root sql_pass = admin789 sql_db = jkadmin sql_port = 3306 # optional, default is 3306 sql_query_pre = SET NAMES utf8 sql_query = \ SELECT id, UNIX_TIMESTAMP(create_time) AS date_added, sku, name \ FROM jk_product sql_attr_uint = date_added } index jkadmin { source = doc path = D:/sphinx/data/jkadmin } index jkadminrt { type = rt rt_mem_limit = 128M path = D:/sphinx/data/jkadminrt rt_field = sku rt_field = name rt_attr_uint = id } indexer { mem_limit = 128M } searchd { listen = 9312 listen = 9306:mysql41 log = D:/sphinx/data/log/searchd.log query_log = D:/sphinx/data/log/query.log read_timeout = 5 max_children = 30 pid_file = D:/sphinx/data/log/searchd.pid seamless_rotate = 1 preopen_indexes = 1 unlink_old = 1 workers = threads # for RT to work binlog_path = D:/sphinx/data/jkadmin } |
5 然后打开终端,切换到sphinx/bin目录下
然后到data目录查看可以看到
启动sphinx服务:
6 使用搜索方式试一下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php require "sphinxapi.php" ; $client = new SphinxClient(); $query = "BM00FIXED049" ; $host = "127.0.0.1" ; $port = 9312; $index = 'jkadmin' ; $client ->SetServer( $host , $port ); $client ->SetConnectTimeout(60); $client ->SetArrayResult(true); $res = $client ->Query( $query , $index ); print_r( $res [ 'matches' ]);j |
输出结果:Array ( [0] => Array ( [id] => 3393 [weight] => 13653 [attrs] => Array ( [date_added] => 0 ) ) )
结果中id 和数据库得ID结果是匹配的。
补充一下:以上不支持中文搜索
可以在索引增加以下配置:
index jkadmin
{
source = doc
path = D:/sphinx/data/jkadmin
ngram_len = 1
ngram_chars = U+3000..U+2FA1F
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术