您现在的位置是:首页 > 数据库 > sphinxSearch 全文搜索引擎 网站首页 数据库

sphinxSearch 全文搜索引擎

Tom2024-07-19 2111人围观
简介 暂无

目前数据量超过了1千万数据,对于有些地方需要用到前后匹配的模糊查询(%数据%),查询起来很吃力,但是及时性又没有那么高的情况下,尝试使用全文搜索引擎来解决问题

使用背景:目前数据量超过了1千万数据,对于有些地方需要用到前后匹配的模糊查询(%数据%),查询起来很吃力,但是及时性又没有那么高的情况下,尝试使用全文搜索引擎来解决问题,
以前的效果:以前查询时间在优化了很多次sql之后,加了mysql 索引,也加了mysql 的全文索引 full_text ,还是延迟很高,慢的时候10-30秒(有些数据贯穿了很长的时间跨度,导致逐行扫描不尽人意)
加上之后:查询速度在0.1-0.3秒左右,对于目前来说完全合适

以下是一些实践和总结

官方文档地址:https://sphinxsearch.com/docs/
官方下载地址:https://sphinxsearch.com/downloads/current/


对于windows来说,直接下载exe 文件
对于linux 或者 mac来说 ,也是可以直接执行的二进制文件
注意一点:
linux提供下载版本有两种
x64
       aarch64
怎么确认需要下载哪一种
使用命令

uname -m


输出 x86_64 就选择下载 x64
否则选择 aarch64 版本
windows 中在属性,查看系统位数
windows 只提供了64位的下载
mac 也有两个版本
x64
       aarch64
如果是inter芯片,就是用x64
如果是苹果的新芯片,使用aarch64

准备工作,首先需要安装有正常的mysql ,我只安装了mysql 所以使用mysql 举例
使用方法,解压后进入目录,例如下载的版本是 3.7 进入 sphinx-3.7.1 目录
进入终端,进入到目录
mac 的terminal
   windows 的 PowerShell
   linux 的ssh 终端
使用方法步骤

1:设置配置
2:创建索引
3:开启sphinx


1:设置配置
文件位置:sphinx-3.7.1/etc/sphinx-min-conf.dist
复制或者使用默认配置文件,直接修改使用


source src1
    {
        type        = mysql
        # 正常的数据库链接配置
        sql_host    = localhost # for `sql_port` to work, use 127.0.0.1
        sql_user    = root
        sql_pass    = root
        sql_db      = test
        sql_port    = 3306  # optional, default is 3306
        # 链接的数据源(索引的数据来源,需要加速的表)
        # use `example.sql` to populate `test.documents` table
        sql_query   = SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content FROM documents
    }
    index test1
    {
        type        = plain
        source      = src1
        # 需要索引的字段
        field       = title, content
        #属性字段,用于查询条件的字段 attr_uint 代表是int 类型;还有一类 attr_string 里面放入字符串类型的属性
        attr_uint   = group_id, date_added
    }


2:创建索引
直接执行二进制

./bin/indexer.exe --config ./etc/sphinx-min.conf.dist --all


或者 exe

./bin/indexer --config ./etc/sphinx-min.conf.dist --all


说明
--config 表示 使用配置的方式 创建索引
--all 表示 创建该配置中的所有索引
如果只需要创建单个 ,直接写上索引名称


./bin/indexer --config ./etc/sphinx-min.conf.dist test1


3:开启服务

./bin/searchd --config ./etc/sphinx-min.conf.dist


整个创建到开启就完成了

下面是链接测试
1:控制台测试
(sphinx 开启后的默认端口是 9306)
使用mysql 链接

mysql -P 9306


查询索引是否创建成功
match 是查询匹配数据的语法,其他用法和基本的SQL 语法类似
 

    SELECT * FROM test1;
    SELECT * FROM test1 WHERE MATCH('1');
    SELECT * FROM test1 WHERE MATCH('@title 涨三');
    SELECT * FROM test1 WHERE MATCH('@content 涨三');
    SELECT * FROM test1 WHERE MATCH('@content 涨三') AND group_id ='1' ORDER BY date_added DESC LIMIT 1,10;
    SELECT * FROM test1 WHERE MATCH('"涨三"');

   加上双引号和不加双引号区别
   加上双引号 精准配置包含“张三”的数据
   不加双引号,可以匹配到 同时包含“张”,“三”,“张三” 的数据
2:php测试,和控制台测试差不多目前就折木多

中文分词说明:
目前使用的自带的,只需要在索引配置文件中,添加配置就可以了
比如test1 里面 添加就可以识别和拆分中文了


        charset_table       = 0..9, A..Z, a..z, U+0021..U+2FFF, U+3040..U+3FFF, U+D800..U+F8FF, U+FF00..U+FFFF
        ngram_len           = 1
        ngram_chars         = U+4E00..U+9FFF

实际使用过程中,由于自己使用的静态索引,需要隔一段时间,重建一次索引

写一个sh 脚本文件 test.sh 定期执行就可以

    #!bin/sh
    ./bin/searchd --config ./etc/sphinx-min.conf.dist --stop
    ./bin/indexer --config ./etc/sphinx-min.conf.dist --all
    ./bin/searchd --config ./etc/sphinx-min.conf.dist

收工

打赏本站,你说多少就多少

文章评论