docker Sphinx 使用 demo 测试小记

  1. 镜像拉取

docker pull sunfjun/coreseek

  1. 下载sphinx代码
  2. 启动容器

创建相关目录

mkdir -p /data/sphinx/conf /data/sphinx/data /data/sphinx/log

准备配置文件,将源码里etc下的配置文件cp出来
cp sphinx-min.conf.dist /data/sphinx/conf
修改配置文件

sql_host        = 192.168.99.158
    sql_user        = root
    sql_pass        = 123456
    sql_db          = test
    sql_port        = 3306  # optional, default is 3306

另外在mysql数据库创建test数据库,将源码里的example.sql导入创建相关的demo表和数据,sql_host是你自己的mysql连接,账号也为自己的数据库连接
运行容器命令

docker run -idt  --name=sphinx -v /data/sphinx/conf:/usr/local/etc/sphinx -v /data/sphinx/data:/var/data -v /data/sphinx/log:/var/log -p 9312:9312 sunfjun/coreseek

如果没有提供sphinx.conf容器起不来,会报错

  1. php测试
    因为容器sphinx服务端版本低的原因,下载较高版本的sphinx使用sphinxapi.php时会报客户端版本较低,
    Deprecated: DEPRECATED: Do not call this method or, even better, use SphinxQL instead of an API in /data/soft/sphinx-2.2.11-release/api/sphinxapi.php on line 771
    Query failed: searchd error: client version is higher than daemon version (client is v.1.30, daemon is v.1.25)

    适合版本下载地址,下载该版本sphinx-2.0.10-release.tar.gz

  2. 使用相关介绍

配置文件数据源中

sql_query_info      = SELECT * FROM documents WHERE id=$id

配置了这一句,在服务端使用search group进行索引查找会显示取出来的内容,而在客户端是不影响的,可以指定到索引文件中查找search -i test1 group

sql_attr_uint = group_id sql_attr_timestamp = date_added sql_attr_string = title作为过滤条件可随数据返回

  1. 配置
    数据配置

    
    source src1
    {
        type                    = mysql
    
        sql_host                = 192.168.99.158
        sql_user                = root
        sql_pass                = 123456
        sql_db                  = test
        sql_port                = 3306  # optional, default is 3306
    
        sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(id) FROM documents
        sql_query               = \
                SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
                FROM documents where id <= (select max_doc_id from sph_counter where counter_id=1)
    
        sql_attr_uint           = group_id
        sql_attr_timestamp      = date_added
        sql_attr_string         = title
    #       sql_field_string        = title
    #        sql_field_string        = content
    
        sql_query_info      = SELECT * FROM documents WHERE id=$id
        sql_joined_field  = tags from query; SELECT docid, CONCAT('tag',tagid) FROM tags ORDER BY docid ASC
    }

source delta_src:src1
{
sql_query_pre = set names utf8
sql_query = select id,group_id,unix_timestamp(date_added) as date_added,title,content \
from documents where id>(select max_doc_id from sph_counter where counter_id=1)
}

index test1
{
source = src1
path = /var/data/test1
}
index delta:test1
{
source = delta_src
path = /var/data/delta
}



增量查询,建一个表sph_counter,只包含一条记录,记录test1索引表时最大记录数。写两个crontab,一个是晚上凌晨执行来更新test1的索引文件`indexer test1 --rotate`,另一个是时间 比较短执行的crontab,可根据数据随时间变化的频率来定时间执行`indexer delta --rotate` 。

使用`sql_joined_field`联表字段后可以使用联表的字段来搜索,这里可以是`php test.php tag43`
雪花飘
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!