美文网首页
windows11 php Sphinx安装

windows11 php Sphinx安装

作者: 街头民工 | 来源:发表于2022-06-22 15:36 被阅读0次

参考文档
参考文档
参考文档

下载 Sphinx:官网下载地址

image.png

下载后解压

image.png
  • 图中的sphinx.conf文件是从etc/目录下复制过来的


    image.png
  • 然后打开sphinx.conf文件写一下配置:

source src1
{
    #数据库的配置信息
    type            = mysql
    sql_host        = 127.0.0.1
    sql_user        = bos_2
    sql_pass        = 123456
    sql_db          = bos_2
    sql_port        = 3306
    sql_query_pre   = SET NAMES utf8
    # 一个数据源中只能有一个主查询,这条语句取出的数据就是sphin将要创建全文索引的语句
    # 主查询的要求:第一个字段必须是ID,如果名字不为ID,取个别名叫id(类型必须是非零唯一、不重复的整数)
    # sphinx只能对属性字段排序,sphinx要排序的字段必须取出该字段,sphin排序必须将某个字段定义成一个属性
    sql_query       = SELECT id,search_gather FROM 表名称;
}

# index定义
# 配置索引--》生成的索引文件
# 说明:一个数据源对应一个索引的配置
index test1
{
    source          = src1
    path            = E:/sphinx/sphinx-3.4.1/data/test1
    mlock         = 0
    enable_star    = 1
    min_word_len  = 2
    min_prefix_len = 0
    min_infix_len = 2
    ngram_len = 1
    # 需要分词的字符,如果要搜索中文,去掉前面的注释
    ngram_chars = U+3000..U+2FA1F
        dict            = keywords
        mlock           = 0
        morphology      = none
        min_word_len    = 1
        charset_type    = utf-8
        charset_table   = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
}


indexer
{
    mem_limit       = 128M
}


searchd
{
    listen          = 9312
    listen          = 9306:mysql41
    log             = E:/sphinx/sphinx-3.4.1/log/searchd.log
    query_log       = E:/sphinx/sphinx-3.4.1/log/query.log
    read_timeout    = 5
    # 最大返回的记录数
    #@max_children    = 30
    pid_file        = E:/sphinx/sphinx-3.4.1/log/searchd.pid
    max_matches     = 1000000

    # windows下启动searchd服务一定要注释掉这个
    # seamless_rotate = 1
    preopen_indexes = 1
    unlink_old      = 1
    workers         = threads
    binlog_path     = E:/sphinx/sphinx-3.4.1/data
}
  • 接下来咱们运行下 bin 目录下的 searchd.exe


    image.png
  • 然后提示无法在电脑上运行,不要慌是版本问题,再去下载其他版本- 回到 官网下载地址

    image.png
  • 选择档案


    image.png
  • 这次选个低版本的 我电脑是64位的


    这次选个低版本的
  • 变化不大,新建两个目录data 和log 并把刚才写好的配置文件复制过来。


    image.png
  • 接着运行searchd.exe 试试,可以看到 这个版本是可以的。


    image.png
  • 运行成功后咱们需要安装和加载刚才的配置文件,接下来运行以下命令:
    E:/sphinx2/bin/searchd.exe -c E:/sphinx2/sphinx.conf --install

  • 提示错误
    FATAL: OpenSCManager() failed: code=5, error=▒ܾ▒▒▒▒ʡ▒

    image.png
  • 解决办法:在以管理员身份打开cmd 后再次运行:

image.png
  • 接着运行命令:E:/sphinx2/bin/indexer.exe -c E:/sphinx2/sphinx.conf --rotate --all

  • 出现错误: failed to open pid_file 'E:/sphinx2/log/searchd.pid'.


    image.png
  • 解决办法 :去检查下服务中的searchd是否在运行,如果在运行停止后再启动


    image.png
  • 再次运行命令:E:/sphinx2/bin/indexer.exe -c E:/sphinx2/sphinx.conf --rotate --all

    image.png

把目录share/doc/api下的sphinxapi.php 复制到你项目当中

image.png
  • 在项目中新建PHP文件
include './sphinxapi.php';
$cl = new SphinxClient();
$q = $_GET['key']?'':'*ph*'; //模拟关键字
//$mode = SPH_MATCH_ALL;
$host = "127.0.0.1";// sphinx的服务地址  此处用的是本地服务 切记 不是数据库地址!!!
$port = 9312;// sphinx监听端口号
$index = "test1";   // 此处为配置文件中配置的索引项
$cl->SetServer ( $host, $port );
$cl->SetConnectTimeout(10);
$cl->SetArrayResult(true);
$cl->SetLimits(1,1000);//要获取所有数据是这里第三个参数控制,默认是1000,太大会影响效率
//$cl->SetMatchMode(SPH_MATCH_ALL);//这个关闭它,不然会提示警告
$res = $cl->Query( $q, $index );
foreach ($res['matches'] as $key=>$value){
    if(empty($id_str)){
        $id_str = $value['id'];
    }else{
        $id_str .= ','.$value['id'];
    }
}
print_r(count(explode(',',$id_str)));
if ( $res===false )
{
    print "Query failed: " . $cl->GetLastError() . ".\n";

} else
{
    if ( $cl->GetLastWarning() )
        print "hcl_0_WARNING: " . $cl->GetLastWarning() . "\n\n";

    print "hcl_1_Query '$q' retrieved $res[total] of $res[total_found] matches in $res[time] sec.\n";
    print "Query stats:\n";
    if ( is_array($res["words"]) )
        foreach ( $res["words"] as $word => $info )
            print "    '$word' found $info[hits] times in $info[docs] documents\n";
    print "\n";



}

  • 运行文件,这里就是咱们要的数据,体验了下速度提示很多。


    image.png

相关文章

网友评论

      本文标题:windows11 php Sphinx安装

      本文链接:https://www.haomeiwen.com/subject/mtkuvrtx.html