资讯专栏INFORMATION COLUMN

lnmp+coreseek实现站内全文检索(安装篇)

flyer_dev / 1649人阅读

摘要:软件安装包安装环境系统环境核软件环境安装更新依赖包和安装编译环境安装在安装的过程中出现了三种错误情况,错误情况如下错误记录,可以参考修改即可配置配置文件配置文件主要修

软件安装包

</>复制代码

  1. 安装环境

系统环境

centos7.2

1核2G

软件环境

coreseek-3.2.14

lnmp1.5

</>复制代码

  1. 安装mmseg

更新依赖包和安装编译环境

</>复制代码

  1. yum -y install m4 autoconf automake libtool
  2. yum -y install gcc gcc-c++ wget
  3. yum -y install mysql-devel

</>复制代码

  1. 安装coreseek

</>复制代码

  1. tar -xzvf coreseek-3.2.14.tar.gz
  2. cd coreseek-3.2.14
  3. cd mmseg-3.2.14/
  4. ./bootstrap
  5. ./configure --prefix=/usr/local/mmseg3
  6. make
  7. make install
  8. cd ../csft-3.2.14/
  9. sh buildconf.sh
  10. ./configure --prefix=/usr/local/coreseek --without-python --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql --host=arm
  11. make
  12. make install

在安装csft的过程中出现了三种错误情况,错误情况如下错误记录,可以参考修改即可

</>复制代码

  1. 配置coreseek配置文件

配置文件主要修改的几个地方如下,具体的修改信息请参见 coreseek配置文件 目录的进行配置

</>复制代码

  1. source src1
  2. {
  3. type = mysql #数据库类型
  4. sql_host = localhost # MySQL主机IP
  5. sql_user = root # MySQL用户名
  6. sql_pass = 123 # MySQL密码
  7. sql_db = test # MySQL数据库
  8. sql_port = 3306 # MySQL端口
  9. sql_sock = /tmp/mysql.sock #如果是linux下需要开启,指定sock文件
  10. sql_query_pre = SET NAMES UTF8 # MySQL检索编码
  11. sql_query_pre = SET SESSION query_cache_type=OFF #关闭缓存
  12. sql_query = #获取数据的SQL语句
  13. SELECT id, title, content FROM post
  14. #sql_attr_uint = group_id #对排序字段进行注释
  15. #sql_attr_timestamp = date_added #对排序字段进行注释
  16. sql_query_info = SELECT * FROM post WHERE id=$id
  17. } #这行不需要修改
  18. source srclthrottled:srcl #继承主数据源
  19. 主数据源索引:
  20. index text1
  21. {
  22. source = src1 #索引源声明
  23. charset_type = utf-8 #数据编码(设置成utf8)
  24. charset_table = #上面指定了utf-8,这里需要开启
  25. }
  26. 增量索引
  27. index testlstemmed:test1 #先进行注释
  28. index distl #分布式也注释掉
  29. 索引器设置
  30. indexer
  31. {
  32. mem_limit = 256M # 内存大小限制 默认是 32M, 推荐为 256M
  33. } #其他用默认即可
  34. sphinx服务进程searchd的相关配置
  35. searchd {
  36. } #全部用默认的就可以了

除了上述的配置项外还需要多带带配置几项(如果你是安装的sphinx则进行上述配置即可,如果是coreseek则还需要配置下述内容)

</>复制代码

  1. index test1
  2. {
  3. #stopwords = G:datastopwords.txt
  4. #wordforms = G:datawordforms.txt
  5. #exceptions = /data/exceptions.txt
  6. #charset_type = sbcs
  7. 添加下面这两行,意思是把中文分词加入到配置文件中
  8. charset_type = zh_cn.utf-8
  9. charset_dictpath = /usr/local/mmseg/etc/ #你安装mmseg的目录
  10. }

</>复制代码

  1. 数据库操作

</>复制代码

  1. // 创建数据库
  2. create database test;
  3. // 创建数据表
  4. userinfo | CREATE TABLE `userinfo` (
  5. `id` int(4) NOT NULL AUTO_INCREMENT,
  6. `name` varchar(10) NOT NULL,
  7. `age` int(3) NOT NULL,
  8. `sex` enum("女","男") NOT NULL,
  9. PRIMARY KEY (`id`)
  10. ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4
  11. // 插入数据
  12. INSERT INTO `userinfo` VALUES (1,"张三",12,"女"),(2,"李四",13,"男"),
  13. (3,"小明",12,"女"),(4,"小红",13,"女"),(5,"小四",12,"女"),(6,"章泽天",13,"女");

</>复制代码

  1. 创建索引数据(indexer)

</>复制代码

  1. // 第一次创建索引
  2. /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --all
  3. // 第二次创建所以(当我们第一次创建索引之后,对数据表做了新的操作再按照上面的方式生成索引是会多增加一个参数)
  4. /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf -rotate option

如果上述的操作执行正确,则会提示如下信息

</>复制代码

  1. Coreseek Fulltext 3.2 [ Sphinx 0.9.9-release (r2117)]
  2. Copyright (c) 2007-2011,
  3. Beijing Choice Software Technologies Inc (http://www.coreseek.com)
  4. using config file "/usr/local/coreseek/etc/csft.conf"...
  5. WARNING: no such index "-rotate", skipping.
  6. WARNING: no such index "option", skipping.
  7. total 0 reads, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg
  8. total 0 writes, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg

</>复制代码

  1. 测试索引数据(search)

</>复制代码

  1. /usr/local/coreseek/bin/search "小"

正常情况下会出现下述信息

</>复制代码

  1. Coreseek Fulltext 3.2 [ Sphinx 0.9.9-release (r2117)]
  2. Copyright (c) 2007-2011,
  3. Beijing Choice Software Technologies Inc (http://www.coreseek.com)
  4. using config file "/usr/local/coreseek/etc/csft.conf"...
  5. index "test1": query "小 ": returned 3 matches of 3 total in 0.004 sec
  6. displaying matches:
  7. 1. document=3, weight=1
  8. 2. document=4, weight=1
  9. 3. document=5, weight=1
  10. words:
  11. 1. "小": 3 documents, 3 hits

</>复制代码

  1. 启动searchd服务

该服务是可以在/usr/local/coreseek/etc/csft.conf文件中的searchd配置项中配置,默认服务的端口已经配置,可以不多带带做配置

</>复制代码

  1. // 启动服务
  2. /usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft.conf
  3. // 检测服务启动情况
  4. [root@test ~]# netstat -anp | grep 9312
  5. tcp 0 0 0.0.0.0:9312 0.0.0.0:* LISTEN 31672/searchd

</>复制代码

  1. 创建测试代码

测试代码可以参见分享文件中的 测试代码 目录

</>复制代码

  1. require "./api/sphinxapi.php";
  2. $sphinx = new SphinxClient();
  3. $sphinx->SetServer("127.0.0.1", 9312);
  4. $sphinx->SetArrayResult(true);
  5. $sphinx->SetMatchMode(SPH_MATCH_ALL);
  6. $sphinx->SetSortMode(SPH_SORT_RELEVANCE);
  7. $result = $sphinx->query("小", "*");
  8. var_dump($result);

查询出的结果如下

</>复制代码

  1. array(10) {
  2. ["error"]=>
  3. string(0) ""
  4. ["warning"]=>
  5. string(0) ""
  6. ["status"]=>
  7. int(0)
  8. ["fields"]=>
  9. array(3) {
  10. [0]=>
  11. string(4) "name"
  12. [1]=>
  13. string(3) "age"
  14. [2]=>
  15. string(3) "sex"
  16. }
  17. ["attrs"]=>
  18. array(0) {
  19. }
  20. ["matches"]=>
  21. array(3) {
  22. [0]=>
  23. array(3) {
  24. ["id"]=>
  25. int(2)
  26. ["weight"]=>
  27. string(1) "1"
  28. ["attrs"]=>
  29. array(0) {
  30. }
  31. }
  32. [1]=>
  33. array(3) {
  34. ["id"]=>
  35. int(3)
  36. ["weight"]=>
  37. string(1) "1"
  38. ["attrs"]=>
  39. array(0) {
  40. }
  41. }
  42. [2]=>
  43. array(3) {
  44. ["id"]=>
  45. int(4)
  46. ["weight"]=>
  47. string(1) "1"
  48. ["attrs"]=>
  49. array(0) {
  50. }
  51. }
  52. }
  53. ["total"]=>
  54. string(1) "3"
  55. ["total_found"]=>
  56. string(1) "3"
  57. ["time"]=>
  58. string(5) "0.003"
  59. ["words"]=>
  60. array(1) {
  61. ["小"]=>
  62. array(2) {
  63. ["docs"]=>
  64. string(1) "3"
  65. ["hits"]=>
  66. string(1) "3"
  67. }
  68. }
  69. }
coreseek错误记录

</>复制代码

  1. 安装coerseek问题一

</>复制代码

  1. cd ../csft-3.2.14/     
  2. sh buildconf.sh
  3. ./configure --prefix=/usr/local/coreseek --without-python --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql --host=arm
  4.  vi src/sphinxexpr.cpp  #然后将所有的T val = ExprEval ( this->m_pArg, tMatch ).....修改为T val =this->ExprEval ( this->m_pArg, tMatch ),共有三处。

</>复制代码

  1. 安装coreseek错误二

</>复制代码

  1. make[2]: *** [tokenizer_zhcn.o] Error 1
  2. make[2]: Leaving directory `/home/zyf/zyfwork/csft3.1b3/src’
  3. make[1]: *** [all] Error 2
  4. make[1]: Leaving directory `/home/zyf/zyfwork/csft3.1b3/src’
  5. make: *** [all-recursive] Error 1
  6. /usr/local/sphinx/src/sphinx.cpp:15557: undefined reference to `libiconv_open’
  7. libsphinx.a(sphinx.o)(.text+0x53a01):/usr/local/sphinx/src/sphinx.cpp:15575: undefined
  8. reference to `libiconv’
  9. libsphinx.a(sphinx.o)(.text+0x53a28):/usr/local/sphinx/src/sphinx.cpp:15581: undefined
  10. reference to `libiconv_close’
  11. collect2: ld returned 1 exit status
  12. make[2]: * [indexer] Error 1
  13. make[2]: Leaving directory `/usr/local/sphinx/src’
  14. make[1]: * [all] Error 2
  15. make[1]: Leaving directory `/usr/local/sphinx/src’
  16. make: * [all-recursive] Error 1
  17. 修改 configure 文件把 #define USE_LIBICONV 0 最后的数值由1改为0

</>复制代码

  1. 安装coreseek问题三

</>复制代码

  1. db_interface_mysql.h:32:25: 致命错误:mysql/mysql.h:没有那个文件或目录
  2. // ubuntu系统解决方案
  3. sudo apt-get install libmysqlclient-dev
  4. // centos7解决方案
  5. sudo yum install mysql-devel

</>复制代码

  1. 参考链接

参考链接一
参考链接二
参考链接三

coreseek额外说明

</>复制代码

  1. 安装路径

</>复制代码

  1. /usr/local/coreseek

</>复制代码

  1. 配置目录

</>复制代码

  1. /usr/local/coreseek/etc/

</>复制代码

  1. 执行程序目录

</>复制代码

  1. /usr/local/coreseek/bin/

</>复制代码

  1. 配置文件说明

进入配置目录,你会找到如下几个文件

</>复制代码

  1. -rw-r--r--. 1 root root 905 10月 13 21:27 example.sql
  2. -rw-r--r--. 1 root root 18954 10月 13 21:27 sphinx.conf.dist
  3. -rw-r--r--. 1 root root 956 10月 13 21:27 sphinx-min.conf.dist

将sphinx.conf.dist文件复制一份名为csft.conf即可.其余文件可以不管.

</>复制代码

  1. 执行程序说明

进入执行程序目录可以看到如下几个文件,具体参考请见sphinx文档

</>复制代码

  1. -rwxr-xr-x. 1 root root 7032560 1013 21:27 indexer // 生成索引程序
  2. -rwxr-xr-x. 1 root root 6650552 1013 21:27 indextool // 调试程序
  3. -rwxr-xr-x. 1 root root 6740544 1013 21:27 search // 搜索程序
  4. -rwxr-xr-x. 1 root root 7970448 1013 21:27 searchd // 提供客户端查询索引服务
  5. -rwxr-xr-x. 1 root root 6370256 1013 21:27 spelldump // 提取字典内容

</>复制代码

  1. 分享文件目录说明

</>复制代码

  1. ├── api.zip // coreseek类文件(该文件和测试代码目录下的api.zip是一样的)
  2. ├── coreseek-3.2.14.tar.gz // coreseek安装程序文件
  3. ├── coreseek配置文件
  4. │   └── csft.conf // 上述 配置coreseek配置文件 步骤中提交到的配置文件
  5. ├── 测试代码
  6. │   ├── api.zip
  7. │   └── index.php // 测试代码
  8. └── 测试数据库
  9. └── test.sql // 测试数据库

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29533.html

相关文章

  • App后台api开发前的准备

    摘要:负责从拉取数据源,把数据源分词,建立索引搜索模块工作流程如下模块从中拉取数据模块用经过中文分词后的数据建立索引客户端向模块发起搜索请求模块查找索引中的数据模块得到索引中符合要求的数据的等数据把数据返回给客户端 (整理自《App后台开发运维和架构实践》 作者:曾健生) 一、从业务逻辑中提炼API接口 此过程可分为六个阶段: 业务逻辑思维导图 功能——业务逻辑思维导图 基本功能模块关系 ...

    yzzz 评论0 收藏0
  • App后台api开发前的准备

    摘要:负责从拉取数据源,把数据源分词,建立索引搜索模块工作流程如下模块从中拉取数据模块用经过中文分词后的数据建立索引客户端向模块发起搜索请求模块查找索引中的数据模块得到索引中符合要求的数据的等数据把数据返回给客户端 (整理自《App后台开发运维和架构实践》 作者:曾健生) 一、从业务逻辑中提炼API接口 此过程可分为六个阶段: 业务逻辑思维导图 功能——业务逻辑思维导图 基本功能模块关系 ...

    laoLiueizo 评论0 收藏0

发表评论

0条评论

flyer_dev

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<