• sphinx 配置实例


    配置实例
    3.1、数据源。
    这里我们采用 mysql的数据源。具体情况如下:
    Mysql server:192.168.1.10
    Mysql db :test
    Mysql 表:test.sphinx_article
    mysql> desc sphinx_article;
    ———– ——————— —— —– ——— —————- 
    | Field | Type | Null | Key | Default | Extra |
    ———– ——————— —— —– ——— —————- 
    | id | int(11) unsigned | NO | PRI | NULL | auto_increment |
    | title | varchar(255) | NO | | | |
    | cat_id | tinyint(3) unsigned | NO | MUL | | |
    | member_id | int(11) unsigned | NO | MUL | | |
    | content | longtext | NO | | | |
    | created | int(11) | NO | MUL | | |
    ———– ——————— —— —– ——— —————- 
    6 rows in set (0.00 sec)
    3.2、配置文件
    * [root@localhost ~]#cd /usr/local/sphinx/etc #进入sphinx的配置文件目录
    * [root@localhost etc]# cp sphinx.conf.dist sphinx.conf #新建Sphinx配置文件
    * [root@localhost etc]# vim sphinx.conf #编辑sphinx.conf
    具体实例配置文件:
    ##### 索引源 ###########
    source article_src
    {
    type = mysql #####数据源类型
    sql_host = 192.168.1.10 ######mysql主机
    sql_user = root ########mysql用户名
    sql_pass = pwd############mysql密码
    sql_db = test #########mysql数据库名
    sql_port= 3306 ###########mysql端口
    sql_query_pre = SET NAMES UTF8 ###mysql检索编码,特别要注意这点,很多人中文检索不到是数据库的编码是GBK或其他非UTF8
    sql_query = SELECT id,title,cat_id,member_id,content,created FROM sphinx_article ####### 获取数据的sql
    #####以下是用来过滤或条件查询的属性############
    sql_attr_uint = cat_id ######## 无符号整数属性
    sql_attr_uint = member_id
    sql_attr_timestamp = created ############ UNIX时间戳属性
    sql_query_info = select * from sphinx_article where id=$id ######### 用于命令界面端(CLI)调用的测试
    }
    ### 索引 ###
    index article
    {
    source = article_src ####声明索引源
    path = /usr/local/sphinx/var/data/article #######索引文件存放路径及索引的文件名
    docinfo = extern ##### 文档信息存储方式
    mlock = 0 ###缓存数据内存锁定
    morphology = none #### 形态学(对中文无效)
    min_word_len = 1 #### 索引的词最小长度
    charset_type = utf-8 #####数据编码
    ##### 字符表,注意:如使用这种方式,则sphinx会对中文进行单字切分,
    ##### 即进行字索引,若要使用中文分词,必须使用其他分词插件如 coreseek,sfc
    charset_table = U FF10..U FF19->0..9, 0..9, U FF41..U FF5A->a..z, U FF21..U FF3A->a..z,
    A..Z->a..z, a..z, U 0149, U 017F, U 0138, U 00DF, U 00FF, U 00C0..U 00D6->U 00E0..U 00F6,
    U 00E0..U 00F6, U 00D8..U 00DE->U 00F8..U 00FE, U 00F8..U 00FE, U 0100->U 0101, U 0101,
    U 0102->U 0103, U 0103, U 0104->U 0105, U 0105, U 0106->U 0107, U 0107, U 0108->U 0109,
    U 0109, U 010A->U 010B, U 010B, U 010C->U 010D, U 010D, U 010E->U 010F, U 010F,
    U 0110->U 0111, U 0111, U 0112->U 0113, U 0113, U 0114->U 0115, U 0115, 
    U 0116->U 0117,U 0117, U 0118->U 0119, U 0119, U 011A->U 011B, U 011B, U 011C->U 011D,
    U 011D,U 011E->U 011F, U 011F, U 0130->U 0131, U 0131, U 0132->U 0133, U 0133, 
    U 0134->U 0135,U 0135, U 0136->U 0137, U 0137, U 0139->U 013A, U 013A, U 013B->U 013C, 
    U 013C,U 013D->U 013E, U 013E, U 013F->U 0140, U 0140, U 0141->U 0142, U 0142, 
    U 0143->U 0144,U 0144, U 0145->U 0146, U 0146, U 0147->U 0148, U 0148, U 014A->U 014B, 
    U 014B,U 014C->U 014D, U 014D, U 014E->U 014F, U 014F, U 0150->U 0151, U 0151, 
    U 0152->U 0153,U 0153, U 0154->U 0155, U 0155, U 0156->U 0157, U 0157, U 0158->U 0159,
    U 0159,U 015A->U 015B, U 015B, U 015C->U 015D, U 015D, U 015E->U 015F, U 015F, 
    U 0160->U 0161,U 0161, U 0162->U 0163, U 0163, U 0164->U 0165, U 0165, U 0166->U 0167, 
    U 0167,U 0168->U 0169, U 0169, U 016A->U 016B, U 016B, U 016C->U 016D, U 016D, 
    U 016E->U 016F,U 016F, U 0170->U 0171, U 0171, U 0172->U 0173, U 0173, U 0174->U 0175,
    U 0175,U 0176->U 0177, U 0177, U 0178->U 00FF, U 00FF, U 0179->U 017A, U 017A, 
    U 017B->U 017C,U 017C, U 017D->U 017E, U 017E, U 0410..U 042F->U 0430..U 044F, 
    U 0430..U 044F,U 05D0..U 05EA, U 0531..U 0556->U 0561..U 0586, U 0561..U 0587, 
    U 0621..U 063A, U 01B9,U 01BF, U 0640..U 064A, U 0660..U 0669, U 066E, U 066F, 
    U 0671..U 06D3, U 06F0..U 06FF,U 0904..U 0939, U 0958..U 095F, U 0960..U 0963, 
    U 0966..U 096F, U 097B..U 097F,U 0985..U 09B9, U 09CE, U 09DC..U 09E3, U 09E6..U 09EF, 
    U 0A05..U 0A39, U 0A59..U 0A5E,U 0A66..U 0A6F, U 0A85..U 0AB9, U 0AE0..U 0AE3, 
    U 0AE6..U 0AEF, U 0B05..U 0B39,U 0B5C..U 0B61, U 0B66..U 0B6F, U 0B71, U 0B85..U 0BB9, 
    U 0BE6..U 0BF2, U 0C05..U 0C39,U 0C66..U 0C6F, U 0C85..U 0CB9, U 0CDE..U 0CE3, 
    U 0CE6..U 0CEF, U 0D05..U 0D39, U 0D60,U 0D61, U 0D66..U 0D6F, U 0D85..U 0DC6, 
    U 1900..U 1938, U 1946..U 194F, U A800..U A805,U A807..U A822, U 0386->U 03B1, 
    U 03AC->U 03B1, U 0388->U 03B5, U 03AD->U 03B5,U 0389->U 03B7, U 03AE->U 03B7, 
    U 038A->U 03B9, U 0390->U 03B9, U 03AA->U 03B9,U 03AF->U 03B9, U 03CA->U 03B9, 
    U 038C->U 03BF, U 03CC->U 03BF, U 038E->U 03C5,U 03AB->U 03C5, U 03B0->U 03C5, 
    U 03CB->U 03C5, U 03CD->U 03C5, U 038F->U 03C9,U 03CE->U 03C9, U 03C2->U 03C3, 
    U 0391..U 03A1->U 03B1..U 03C1,U 03A3..U 03A9->U 03C3..U 03C9, U 03B1..U 03C1, 
    U 03C3..U 03C9, U 0E01..U 0E2E,U 0E30..U 0E3A, U 0E40..U 0E45, U 0E47, U 0E50..U 0E59, 
    U A000..U A48F, U 4E00..U 9FBF,U 3400..U 4DBF, U 20000..U 2A6DF, U F900..U FAFF, 
    U 2F800..U 2FA1F, U 2E80..U 2EFF,U 2F00..U 2FDF, U 3100..U 312F, U 31A0..U 31BF, 
    U 3040..U 309F, U 30A0..U 30FF,U 31F0..U 31FF, U AC00..U D7AF, U 1100..U 11FF, 
    U 3130..U 318F, U A000..U A48F,U A490..U A4CF
    min_prefix_len = 0 #最小前缀
    min_infix_len = 1 #最小中缀
    ngram_len = 1 # 对于非字母型数据的长度切割
    #加上这个选项,则会对每个中文,英文字词进行分割,速度会慢
    #ngram_chars = U 4E00..U 9FBF, U 3400..U 4DBF, U 20000..U 2A6DF, U F900..U FAFF,
    #U 2F800..U 2FA1F, U 2E80..U 2EFF, U 2F00..U 2FDF, U 3100..U 312F, U 31A0..U 31BF,
    #U 3040..U 309F, U 30A0..U 30FF, U 31F0..U 31FF, U AC00..U D7AF, U 1100..U 11FF,
    #U 3130..U 318F, U A000..U A48F, U A490..U A4CF
    }
    ######### 索引器配置 #####
    indexer
    {
    mem_limit = 256M ####### 内存限制
    }
    ############ sphinx 服务进程 ########
    searchd
    {
    #listen = 9312 ### 监听端口,在此版本开始,官方已在IANA获得正式授权的9312端口,以前版本默认的是3312
    log = /usr/local/sphinx/var/log/searchd.log #### 服务进程日志 ,一旦sphinx出现异常,基本上可以从这里查询有效信息,轮换(rotate)出的问题一般可在此寻到答案
    query_log = /usr/local/sphinx/var/log/query.log ### 客户端查询日志,笔者注:若欲对一些关键词进行统计,可以分析此日志文件
    read_timeout = 5 ## 请求超时
    max_children = 30 ### 同时可执行的最大searchd 进程数
    pid_file = /usr/local/sphinx/var/log/searchd.pid #######进程ID文件
    max_matches = 1000 ### 查询结果的最大返回数
    seamless_rotate = 1 ### 是否支持无缝切换,做增量索引时通常需要
    }
    3.3、建立索引文件
    [root@localhost sphinx]# bin/indexer -c etc/sphinx.conf article ### 建立索引文件的命令
    Sphinx 0.9.9-release (r2117)
    Copyright (c) 2001-2009, Andrew Aksyonoff
    using config file ‘etc/sphinx.conf’…
    indexing index ‘article’…
    collected 1000 docs, 0.2 MB
    sorted 0.4 Mhits, 99.6% done
    total 1000 docs, 210559 bytes
    total 3.585 sec, 58723 bytes/sec, 278.89 docs/sec
    total 2 reads, 0.031 sec, 1428.8 kb/call avg, 15.6 msec/call avg
    total 11 writes, 0.032 sec, 671.6 kb/call avg, 2.9 msec/call avg
    [root@localhost sphinx]#
    出现以上代表已经索引成功,若不成功的话请根据提示的错误修改配置文件,或到这里提问,我看到后会尽快解决
    4.应用
    4.1 在CLI上测试
    在上一步中,我们建立了索引,现在我们对刚建立的索引进行测试。测试有两种方式:CLI端和API调用
    在CLI端上命令测试是使用sphinx自带的搜索命令:search
    ###### 在article索引上检索 “北京”关键词 ########
    [root@localhost sphinx]# bin/search -c etc/sphinx.conf 北京
    Sphinx 0.9.9-release (r2117)
    Copyright (c) 2001-2009, Andrew Aksyonoff
    using config file ‘etc/sphinx.conf’…
    index ‘article’: query ‘北京 ‘: returned 995 matches of 995 total in 0.008 sec
    displaying matches:
    1. document=76, weight=2, cat_id=1, member_id=2, created=Sat Jan 23 19:05:09 2010
    id=76
    title=??????????
    cat_id=1
    member_id=2
    content=????????????????????????????????
    created=1264244709
    2. document=85, weight=2, cat_id=1, member_id=2, created=Sat Jan 23 19:05:09 2010
    id=85
    title=????????????
    cat_id=1
    member_id=2
    content=????????
    created=1264244709..这里省略….
    20. document=17, weight=1, cat_id=1, member_id=2, created=Sat Jan 23 19:05:09 2010
    id=17
    title=????????????
    cat_id=1
    member_id=2
    content=??????????????????????????????????????????????????????????
    created=1264244709
    words:
    1. ‘北京’: 995 documents, 999 hits
    至此,可以看到,我们已经检索出所有有关“北京”的信息
    注意:这里我使用的是putty的客户端,在客户端编码设置的是utf-8,这个是测试的前提条件
    4.2 API调用
    在本例中,我使用PHP的api来测试,在测试前,先启动sphinx服务进程,并对centos的防火墙做好9312端口的开放
    [root@localhost sphinx]# bin/searchd -c etc/sphinx.conf & ### 使sphinx在后台运行
    [1] 5759
    [root@localhost sphinx]# Sphinx 0.9.9-release (r2117)
    Copyright (c) 2001-2009, Andrew Aksyonoff
    using config file ‘etc/sphinx.conf’…
    listening on all interfaces, port=9312
    [1] Done bin/searchd -c etc/sphinx.conf
    php测试代码:
    
    SetServer(’192.168.1.150′, 9312); //注意这里的主机
    #$cl->SetMatchMode(SPH_MATCH_EXTENDED); //使用多字段模式
    //dump($cl);
    $index=”article”;
    $res = $cl->Query($keyword, $index);
    $err = $cl->GetLastError();
    dump($res);
    function dump($var)
    {
    echo ‘
    ';var_dump($var);echo '
    ‘;
    }
    ?>
    检索“北京”dump后的结果是如下:
    array(10) {
    ["error"]=>
    string(0) “”
    ["warning"]=>
    string(0) “”
    ["status"]=>
    int(0)
    ["fields"]=>
    array(2) {
    [0]=>
    string(5) “title”
    [1]=>
    string(7) “content”
    }
    ["attrs"]=>
    array(3) {
    ["cat_id"]=>
    int(1)
    ["member_id"]=>
    int(1)
    ["created"]=>
    int(2)
    }
    ["matches"]=>
    array(20) {
    [76]=>
    array(2) {
    ["weight"]=>
    string(1) “2″
    ["attrs"]=>
    array(3) {
    ["cat_id"]=>
    string(1) “1″
    ["member_id"]=>
    string(1) “2″
    ["created"]=>
    string(10) “1264244709″
    }
    }
    …..这里省略…..
    [17]=>
    array(2) {
    ["weight"]=>
    string(1) “1″
    ["attrs"]=>
    array(3) {
    ["cat_id"]=>
    string(1) “1″
    ["member_id"]=>
    string(1) “2″
    ["created"]=>
    string(10) “1264244709″
    }
    }
    }
    ["total"]=>
    string(3) “995″
    ["total_found"]=>
    string(3) “995″
    ["time"]=>
    string(5) “0.008″
    ["words"]=>
    array(1) {
    ["北京"]=>
    array(2) {
    ["docs"]=>
    string(3) “995″
    ["hits"]=>
    string(3) “999″
    }
    }
    }
    至此PHP已可调用出结果!
  • 相关阅读:
    【转】浅谈 C++ 中的 new/delete 和 new[]/delete[]
    指针与const
    【面经】【转】C程序的内存布局
    【面经】二叉树层次遍历
    【面经】【转】C++类型转换
    【转】fastdb中的数据字典
    AtCoder AGC043D Merge Triplets (DP、组合计数)
    AtCoder AGC024F Simple Subsequence Problem (字符串、DP)
    Codeforces 1110G Tree-Tac-Toe (博弈论)
    Luogu P5244 [USACO2019Feb Platinum] Mowing Mischief (动态规划、决策单调性)
  • 原文地址:https://www.cnblogs.com/hyh123/p/5464511.html
Copyright © 2020-2023  润新知