windows+php配置sphinx

1 篇文章 0 订阅

1、http://sphinxsearch.com/downloads/current/ 官网下载对应系统版本,本地是在windows环境下配置sphinx的

2、解压后目录结构

3、新建data和log目录,用于存放索引及日志 文件。新建sphinx.conf配置文件,内容如下:

source doc
{
    type            = mysql
    sql_host        = 127.0.0.1
    sql_user        = root
    sql_pass        = root
    sql_db          = leshu
    sql_port        = 3306
    sql_query_pre   = SET NAMES utf8 

    # 一个数据源中只能有一个主查询,这条语句取出的数据就是sphin将要创建全文索引的语句
    # 主查询的要求:第一个字段必须是ID,如果名字不为ID,取个别名叫id(类型必须是非零唯一、不重复的整数)
    # sphinx只能对属性字段排序,sphinx要排序的字段必须取出该字段,sphin排序必须将某个字段定义成一个属性
    sql_query       = SELECT id,uname FROM usertb

    sql_query_post  = UPDATE maxid set id = (SELECT MAX(id) FROM usertb)

    #sql_attr_uint   = id
    
    #sql_field_string = id
    #sql_field_string = uname
}

#增量索引
source doc_zl
{
    type            = mysql
    sql_host        = 127.0.0.1
    sql_user        = root
    sql_pass        = root
    sql_db          = leshu
    sql_port        = 3306
    sql_query_pre   = SET NAMES utf8 

    # 一个数据源中只能有一个主查询,这条语句取出的数据就是sphin将要创建全文索引的语句
    # 主查询的要求:第一个字段必须是ID,如果名字不为ID,取个别名叫id(类型必须是非零唯一、不重复的整数)
    # sphinx只能对属性字段排序,sphinx要排序的字段必须取出该字段,sphin排序必须将某个字段定义成一个属性
    sql_query       = SELECT id,uname FROM usertb WHERE id > (SELECT id FROM maxid)

    sql_query_post  = UPDATE maxid set id = (SELECT MAX(id) FROM usertb)
}

# index定义
# 配置索引--》生成的索引文件
# 说明:一个数据源对应一个索引的配置
index doc
{
    source          = doc
    path            =D:/extend/sphinx-3.1.1/data/doc
    
    enable_star    = 1 #开启通配符
    min_prefix_len = 1 #最小前缀
    min_infix_len  = 1 #最小中缀

    # 简单分词,只支持0和1,如果要搜索中文,请指定为1
    ngram_len     = 1 

    # 需要分词的字符,如果要搜索中文,去掉前面的注释
    ngram_chars = U+3000..U+2FA1F  
}

#配置增量索引
index doc_zl
{
    source          = doc_zl
    path            =D:/extend/sphinx-3.1.1/data/doc_zl
    
    enable_star    = 1 #开启通配符
    min_prefix_len = 1 #最小前缀
    min_infix_len  = 1 #最小中缀

    # 简单分词,只支持0和1,如果要搜索中文,请指定为1
    ngram_len     = 1 

    # 需要分词的字符,如果要搜索中文,去掉前面的注释
    ngram_chars = U+3000..U+2FA1F  
}

indexer
{
    mem_limit       = 128M
}


searchd
{
    listen          = 9312
    listen          = 9306:mysql41
    log             = D:/extend/sphinx-3.1.1/log/searchd.log
    query_log       = D:/extend/sphinx-3.1.1/log/query.log
    read_timeout    = 5
    max_children    = 30
    # 最大返回的记录数
    max_matches     = 1000
    pid_file        = D:/extend/sphinx-3.1.1/log/searchd.pid

    # windows下启动searchd服务一定要注释掉这个
    #seamless_rotate = 1
    preopen_indexes = 1
    unlink_old      = 1
    workers         = threads # for RT to work
    binlog_path     = D:/extend/sphinx-3.1.1/data
}

 4、准备测试数据,700W条测试数据下载

5、安装服务 及 创建索引文件

D:\extend\sphinx-3.1.1\bin>searchd -c d:/extend/sphinx-3.1.1/sphinx.conf --install
D:\extend\sphinx-3.1.1\bin>indexer -c d:/extend/sphinx-3.1.1/sphinx.conf doc

6、启动服务

7、本地测试。把 api/sphinxapi.php 文件复制到项目目录中,新建一个demo

<?php
include './lib/sphinxapi.php';

$s = new SphinxClient ();

//排序设置
$s->SetSortMode(SPH_SORT_ATTR_DESC,'id');
$s->setServer('localhost', 9312);
$s->SetLimits(10,10);

//模糊匹配
$result = $s->query('*用户9*', 'doc');
echo '<pre>';
print_r($result);die;

8、新增记录后创建增量索引,并把增量索引合并到主索引里面

D:\extend\sphinx-3.1.1\bin>indexer -c d:/extend/sphinx-3.1.1/sphinx.conf doc_zl
D:\extend\sphinx-3.1.1\bin>indexer -c d:/extend/sphinx-3.1.1/sphinx.conf --merge doc doc_zl --rotate

本地700W测试数据,查询结果是0.7s左右^^

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值