PHP+Sphinx+Mysql做搜索引擎

╰+攻爆jí腚メ 2022-08-08 19:49 244阅读 0赞

首先我们下载Sphinx这个工具,下载地址官网下载地址:www.sphinxsearch.com,找到sphinx-2.2.10-release-win64.zip,64位的下载这个,解压到我们的PHP运行目录下面,为后面网页查看结果方便。

sphinx介绍:

Sphinx 是SQL Phrase Index(查询词组索引)的缩写,Sphinx是一个基于SQL的全文检索引擎,它提供的API接口包括:PHP,Python,Perl,Ruby,java等,同时为MySQL也设计了一个引擎插件SphinxSE,它是一个分布式的全文检索系统。
优点:
高速的建立索引可达到10M/s
高性能的搜索(在2-4G的文本数据上,平均每次检索响应的时间小于0.1秒)
可处理海量数据(目前已知可以处理100G的文本数据,在单一的CPU的系统上可处理100M的文档)
提供的优秀的相关度算法,基于短语相似度和统计BM2的复合Ranking的方法
支持分布式搜索
提供文档片段生成功能
可作为Mysql的存储引擎提供搜索服务
支持布尔,短语,词语相似度等多种检索模式
缺点:
必须要有主键
主键必须为整数
不负责数据存储
配置不灵活

解压之后的sphinx结构如图所示:

Center

下面就是进行我们的相关配置,看到图中的sphinx-min.conf.in,复制到我们的bin目录下面方便一会使用改名字为sphinx.conf,

修改里面的内容:

  1. source src1
  2. {
  3. type = mysql
  4. sql_host = localhost #主机地址
  5. sql_user = root#帐号
  6. sql_pass = #密码
  7. sql_db = sphinx #数据库
  8. sql_port = 3306 # 数据库端口 3306
  9. sql_query = SELECT id, name, age FROM users #查询语句
  10. sql_attr_uint = group_id
  11. sql_attr_timestamp = date_added
  12. sql_query_pre = set names utf8 #数据库编码
  13. }
  14. index test1
  15. {
  16. source = src1
  17. path = D:/myapaphe/www/sphinx/data #这个一定要配置
  18. charset_type = utf-8 #指定编码
  19. ngram_len = 1 #要找中文需指定为1.
  20. ngram_chars = U+3000..U+2FA1F
  21. }
  22. indexer
  23. {
  24. mem_limit = 128M
  25. }
  26. searchd
  27. {
  28. listen = 9312
  29. listen = 9306:mysql41
  30. log = D:\myapaphe\www\sphinx\log\searchd.log #进程日志
  31. query_log = D:\myapaphe\www\sphinx\log\query.log #查询日志
  32. read_timeout = 5
  33. max_children = 30
  34. pid_file = D:\myapaphe\www\sphinx\log\searchd.pid
  35. seamless_rotate = 1
  36. preopen_indexes = 1
  37. unlink_old = 1
  38. workers = threads # for RT to work
  39. binlog_path = D:\myapaphe\www\sphinx\data
  40. }

上面这些一定要配置完毕,路径一定要符合自己的路径。

接下来生成查询索引:

Center 1

安装searchd服务:

Center 2

接下来加载配置文件:

Center 3

启动服务:

Center 4

OK前面的配置工作,以及服务启动已经完成现在开始代码:

在sphinx下面的api文件夹下面创建test3.php,运行test3.php

  1. <?php
  2. require ( "sphinxapi.php" );
  3. $s = new SphinxClient();
  4. $s->SetServer('localhost',9312);
  5. $result = $s->Query('高七');
  6. echo '<pre>';
  7. print_r($result);

Center 5Center 6

乱码是因为cmd默认是gbk编码,我们放到浏览器中去查看:

Center 7Center 8

Center 9

我们看到sphinx查到的并不是完整的结果而是把id返给了我们,让我们根据id再去查数据。

下面进行查询时间比对:

Center 10

我是在4万多条数据测试的时间是0.001s,我们看下mysql的查询需要多久:

Center 11

我们看到需要0.04s,数据不多,结果没有那么明显,不过0.039s的差距已经不小了。

到此sphinx的整合到此完毕,希望可以帮到大家。

发表评论

表情:
评论列表 (有 0 条评论,244人围观)

还没有评论,来说两句吧...

相关阅读

    相关 搜索引擎原理

    搜索引擎原理是指搜索引擎如何从互联网上的海量信息中找到用户所需的信息,并按照一定的排序规则呈现给用户。搜索引擎的原理包括以下几个方面: 1. 网络爬虫:搜索引擎通过网络爬虫