分类: 系统运维

为什么要写这篇文章?

答:通过常规的三大步(./configure,make,make install)的编译安装mmseg时,总是出现找不到src/Makefile.in文件的错误(config.status: error: cannot find input file: src/Makefile.in)。即便是依照官方教程所说的先安装好依赖软件(yum -y install glibc-common libtool autoconf automake mysql-devel expat-devel,如果是用编译安装的方法安装的Mysql就不用装mysql-devel,在编译csf时指定Mysql的安装目录即可)也无法解决问题。

官方安装说明:(原文
============================================================

依赖环境安装:
Debina等使用deb系统:
aptitude -y install yum glibc-common build-essential libtool autoconf automake libexpat-dev  mysql-client (如果是用编译安装的方法安装的Mysql就不用装mysql-client ,在编译csf时指定Mysql的安装目录即可)
Centos等使用yum系统:
yum -y install glibc-common libtool autoconf automake expat-devel  mysql-devel (如果是用编译安装的方法安装的Mysql就不用装mysql-devel,在编译csf时指定Mysql的安装目录即可)
BSD系统:
pkg_add -r libtool autoconf automake mysql5-client iconv
安装升级autoconf
coreseek需要autoconf 2.64以上版本,因此需要升级autoconf,不然会报错从http://download.chinaunix.net/download.php?id=29328&ResourceID=648下载autoconf-2.64.tar.bz2,安装方法如下:

  1. tar -jxvf autoconf-2.64.tar.bz2
  2. cd autoconf-2.64
  3. ./configure
  4. make
  5. make instal

coresek source下载
http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.14.tar.gz
mmseg安装:

  1. tar xzvf coreseek-3.2.14.tar.gz
  2. cd coreseek-3.2.14
  3. ls
  4. csft-3.2.14 mmseg-3.2.14 README.txt testpack
  5. cd mmseg-3.2.14
  6. aclocal
  7. libtoolize --force
  8. automake --add-missing
  9. autoconf
  10. autoheader
  11. make clean #此时如有错误可忽略不管
  12. ./configure --prefix=/usr/local/mmseg3
  13. make
  14. make install

cp -f src/*/*.h /usr/local/mmseg3/include/mmseg/

一定要执行以上的拷贝,否则coreseek在make编译时会出错。

coreseek安装:

  1. cd ..
  2. cd csft-3.2.14
  3. bash buildconf.sh
  4. aclocal
  5. libtoolize --force
  6. automake --add-missing
  7. autoconf
  8. autoheader
  9. perl -pi -e 's/lpthread/lpthread -liconv/g' src/Makefile*
  10. make clean #此时如有错误可忽略不管
  11. ./configure --prefix=/usr/local/coreseek --enable-id64 --without-python --with-mysql=/usr/local/mysql --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/
  12. make
  13. make install
  14. cp /usr/local/coreseek/etc/sphinx.conf.dist /usr/local/coreseek/etc/csft.conf

测试mmseg分词和coreseek搜索:  参考 http://blog.chinaunix.net/uid-20639775-id-3261834.html
备注:需要预先设置好字符集为zh_CN.UTF-8,确保正确显示中文,我的系统字符集为en_US.UTF-8也是可以的。

  1. cd testpack
  2. cat var/test/test.xml #此时应该正确显示中文
  3. /usr/local/mmseg3/bin/mmseg -d /usr/local/mmseg3/etc var/test/test.xml
  4. /usr/local/coreseek/bin/indexer -c etc/csft.conf --all
  5. /usr/local/coreseek/bin/search -c etc/csft.conf 网络搜索
  6. 此时正确的应该返回
  7. words:
  8. 1. '网络': 1 documents, 1 hits
  9. 2. '搜索': 2 documents, 5 hits

**************分词库*****************

mkdir -p /usr/local/mmseg3/etc

cp <mmseg_soft_rootdir>/data/unigram.txt /usr/local/mmseg3/etc/

cd  /usr/local/mmseg3/etc

../bin/mmseg -u unigram.txt

生成unigram.txt.uni

cp unigram.txt.uni uni.lib

分词库配置说明

vi mmseg.ini

在里面添加内容
[mmseg]
merge_number_and_ascii=1;
number_and_ascii_joint=-.;
compress_space=0;
seperate_number_ascii=1;
以上解释如下
//
merge_number_and_ascii: 字母和数字连续出现是非切分
number_and_ascii_joint:连接数字和字母可用的符号,如’-’ ‘.’ 等
compress_space:暂时无效
seperate_number_ascii:是否拆分数字,如 1988 -> 1/x 9/x 8/x 8/x
//

*********************************

cd /usr/local/coreseek/

bin/indexer --all [--config sphinx.conf] 用于创建全文索引

bin/search <搜索关键字>   一个简单的命令行(CLI) 的测试程序,用于测试全文索引;

bin/searchd [--config sphinx.conf] 一个守护进程,其他软件可以通过这个守护进程进行全文检索;

附加:

1. 如需启用python支持,请安装或者升级至python2.6,configure之中,去掉--without-python,加上--with-python,然后重新编译安装
python data source演示:下载

2. 如果不可以搜索中文,请首先检查英文是否正常;如英文正常,则请检查:
  a. charset_dictpath = etc/dict/   #请确保uni.lib在此目录下
      charset_type = zh_cn.utf-8
  b. charset_table的配置请注释掉
  c. 请确保从数据来源读取的数据,为utf-8字符集;
  MySQL4.1起可以通过SET NAMES设定输出字符集,即使原始数据为GBK;
  MySQL4.1以下版本,请直接联系我们解决GBK问题;
  d. 请确保你测试检索时,传送到search或者searchd的字符串尾utf-8
  e. 请查看search或者Query返回信息中,分词信息是否正确
  d. 词典的设置和构建,具体请查看mmseg
  f. 请前往 论坛 提出问题

3. 如果提示:iniparser: cannot open /usr/local/csft/mmseg.ini
 请前往查看mmseg.ini具体设置方法

4. 如果提示no working pthreads library found,请参考
===============================================================
5. coreseek启动脚本
coreseek源码包里没有启动程序,只能手动通过命令来启动,将下面的文件命名为shinxed,保存在/etc/ini.d/里,就可以实现相应的系统自动启过徎。

  1. #!/bin/sh
  2. # sphinx: Startup script for Sphinx search
  3. #
  4. # chkconfig: 345 86 14
  5. # description: This is a daemon for high performance full text \
  6. # search of MySQL and PostgreSQL databases. \
  7. # See http://www.sphinxsearch.com/ for more info.
  8. #
  9. # processname: searchd
  10. # pidfile: /var/run/coreseek.pid
  11. # Source function library.
  12. . /lib/lsb/init-functions
  13. sphinxlocation=/usr/local/coreseek
  14. name=coreseek
  15. daemon=$sphinxlocation/bin/searchd
  16. config="-c $sphinxlocation/etc/csft_mysql.conf"
  17. RETVAL=0
  18. PATH=$PATH:$sphinxlocation/bin
  19. start() {
  20. echo -n $"Starting Sphinx daemon: "
  21. start-stop-daemon --start --quiet --pidfile /var/run/$name.pid \
  22. --exec $daemon -- $config || true
  23. echo "$name."
  24. }
  25. stop() {
  26. echo -n $"Stopping Sphinx daemon: "
  27. start-stop-daemon --stop --quiet --pidfile /var/run/$name.pid \
  28. --exec $daemon -- $config || true
  29. }
  30. # See how we were called.
  31. case "$1" in
  32. start)
  33. start
  34. ;;
  35. stop)
  36. stop
  37. ;;
  38. status)
  39. status $processname
  40. RETVAL=$?
  41. ;;
  42. restart)
  43. stop
  44. sleep 3
  45. start
  46. ;;
  47. condrestart)
  48. if [ -f /var/run/$name.pid ]; then
  49. stop
  50. sleep 3
  51. start
  52. fi
  53. ;;
  54. *)
  55. echo $"Usage: $0 {start|stop|status|restart|condrestart}"
  56. ;;
  57. esac
  58. exit $RETVAL

其中condrestart是conditional restart的意思,如果服务当前已经是运行的话,它可以重启这个服务,但是如果服务没有运行,condrestart是无法启动这个服务的。而restart都可以。

然后可以使用 sudo /etc/inid.d/sphinxed start来启动

ubuntu下开机自动启动:sudo update-rc.d sphinxed defaults

start-stop-daemon是一个很优秀的后台运行管理程序,采用C开发。Ubuntu上使用start-stop-daemon比较方便,CetnOS就要手动安装下。

  1. yum install gcc
  2. cd /tmp
  3. wget http://developer.axis.com/download/distribution/apps-sys-utils-start-stop-daemon-IR1_9_18-2.tar.gz
  4. tar zxf apps-sys-utils-start-stop-daemon-IR1_9_18-2.tar.gz
  5. cd apps/sys-utils/start-stop-daemon-IR1_9_18-2/
  6. gcc start-stop-daemon.c -o start-stop-daemon
  7. cp start-stop-daemon /usr/local/bin/start-stop-daemon

5. SphinxClient 安装php扩展sphinx
或者可以直接使用$root_path/coreseek-version/testpack/api/目录中的提供的api接口文件
1.安装

  1. 1、先安装sphinxclient
  2. #cd /usr/local/src
  3. #wget http://sphinxsearch.com/files/sphinx-0.9.9.tar.gz
  4. #tar xzvf sphinx-0.9.9.tar.gz
  5. #cd sphinx-0.9.9/api/libsphinxclient
  6. #vim sphinxclient.c
  7. 找到
  8. void sock_close ( int sock );
  9. 改为
  10. static void sock_close ( int sock );
  11. #./configure --prefix=/usr/local/sphinxclient
  12. #make
  13. #make install
  14. 2、安装sphinx扩展
  15. #wget http://pecl.php.net/get/sphinx-1.0.4.tgz
  16. #tar xvzf sphinx-1.0.4.tgz
  17. #cd sphinx-1.0.4
  18. #/usr/local/php/bin/phpize
  19. #./configure --with-php-config=/usr/local/php/bin/php-config --with-sphinx=/usr/local/sphinxclient
  20. #make
  21. #make install
  22. 修改php.ini
  23. extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
  24. [sphinx]
  25. extension=sphinx.so

2.测试
   1、安装sphinx
      请参照文档http://linux008.blog.51cto.com/2837805/622088
2、编写测试文件

  1. #vim sphinx.php
  2. $s = new SphinxClient;
  3. setServer("localhost", 9312);
  4. $s->setMatchMode(SPH_MATCH_ANY);
  5. $s->setMaxQueryTime(3);
  6. $result = $s->query("demo");
  7. var_dump($result);
  8. ?>
  9. #/usr/local/php/bin/php sphinx.php 运行结果
  10. array(9) {
  11. ["error"]=>
  12. string(0) ""
  13. ["warning"]=>
  14. string(0) ""
  15. ["status"]=>
  16. int(0)
  17. ["fields"]=>
  18. array(5) {
  19. [0]=>
  20. string(6) "cat_id"
  21. [1]=>
  22. string(13) "provider_name"
  23. [2]=>
  24. string(12) "goods_number"
  25. [3]=>
  26. string(18) "promote_start_date"
  27. [4]=>
  28. string(8) "keywords"
  29. }
  30. ["attrs"]=>
  31. array(8) {
  32. ["goods_sn"]=>
  33. string(1) "3"
  34. ["goods_name"]=>
  35. string(1) "3"
  36. ["brand_id"]=>
  37. string(1) "1"
  38. ["goods_weight"]=>
  39. string(1) "5"
  40. ["market_price"]=>
  41. string(1) "5"
  42. ["shop_price"]=>
  43. string(1) "5"
  44. ["promote_price"]=>
  45. string(1) "5"
  46. ["gid"]=>
  47. string(10) "1073741825"
  48. }
  49. ["total"]=>
  50. int(0)
  51. ["total_found"]=>
  52. int(0)
  53. ["time"]=>
  54. float(0)
  55. ["words"]=>
  56. array(1) {
  57. ["demo"]=>
  58. array(2) {
  59. ["docs"]=>
  60. int(0)
  61. ["hits"]=>
  62. int(0)
  63. }
  64. }
  65. }

linux环境下安装sphinx中文支持分词搜索(coreseek+mmseg)的更多相关文章

  1. Linux环境下安装Tigase XMPP Server

    Tigase是一种XMPP服务器,可以作为采用XMPP协议的各种IM(Instant Messeging)工具(如Pandion.Spark等)的服务器. 在Linux环境下安装Tigase的步骤如下 ...

  2. Linux环境下安装NodeJS和mongoDB

    前面的话 本文将详细介绍如何下Linux环境下安装NodeJS和mongoDB NodeJS [1]使用二进制包安装 1.在官网下载Linux环境下的NodeJS安装包 2.通过xftp软件将安装包上 ...

  3. ElasticHD Linux环境下安装

    ElasticHD Linux环境下安装教程        ElasticHD windows环境下安装教程   上一篇讲了ElasticHD windows环境下安装,这一篇继续说明ElasticH ...

  4. 在linux环境下安装redis并且搭建自己的redis集群

    此文档主要介绍在linux环境下安装redis并且搭建自己的redis集群 搭建环境: ubuntun 16.04 + redis-3.0.6 本文章分为三个部分:redis安装.搭建redis集群 ...

  5. [Linux]pycharm在Linux环境下安装

    之前转载了一个在Windows环境下pycharm专业破解的安装的文章,今天为了在Linux环境下安装使用odoo10,所以尝试在Linux环境下安装pycharm专业破解版看看. windows下安 ...

  6. Linux 环境下安装python相关

    目录 Linux 环境下安装python相关 linux软件包管理工具之yum工具(如同pip3工具) yum源理解 下载阿里云的.repo仓库文件 ,放到/etc/yum.repos.d/ yum安 ...

  7. JavaWeb入门——在Linux环境下安装Tomcat服务器

    JavaWeb入门——在Linux环境下安装Tomcat服务器 摘要:本文主要学习了如何在Linux环境下安装Tomcat服务器. 准备工作 检查Java环境变量 检查系统是否配置了Java的环境变量 ...

  8. Java入门——在Linux环境下安装JDK并配置环境变量

    Java入门——在Linux环境下安装JDK并配置环境变量 摘要:本文主要说明在Linux环境下JDK的安装,以及安装完成之后环境变量的配置. 使用已下载的压缩包进行安装 下载并解压 在Java的官网 ...

  9. Linux环境下安装Redis

    记录一下Linux环境下安装Redis,按顺序执行即可,这里下载的是Redis5,大家可根据自己的需求,修改版本号就好了,亲测可行. 1.下载Redis安装包cd /usr/local/wget ht ...

随机推荐

  1. Lambda表达式关于like问题(未解决)

    参考文章: http://stackoverflow.com/questions/3616215/like-in-lambda-expression-and-linq 1. c=>c.name. ...

  2. [Android学习笔记]理解焦点处理原理的相关记录

    焦点处理相关记录 以下所涉及的焦点部分,只是按键移动部分,不明确包含Touch Focus部分 需解决问题 控件的下一个焦点是哪? 分析思路 当用户通过按键(遥控器等)触发焦点切换时,事件指令会通过底 ...

  3. [经验分享] 最近调试FT232H遇到的坑

    cnblogs.com Yeats叶子 原创,转载请注明原始地址 - http://www.cnblogs.com/xiedidan/p/ft232h-poc.html Abstract FT232H ...

  4. Math类和Random类(数学公式相关类)

    Math 类包含用于执行基本数学运算的方法,如初等指数.对数.平方根和三角函数. 常用方法: 1.static 数值类型 abs(数值类型 a)      返回 double 值的绝对值. 2.sta ...

  5. [iOS翻译]《iOS7 by Tutorials》系列:在Xcode 5里使用单元测试(上)

    简介: 单元测试是软件开发的一个重要方面.毕竟,单元测试可以帮你找到bug和崩溃原因,而程序崩溃是Apple在审查时拒绝app上架的首要原因. 单元测试不是万能的,但Apple把它作为开发工具包的一部 ...

  6. 基于EventAggregator的事件发布及订阅

    EventAggregator简介 EventAggregator是Prism中专门处理ViewModel与ViewModel之间事件传递的类对象,它提供了针对事件的发布方法和订阅方法,所以可以非常方 ...

  7. 20145303 20145339 《信息安全系统设计基础》 实验五 简单嵌入式WEB服务器实验

    20145303 20145339 <信息安全系统设计基础> 实验五 简单嵌入式WEB服务器实验 实验目的与要求 1.掌握在ARM开发板实现一个简单WEB服务器的过程 2.学习在ARM开发 ...

  8. PHP+微信分享自定义小图标

    微信分享以后的小图标如下图: <script>document.addEventListener('WeixinJSBridgeReady', function onBridgeReady ...

  9. apply与call

    看这个apply真正应用.bind这是一个绑定时间的函数 var bind=function(object,type,fn){ if(object.attachEvent){//IE浏览器 objec ...

  10. jquery hasClass、removeClass、addClass方法

    hasClass(class) 检查当前的元素是否含有某个特定的类,如果有,则返回true. 参数: class:用于匹配的类名. ---------------------------------- ...