`

sphinx的配置详情讲解和配置性能优化管理中文解释

 
阅读更多

网上配置文档众多,但是对着他们的文档来做老是出问题,于是花了点时间研究了一下,写成总结,方便以后查阅。也希望学习sphinx的朋友能少走弯路。Coreseek的安装请参考:http://blog.chinaunix.net/uid-20639775-id-3261834.html

一、sphinx的配置

1.   sphinx配置文件结构介绍

Sphinx的配置文件结构如下:

Source 源名称1{     

#添加数据源,这里会设置一些连接数据库的参数比如数据库的IP、用户名、密码等

#设置sql_query、设置sql_query_pre、设置sql_query_range等后面会结合例子做详细介绍

 ……

}

Index 索引名称1{

     Source=源名称1

#设置全文索引

     ……

}

Indexer{

#设置Indexer程序配置选项,如内存限制等

……

}

Searchd{  

#设置Searchd守护进程本身的一些参数

……

}

SourceIndex都可以配置多个。

 

2.   spinx配置案例详细解释

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

#定义一个数据源

source search_main

{

           #定义数据库类型

    type                 = mysql

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

    sql_host             = localhost

           #定义连接数据库的帐号

    sql_user             = root

           #定义链接数据库的密码

    sql_pass             = test123

           #定义数据库名称

    sql_db               = test

           #定义连接数据库后取数据之前执行的SQL语句

    sql_query_pre        = SET NAMES utf8

    sql_query_pre        = SET SESSION query_cache_type=OFF

           #创建一个sph_counter用于增量索引

    sql_query_pre        = CREATE TABLE IF NOT EXISTS sph_counter \

                                      ( counter_id INTEGER PRIMARY KEY NOT NULL,max_doc_id INTEGER NOT NULL)

           #取数据之前将表的最大id记录到sph_counter表中

    sql_query_pre        = REPLACE INTO sph_counter SELECT 1, MAX(searchid) FROM v9_search

           #定义取数据的SQL,第一列ID列必须为唯一的正整数值

    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_attr_uintsql_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

           #用于CLI的调试

    sql_query_info       = SELECT * FROM v9_search WHERE searchid=$id

}

#定义一个增量的源

source search_main_delta : search_main

{

    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_search_main索引

index index_search_main

{

           #设置索引的源

    source            = search_main

           #设置生成的索引存放路径

    path         = /usr/local/coreseek/var/data/index_search_main

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

    docinfo           = extern

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

    mlock             = 0

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

    morphology        = none

           #定义最小索引词的长度

    min_word_len      = 1

           #设置字符集编码类型,我这里采用的utf8编码和数据库的一致

    charset_type      = zh_cn.utf-8

           #指定分词读取词典文件的位置

    charset_dictpath  = /usr/local/mmseg3/etc

           #不被搜索的词文件里表。

    stopwords       = /usr/local/coreseek/var/data/stopwords.txt

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

    html_strip       = 0

}

#定义增量索引

index index_search_main_delta : index_search_main

{

    source   = search_main_delta

    path    = /usr/local/coreseek/var/data/index_search_main_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的位置

    log                = /usr/local/coreseek/var/log/searchd.log

           #定义查询log的位置

    query_log          = /usr/local/coreseek/var/log/query.log

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

    read_timeout       = 5

           #定义子进程的最大数量

    max_children       = 300

           #设置searchd进程pid文件名

    pid_file           = /usr/local/coreseek/var/log/searchd.pid

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

    max_matches        = 100000

           #启用无缝seamless轮转,防止searchd轮转在需要预取大量数据的索引时停止响应

    #也就是说在任何时刻查询都可用,或者使用旧索引,或者使用新索引

    seamless_rotate    = 1

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

    preopen_indexes    = 1

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

    unlink_old         = 1

           # MVA更新池大小,这个参数不太明白

    mva_updates_pool   = 1M

           #最大允许的包大小

    max_packet_size    = 32M

           #最大允许的过滤器数

    max_filters        = 256

           #每个过滤器最大允许的值的个数

    max_filter_values  = 4096

}

 

二、sphinx的管理

1.    生成Sphinx中文分词词库(新版本的中文分词库已经生成在了/usr/local/mmseg3/etc目录下)

cd /usr/local/mmseg3/etc

/usr/local/mmseg3/bin/mmseg -u thesaurus.txt

mv thesaurus.txt.uni uni.lib

2.   生成Sphinx中文同义词库

#同义词库是说比如你搜索深圳的时候,含有深圳湾等字的也会被搜索出来

/data/software/sphinx/coreseek-3.2.14/mmseg-3.2.14/script/build_thesaurus.py unigram.txt > thesaurus.txt

/usr/local/mmseg3/bin/mmseg -t thesaurus.txt

thesaurus.lib放到uni.lib同一目录

3.    生成全部索引

/usr/local/coreseek/bin/indexer --config /usr/local/coreseek/etc/sphinx.conf –all

若此时searchd守护进程已经启动,那么需要加上—rotate参数:

/usr/local/coreseek/bin/indexer --config /usr/local/coreseek/etc/sphinx.conf --all --rotate

4.    启动searchd守护进程

/usr/local/coreseek/bin/searchd --config /usr/local/coreseek/etc/sphinx.conf

5.   生成主索引

写成shell脚本,添加到crontab任务,设置成每天凌晨1点的时候重建主索引

/usr/local/coreseek/bin/indexer --config /usr/local/coreseek/etc/sphinx.conf --rotate index_search_main

6.     生成增量索引

写成shell脚本,添加到crontab任务,设置成每10分钟运行一次

/usr/local/coreseek/bin/indexer --config /usr/local/coreseek/etc/sphinx.conf --rotate index_search_main_delta

7.    增量索引和主索引的合并

写成shell脚本,添加到计划任务,每15分钟跑一次

/usr/local/coreseek/bin/indexer --config /usr/local/coreseek/etc/sphinx.conf --merge index_search_main index_search_main_delta --rotate

8.    使用search命令在命令行对索引进行检索

/usr/local/coreseek/bin/search --config /usr/local/coreseek/etc/sphinx.conf  游戏

 

 

分享到:
评论

相关推荐

    sphinx+mysql 安装手册

    4. **优化性能**:调整Sphinx配置参数,优化查询性能,例如调整匹配模式、过滤规则等。 ### 六、故障排查与维护 1. **监控日志**:定期查看Sphinx的日志文件,排查错误和异常。 2. **索引诊断**:检查索引文件的...

    高性能Mysql学习笔记.zip

    二、性能优化 1. 索引优化:学习何时以及如何创建索引,以及使用EXPLAIN分析查询执行计划。 2. 查询优化:识别和避免慢查询,使用EXPLAIN和PROFILE进行性能分析。 3. 存储优化:内存管理、缓冲池的使用和配置,以及...

    PHP特级课:LVS负载均衡:搜索引擎.docx

    介绍MongoDB的安装、使用、高级查询和更改操作,以及性能优化和数据库管理,强调了MongoDB在非关系型数据库领域的应用。 通过这门课程,学员不仅可以掌握LVS负载均衡技术,还能了解网站架构设计的多个重要方面,如...

    为系统管理员掌握Python脚本,Packt出版.zip

    13. **版本控制**:学习使用Git进行版本控制,协同开发和管理Python项目。 14. **文档编写**:使用sphinx等工具生成高质量的Python文档,方便他人理解和使用你的脚本。 15. **持续集成与持续部署(CI/CD)**:结合...

    coreseek搜索服务1

    博文链接提供的资源可能包含作者对CoreSeek的详细使用经验、安装配置教程、问题解决策略以及性能优化技巧。由于描述部分是NULL,我们无法直接获取具体信息,但通常这类博文会涵盖以下几个方面的知识点: 1. **...

    企业级代码开发平台源代码+详细教程100%好用.zip

    5. 故障排查与性能优化:教授如何调试系统,定位并解决问题,以及提升平台性能的技巧。 6. 安全性考虑:讲解如何保护源代码安全,防止未授权访问,以及数据加密和安全编码实践。 7. 部署与运维:涵盖生产环境的...

    PHP Team Development

    9. **性能优化**:书中可能包含关于代码优化、数据库查询优化、缓存策略等方面的知识,帮助团队提升应用程序的运行速度。 10. **团队协作技巧**:良好的沟通、代码审查、问题跟踪等技巧能提升团队合作的默契。例如...

    The Hacker's Guide to Python

    - **虚拟环境管理**:推荐了一些常用的虚拟环境管理工具(如virtualenv、venv),并展示了如何创建、激活和管理虚拟环境。 #### 九、单元测试 - **基础知识**:概述了单元测试的基本概念和流程,以及为什么进行...

    PHP快速开发工具箱.rar

    4. **数据库管理工具**:例如MySQL Workbench或phpMyAdmin,用于创建、修改和管理数据库,进行数据查询和备份。 5. **版本控制系统**:Git的安装指南和使用教程,用于团队协作和代码版本管理。 6. **PHP扩展**:如...

    Lucene in Action英文版

    - **高性能搜索**:通过优化索引结构和查询算法来提升搜索性能。 #### 五、扩展Lucene - **自定义分析器**:可以根据特定需求定制文本分析流程,如分词、去除停用词等。 - **插件与框架**:利用社区开发的各种插件...

    python-guide

    - **创建与管理**:讲解了如何使用venv、virtualenv等工具创建和管理虚拟环境。 #### 七、附加内容 这部分包含了一些额外的信息,例如社区资源、学习资料等。 ##### 7.1 社区资源 - **在线论坛**:推荐了一些活跃...

    Codemotion2012:Slide dell'intervento-Search source code

    在此次演讲中,可能涵盖了Sphinx的安装、配置、索引创建、查询优化以及如何将Sphinx集成到现有的开发环境中等技术细节。 【标签】"系统开源"强调了这场讨论的核心价值——开放源代码。开源意味着软件的源代码是公开...

    设置语音前端点:静音超时时间,即用户多长时间不说话则当做超时处理

    总的来说,理解并有效设置语音前端点的静音超时时间对于提高Android应用的语音识别性能和用户体验具有重要意义。开发者需要根据具体需求和用户行为,结合音频处理技术,创建适合自己应用的VAD策略。

    ekho-4.8.rar_Linux/Unix编程_Unix_Linux_

    源代码的提供意味着开发者或对编程感兴趣的用户可以查看、学习甚至修改ekho的内部工作原理,以适应特定的需求或优化性能。 标签"Linux/Unix编程 Unix_Linux"进一步确认了这个资源与这两类操作系统平台的软件开发...

Global site tag (gtag.js) - Google Analytics