首先看下sphinx的有那么相关配置段和相对应的作用。

  • source:数据源,数据是从什么地方来的。

  • index:索引,当有数据源之后,从数据源处构建索引。索引实际上就是相当于一个字典检索。有了整本字典内容以后,才会有字典检索。

  • searchd:提供搜索查询服务。它一般是以deamon的形式运行在后台的。

  • indexer:构建索引的服务。当要重新构建索引的时候,就是调用indexer这个命令。

  • attr:属性,属性是存在索引中的,它不进行全文索引,但是可以用于过滤和排序。

接下来就来针对一个配置案例来做详细的配置介绍。

source test1
{
    type = mysql # 定义数据库类型

    sql_host = localhost # 定义数据库的IP或者计算机名

    sql_user = root # 定义连接数据库的帐号

    sql_pass = test123 # 定义链接数据库的密码

    sql_db = test # 定义数据库名称

    sql_port = 3306  # optional, default is 3306

    # sql_sock      = /tmp/mysql.sock # 如果是使用unix sock连接可以使用这个。

    sql_query_pre = SET NAMES utf8 # 定义连接数据库后取数据之前执行的SQL语句
    sql_query_pre = SET SESSION query_cache_type=OFF

    sql_query_pre = CREATE TABLE IF NOT EXISTS sph_counter \
                                      ( counter_id INTEGER PRIMARY KEY NOT NULL,max_doc_id INTEGER NOT NULL) # 创建一个sph_counter用于增量索引

    sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(searchid) FROM v9_search # 取数据之前将表的最大id记录到sph_counter表中

    sql_query = SELECT searchid,typeid,id,adddate,data FROM v9_search where \
                                      searchid<( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 ) \
                                        and searchid>=$start AND searchid<=$end # 定义取数据的SQL,第一列ID列必须为唯一的正整数值

    # sql_attr_uint 和 sql_attr_timestamp 用于定义用于api过滤或者排序,写多行制定多列
    sql_attr_uint = typeid
    sql_attr_uint = id
    sql_attr_timestamp = adddate

    sql_query_range = SELECT MIN(searchid),MAX(searchid) FROM v9_search # 分区查询设置

    sql_range_step = 1000 # 分区查询的步长

    sql_ranged_throttle = 0 # 设置分区查询的时间间隔

    sql_query_info = SELECT * FROM v9_search WHERE searchid=$id # 用于CLI的调试
}

source test1_delta : test1 # 定义一个增量的源
{
    sql_query_pre = set names utf8
            # 增量源只查询上次主索引生成后新增加的数据
            # 如果新增加的searchid比主索引建立时的searchid还小那么会漏掉
    sql_query = SELECT searchid,typeid,id,adddate,data FROM v9_search where \
                                  searchid>( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 ) \
                                   and searchid>=$start AND searchid<=$end
    sql_query_range = SELECT MIN(searchid),MAX(searchid) FROM v9_search where \
                                       searchid>( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
}

#定义一个index_test1索引
index test1
{

    source = test1 # 设置索引的源

    path = /usr/local/coreseek/var/data/test1 # 设置生成的索引存放路径

    docinfo = extern # 定义文档信息的存储模式,extern表示文档信息和文档id分开存储

    mlock = 0 # 设置已缓存数据的内存锁定,为0表示不锁定

    morphology = none # 设置词形处理器列表,设置为none表示不使用任何词形处理器

    min_word_len = 1 # 定义最小索引词的长度

    charset_type = zh_cn.utf-8 # 设置字符集编码类型,我这里采用的utf8编码和数据库的一致

    charset_dictpath = /usr/local/mmseg3/etc # 指定分词读取词典文件的位置

    stopwords = /usr/local/coreseek/var/data/stopwords.txt # 不被搜索的词文件里表。

    html_strip = 0 # 定义是否从输入全文数据中取出HTML标记
}

index test1_delta : test1 # 定义增量索引
{
    source = test1_delta
    path = /usr/local/coreseek/var/data/test1_delta
}

indexer # 定义indexer配置选项
{

    mem_limit = 512M # 定义生成索引过程使用索引的限制
}

searchd # 定义searchd守护进程的相关选项
{
    # 定义监听的IP和端口
    #listen = 127.0.0.1
    #listen = 172.16.88.100:3312
    listen = 3312
    listen = /var/run/searchd.sock

    log = /usr/local/coreseek/var/log/searchd.log # 定义log的位置

    query_log = /usr/local/coreseek/var/log/query.log  # 定义查询log的位置

    read_timeout = 5 # 定义网络客户端请求的读超时时间

    max_children = 300 # 定义子进程的最大数量

    pid_file = /usr/local/coreseek/var/log/searchd.pid # 设置searchd进程pid文件名

    max_matches = 100000 # 定义守护进程在内存中为每个索引所保持并返回给客户端的匹配数目的最大值

    seamless_rotate = 1 # 启用无缝seamless轮转,防止searchd轮转在需要预取大量数据的索引时停止响应,也就是说在任何时刻查询都可用,或者使用旧索引,或者使用新索引

    preopen_indexes = 1 # 配置在启动时强制重新打开所有索引文件

    unlink_old = 1 # 设置索引轮转成功以后删除以.old为扩展名的索引拷贝

    mva_updates_pool = 1M

    max_packet_size = 32M # 最大允许的包大小

    max_filters = 256 # 最大允许的过滤器数

    max_filter_values = 4096 # 每个过滤器最大允许的值的个数
}

参考:sphinx 配置文件全解析
sphinx的配置详情讲解和配置性能优化管理中文解释

参考地址


最后编辑: 于 3年前

评论列表(0)

    暂无评论