sphinx安装

背景

博主近日开发个全文搜索功能,本能的就想到了sphinx搜索引擎。实现之

安装

yum install make gcc gcc++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel expat-devel
wget http://files.opstool.com/man/coreseek-4.1-beta.tar.gz
tar -xzvf coreseek-4.1-beta.tar.gz
cd coreseek-4.1-beta
cd mmseg-3.2.14
./bootstrap
./configure --prefix=/usr/local/mmseg3
make && make install
cd ..
cd csft-4.1
sh buildconf.sh

这个地方有可能生成不了configure文件,需要修改部分文件,具体内容参考http://blog.youkuaiyun.com/jcjc918/article/details/39032689)


## 错误1:

解决办法:在 csft-4.1/configure.ac 文件中,查找:
AC_PROG_RANLIB 
后面加上
AM_PROG_AR 
最终格式为:AC_PROG_RANLIB AM_PROG_AR
再次执行 sh buildconf.sh 

## 错误2:

'automake --add-missing' can install 'ar-lib'
在命令行执行
#automake --add-missing
再次执行 sh buildconf.sh

## 错误3

编译的时候出现
sphinxexpr.cpp:1823:43: error: ‘ExprEval’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
   T val = ExprEval ( this->m_pArg, tMatch ); // 'this' fixes gcc braindamage
处理办法:
 #vim /usr/local/src/coreseek-4.1-beta/csft-4.1/src/sphinxexpr.cpp
 1746                  T val = ExprEval ( this->m_pArg, tMatch );
 形式修改为  T val = this->ExprEval ( this->m_pArg, tMatch );
 1777                  T val = ExprEval ( this->m_pArg, tMatch );
 形式修改为  T val = this->ExprEval ( this->m_pArg, tMatch );
 1823                  T val = ExprEval ( this->m_pArg, tMatch );
 形式修改为  T val = this->ExprEval ( this->m_pArg, tMatch );

 错误4

 In file included from sphinxstd.cpp:24:0:
py_layer.h:16:27: fatal error: Python.h: No such file or directory
  #include   <Python.h>  
  这是由于缺少了python环境的devel支持包
  解决办法:yum install python-devel
)
./configure --prefix=/usr/local/coreseek --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql=/usr   (which mysql_config找到安装位置)
make && make install

配置

mv  /usr/local/coreseek/etc/sphinx.conf /etc/sphinx.conf
vim sphinx.conf:
(简化版的sphinx的配置)
source main_src
{
        type                    = mysql
        sql_host                = localhost 
        sql_user                = root
        sql_pass                = 123456
        sql_db                  = blog
        sql_port                = 3306  # optional, default is 3306
        sql_query_pre           = SET NAMES utf8
        sql_query               = \
                SELECT ar.id,ar.content_html,ar.title,UNIX_TIMESTAMP(ar.created_at) as created_at, ca.name  FROM articles  ar \
                        left join cates ca on ar.cate_id = ca.id;
        sql_attr_uint           = id
        sql_attr_timestamp      = created_at
        sql_ranged_throttle     = 0
        sql_query_info          = SELECT ar.*, ca.name  FROM articles ar left join cates ca\
                        on ar.cate_id = ca.id  WHERE ar.id=$id;
}
index main
{
        source                  = main_src
        path                    = /usr/local/coreseek/var/data/articles
        docinfo                 = extern
        mlock                   = 0
        morphology              = none
        min_word_len            = 1
        charset_type            = zh_cn.utf-8
        html_strip              = 0
        charset_dictpath        = /usr/local/mmseg3/etc/
        ngram_len               = 0
}
indexer
{
        mem_limit               = 32M
}
searchd
{
        listen                  = 9312
        listen                  = 9306:mysql41
        log                     = /usr/local/coreseek/var/log/searchd.log
        query_log               = /usr/local/coreseek/var/log/query.log
        read_timeout            = 5
        client_timeout          = 300
        max_children            = 30
        pid_file                = /usr/local/coreseek/var/log/searchd.pid
        max_matches             = 1000
        seamless_rotate         = 1
        preopen_indexes         = 1
        unlink_old              = 1
        mva_updates_pool        = 1M
        max_packet_size         = 8M
        max_filters             = 256
        max_filter_values       = 4096
        max_batch_queries       = 32
        workers                 = threads # for RT to work
}
建立索引命令
/usr/local/coreseek/bin/indexer -c /etc/sphinx.conf --all --rotate
启动命令
/usr/local/coreseek/bin/searchd -c /etc/sphinx.conf
搜索命令
/usr/local/coreseek/bin/search -c /etc/sphinx.conf 中国
停止命令
/usr/local/coreseek/bin/searchd -c /etc/sphinx.conf --stop

索引自动化建立

(项目下的crontab子目录已有,根据你实际情况修改)
建立shell脚本,主要用来执行sphinx建立索引,重启服务,同时会记录日志到该目录下的sphinx.log

cd crontab
vim indexer.sh:
killall -9 searchd 
/usr/local/coreseek/bin/indexer -c /etc/sphinx.conf --all --rotate && 
/usr/local/coreseek/bin/searchd -c /etc/sphinx.conf
time=`date "+%Y-%m-%d %H:%M:%S "`
echo "${time} sphinx restart success" >> /usr/share/nginx/html/blog/crontab/sphinx.log

然后定时任务中每3小时执行一次该脚本:

crontab -e
0 */3 * * * /usr/share/nginx/html/blog/crontab/indexer.sh
service crond restart

请关注我的订阅号

订阅号.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码哥说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值