sphinx安装使用

赫赫小虾 2018-04-16

下载地址:

http://sphinxsearch.com/downloads/archive/

解压收编译配置

$ ./configure --prefix=/usr/local/sphinx --with-mysql

$ make

$ make install

$ cd /usr/local/sphinx/etc/

$ cp sphinx.conf.dist sphinx.conf

######################################################################

使用sphinx自带的例子

导入测试数据

$ mysql-u root -p  < /usr/local/sphinx/etc/example.sql

设置数据库信息

$ vim sphinx.conf

##### 索引源 ###########

source src1

{

    type = mysql            #####数据源类型

    sql_host = localhost    ######mysql主机

    sql_user = root         ########mysql用户名

    sql_pass = pwd          ############mysql密码

    sql_db = test           #########mysql数据库名

    sql_port= 3306          ###########mysql端口

    sql_query_pre = SET NAMES UTF8 ###mysql检索编码

    ####设置数据源

    sql_query = sql_query                = \

            SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \

            FROM documents

}

设置索引

index test1

{

    source          = src1 ####声明索引源

    path            = /usr/local/sphinx/var/data/test1 #######索引文件存放路径及索引的文件名

    docinfo = extern ##### 文档信息存储方式

}

生成索引

$ bin/indexer -c etc/sphinx.conf test1

php下调用shpinx进行搜索(这是源码api中php cli模式的用例,还有其它语言调用的相关用例)

$ cd /usr/local/software/sphinx-2.2.11-release

$ php test.php test

######################################################################

PHP调用demo

##### 索引源 ###########

source src1

{

    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检索编码

    sql_query = SELECT * FROM task ####### 获取数据的sql

    #####以下是用来过滤或条件查询的属性############

    ####自定义返回的字段

    sql_field_string        = id

    sql_field_string        = name

}

### 索引 ###

index test1

{

    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

}

######### 索引器配置 #####

indexer

{

    mem_limit = 256M ####### 内存限制

}

############ sphinx 服务进程 ########

searchd

{

    listen = 9312 ### 监听端口

    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 ### 是否支持无缝切换,做增量索引时通常需要

}

生成索引(只生成test1索引文件)

$ bin/indexer -c etc/sphinx.conf test1

如果重建索引时守护进程正在运行,会报错,需要运行下面的指令,会重建索引并且重开守护进程

$ /usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/test.conf --all --rotate

--all 参数表示将生成所有索引文件

searchd作为sphinx在服务器的守护进程

$ /usr/local/sphinx/bin/searchd -c /usr/local/sphinx/etc/sphinx.conf

停止

$ /usr/local/sphinx/bin/searchd -c /usr/local/sphinx/etc/sphinx.conf --stop

PHP端

<?php

    require "sphinxapi.php"; //sphinx的api目录(如:/usr/local/software/sphinx-2.2.11-release/api/)

    $cl = new SphinxClient();

    $cl->setServer("localhost", 9312);

    #$cl->setMatchMode(SPH_MATCH_EXTENDED); //使用多字段模式

    $res = $cl->query($keyword, "test1");

    //$err = $cl->getLastError();

    $res = !empty($res['matches']) ? $res['matches'] : "";

    print_r($res);

结果:

Array

(

    [1] => Array

        (

            [weight] => 1557

            [attrs] => Array

                (

                    [name] => zhengzhou

                )

        )

    [3] => Array

        (

            [weight] => 1557

            [attrs] => Array

                (

                    [name] => kaifeng-zhengzhou

                )

        )

)

相关推荐