设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 数据 手机 公司
当前位置: 首页 > 教程 > 正文

CoreSeek Mysql 安装与检测中文分词与中文全文检索

发布时间:2022-06-17 15:12 所属栏目:61 来源:互联网
导读:CoreSeek是一款专门为中文免费开源的中文全文检索系统,它是一个支持Tb级的全文数据索引了,下面我们来看看CoreSeek Mysql 安装与测试. CoreSeek安装比较麻烦,官方手册对此的支持并不算很好,CoreSeek是基于Sphinx的中文的分词和全文检索软件,本文是在MAC OS X
       CoreSeek是一款专门为中文免费开源的中文全文检索系统,它是一个支持Tb级的全文数据索引了,下面我们来看看CoreSeek Mysql 安装与测试.
 
  CoreSeek安装比较麻烦,官方手册对此的支持并不算很好,CoreSeek是基于Sphinx的中文的分词和全文检索软件,本文是在MAC OS X系统下安装和调试CoreSeek.
 
  安装过程中报错如果是警告warning则忽略,如果是错误error,则必须要处理,CoreSeek是支持三种数据来源的,一种是众所周知的Mysql,一种是XML文件,另一种是Python,而Python则是万能数据类型,在本CoreSeek安装测试教程中只示例数据源是XML文件和MYSQL.
 
  官方手册地址:http://www.coreseek.cn/products-install/install_on_macosx
 
  一、设置环境变量
 
  $ export PATH=/usr/local/bin:$PATH
  $ export LC_ALL=zh_CN.UTF-8
  $ export.UTF-8
  二、安装依赖库:m4、autoconf、automake、libtool。
 
  注意:不要brew install 来安装,因为对安装的库的版本有要求.
 
  $ curl -O -L http://mirrors.kernel.org/gnu/m4/m4-1.4.13.tar.gz
  $ tar -xzvf m4-1.4.13.tar.gz
  $ cd m4-1.4.13
  $ sudo ./configure --prefix=/usr/local/opt
  $ sudo make
  $ sudo make install
  $ cd ..
  
  $ curl -O -L http://mirrors.kernel.org/gnu/autoconf/autoconf-2.65.tar.gz
  $ tar -xzvf autoconf-2.65.tar.gz
  $ cd autoconf-2.65
  $ sudo ./configure --prefix=/usr/local/opt
  $ sudo make
  $ sudo make install
  $ cd ..
  
  $ curl -O -L http://mirrors.kernel.org/gnu/automake/automake-1.11.tar.gz
  $ tar xzvf automake-1.11.tar.gz
  $ cd automake-1.11
  $ ./configure --prefix=/usr/local/opt
  $ sudo make
  $ sudo make install
  $ cd ..
  
  $ curl -O -L http://mirrors.kernel.org/gnu/libtool/libtool-2.2.6b.tar.gz
  $ tar xzvf libtool-2.2.6b.tar.gz
  $ cd libtool-2.2.6b
  $ sudo ./configure --prefix=/usr/local/opt
  $ sudo make
  $ sudo make install
  $ cd ..
  三、安装Mysql
 
  1、mysql 的安装自行安装
 
  2、查找mysql头文件地址和库文件地址,我用brew install mysql,安装的Mysql,头文件地址和库文件地址分别是/usr/local/Cellar/mysql/5.6.17_1/include/mysql 和 /usr/local/Cellar/mysql/5.6.17_1/lib
 
  头文件地址就是mysql.h所在的目录,库文件地址就是libmysqlclient.a所在的目录.
 
  四、下载Coreseek
 
  $ curl -O -L http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.14.tar.gz
  $ tar xzvf coreseek-3.2.14.tar.gz
  $ cd coreseek-3.2.14
  在coreseek-3.2.14文件夹下有mmseg和csft和testpack,mmseg是分词服务,csft是CoreSeek的核心服务,testpack是测试用例.
 
  五、安装mmseg
 
  $ cd mmseg-3.2.14
  $ sudo ./bootstrap
  $ sudo ./configure --prefix=/usr/local/opt/mmseg3
  $ sudo make
  $ sudo make install
  $ cd ..
  在make的时候,可能会报错,如下.
 
  file included from css/ThesaurusDict.cpp:6:
  ../src/css/ThesaurusDict.h:12:17: error: expected namespace name
  using namespace __gnu_cxx;
  ^
  css/ThesaurusDict.cpp:79:15: warning: result of comparison against a string
  literal is unspecified (use strncmp instead) [-Wstring-compare]
  if (filename == "-") {
      ^ ~~~
      css/ThesaurusDict.cpp:116:15: warning: result of comparison against a string
  literal is unspecified (use strncmp instead) [-Wstring-compare]
  if (filename != "-") {
      ^ ~~~
      2 warnings and 1 error generated.
      make[2] : *** [ThesaurusDict.lo] Error 1
  make[1]: *** [install-recursive] Error 1
  这个时候make进程已经终止,原因是因为编译器版本太高导致的,修改方法:1是降低编译器版本,反正我打死也不愿意,方法2如下:
 
  vim src/css/ThesaurusDict.h
  ###在头部找到:#include <string>
  ###再其下加入一行代码:
  #include <ext/hash_map>
  修改完后保存退出,继续重新sudo make一下,就没有error级错误了,然后sudo make install即可.
 
  六、安装coreseek
 
  $ cd csft-3.2.14
  $ sudo sh buildconf.sh
  $ sudo ./configure --prefix=/usr/local/opt/coreseek  --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/opt/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/opt/mmseg3/lib/ --with-mysql --with-mysql-includes=/usr/local/Cellar/mysql/5.6.17_1/include/mysql --with-mysql-libs=/usr/local/Cellar/mysql/5.6.17_1/lib
  $ sudo make  //phpfensi.com
  $ sudo make install
  $ cd ..
  在./configure时,参数--with-mysql-includes是mysql头文件位置,--with-mysql-libs是mysql库文件位置,请在本CoreSeek安装教程第三步所记录的mysql头文件地址和库文件地址,替换.
 
  在make时,可能又会出现error级的错误,如果出现make程序是停止运行的,必须要修改,错误提示如下:
 
  phinxexpr.cpp:1047:11: error: use of undeclared identifier 'ExprEval'
  T val = ExprEval ( this->m_pArg, tMatch ); // 'this' fixes gcc ...
  解决方法:修改源代码.
 
  vim src/sphinxexpr.cpp
 
  将T val = ExprEval(this->m_pArg,tMatch)替换为T val = this->ExprEval(this->m_pArg,tMatch).
 
  就是加了个“this->”,是把这个文件中所有的ExprEval()函数都修改了,有三四个吧,修改后保存退出,重新sudo make,然后sudo make install即可.
 
  七、测试XML数据
 
  $ cd testpack
  
  #测试编码是否正确显示中文,如果不是中文则请看本CoreSeek安装测试教程第一步
  
  $ cat var/test/test.xml
  
  # 测试mmseg分词的效果
  $ /usr/local/opt/mmseg3/bin/mmseg -d /usr/local/opt/mmseg3/etc var/test/test.xml
  
  # 建立检索的索引。
  $ /usr/local/opt/coreseek/bin/indexer -c etc/csft.conf --all
  
  #全文搜索“网络搜索”
  $ /usr/local/opt/coreseek/bin/search -c etc/csft.conf 网络搜索
  如果在建立检索的索引出错,FATAL: failed to lock var/data/xml.spl: Resource temporarily unavailable, will not index. Try --rotate option.
  则修改为
  $ /usr/local/opt/coreseek/bin/indexer -c etc/csft.conf --all --rotate
  八、测试MYSQL数据源
 
  cd testpack
 
  1、修改配置文件,文件位于testpack/etc/csft_mysql.conf
 
  vim etc/csft_mysql.conf
 
  我的csft_mysql.conf文件如下:记得把mysql 的sql_host,sql_user,sql_pass,sql_db,sql_port修改为自己的,并且把路劲都修改为你自己的路径.
 
  MySQL数据源配置,详情请查看:http://www.coreseek.cn/products-install/mysql/,请先将var/test/documents.sql导入数据库,并配置好以下的MySQL用户密码数据库.
 
  #源定义
  source mysql
  {
      type   = mysql
  
      sql_host   = localhost
      sql_user   = root
      sql_pass   = 8823150
      sql_db     = test
      sql_port   = 3306
      sql_query_pre   = SET NAMES utf8
  
      sql_query                = SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content FROM documents
        #sql_query第一列id需为整数
              #title、content作为字符串/文本字段,被全文索引
      sql_attr_uint   = group_id  #从SQL读取到的值必须为整数
      sql_attr_timestamp  = date_added #从SQL读取到的值必须为整数,作为时间属性
  
      sql_query_info_pre      = SET NAMES utf8                                        #命令行查询时,设置正确的字符集
      sql_query_info            = SELECT * FROM documents WHERE id=$id #命令行查询时,从数据库读取原始数据信息
  }
  
  #index定义
  index mysql
  {
      source            = mysql             #对应的source名称
      path            = /Users/lane/coreseek-3.2.14/testpack/var/data/mysql #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
      docinfo            = extern
      mlock            = 0
      morphology        = none
      min_word_len        = 1
      html_strip                = 0
  
      #中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/
      charset_dictpath = /usr/local/opt/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾
      #charset_dictpath = etc/                             #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
      charset_type        = zh_cn.utf-8
  }
  
  #全局index定义
  indexer
  {
      mem_limit            = 128M
  }
  
  #searchd服务定义
  searchd
  {
      listen                  =   9312
      read_timeout        = 5
      max_children        = 30
      max_matches            = 1000
      seamless_rotate        = 0
      preopen_indexes        = 0
      unlink_old            = 1
      pid_file = /Users/lane/coreseek-3.2.14/testpack/var/log/searchd_mysql.pid  #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
      log = /Users/lane/coreseek-3.2.14/testpack/var/log/searchd_mysql.log        #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
      query_log = /Users/lane/coreseek-3.2.14/testpack/var/log/query_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
  }
  2、给mysql导入测试数据
 
  mysql的测试数据我们用的是test数据库,documents数据表,请自行确保test数据库存在,我们一起来建documents表,这个表的结构和数据都是由CoreSeek提供的,在testpack/var/test/documents.sql.
 
  mysql -u root -p
  
  #输入密码
  
  #看看,数据库test在不在
  mysql > show databases;
  #如果test库不在请创建
  mysql > create database test;
  
  use test;
  
  #导入数据
  source /Users/lane/coreseek-3.2.14/testpack/var/test/documents.sql
  3、测试:
 
  $ cd testpack
  
  # 建立检索的索引
  $ /usr/local/opt/coreseek/bin/indexer -c etc/csft_mysql.conf --all
  
  #全文搜索“网络搜索”
  $ /usr/local/opt/coreseek/bin/search -c etc/csft_mysql.conf 网络搜索
  如果提示有错误,请检查csft_mysql.conf的路径、mysql的配置等信息是否正确.
 
  九、测试PHP+MYSQL
 
  1、先启动服务
 
  /usr/local/opt/coreseek/bin/searchd -c etc/csft.conf
 
  2、PHP文件
 
  <?php
  require ( "/Users/lane/coreseek-3.2.14/testpack/api/sphinxapi.php" );
  //phpfensi.com
  $cl = new SphinxClient ();
  $cl->SetServer ( '127.0.0.1', 9312);
  $cl->SetConnectTimeout ( 3 );
  $cl->SetArrayResult ( true );
  $cl->SetMatchMode ( SPH_MATCH_ANY);
  $res = $cl->Query ( '网络搜索', "*" );
  print_r($cl);
  print_r($res);
  ?>
  我在Linux折腾了一天没有搞定,在MAC搞了半天搞定了,等搞定Linux后再发Linux的.
 
 

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读