coreseek+lnmp实现站内全文检索

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: coreseek+lnmp实现站内全文检索

coreseek安装与简单实用

安装环境

  • 系统环境

    • centos7.2
    • 1核2G
  • 软件环境

安装mmseg

  • 更新依赖包和安装编译环境
yum -y install m4 autoconf automake libtool
yum -y install gcc gcc-c++ wget
yum -y install mysql-devel

安装coreseek

tar -xzvf coreseek-3.2.14.tar.gz
cd coreseek-3.2.14
cd mmseg-3.2.14/
./bootstrap
./configure --prefix=/usr/local/mmseg3
make
make install

cd ../csft-3.2.14/
sh buildconf.sh
./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
make
make install

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

配置coreseek配置文件

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

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

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

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

数据库操作

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

创建索引数据(indexer)

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

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

Coreseek Fulltext 3.2 [ Sphinx 0.9.9-release (r2117)]
Copyright (c) 2007-2011,
Beijing Choice Software Technologies Inc (http://www.coreseek.com)

 using config file '/usr/local/coreseek/etc/csft.conf'...
WARNING: no such index '-rotate', skipping.
WARNING: no such index 'option', skipping.
total 0 reads, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg
total 0 writes, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg

测试索引数据(search)

/usr/local/coreseek/bin/search '小'

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

Coreseek Fulltext 3.2 [ Sphinx 0.9.9-release (r2117)]
Copyright (c) 2007-2011,
Beijing Choice Software Technologies Inc (http://www.coreseek.com)

 using config file '/usr/local/coreseek/etc/csft.conf'...
index 'test1': query '小 ': returned 3 matches of 3 total in 0.004 sec

displaying matches:
1. document=3, weight=1
2. document=4, weight=1
3. document=5, weight=1

words:
1. '小': 3 documents, 3 hits

启动searchd服务

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

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

创建测试代码

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

require './api/sphinxapi.php';
$sphinx = new SphinxClient();
$sphinx->SetServer('127.0.0.1', 9312);
$sphinx->SetArrayResult(true);
$sphinx->SetMatchMode(SPH_MATCH_ALL);
$sphinx->SetSortMode(SPH_SORT_RELEVANCE);
$result = $sphinx->query('小', '*');
var_dump($result);

查询出的结果如下

array(10) {
  ["error"]=>
  string(0) ""
  ["warning"]=>
  string(0) ""
  ["status"]=>
  int(0)
  ["fields"]=>
  array(3) {
    [0]=>
    string(4) "name"
    [1]=>
    string(3) "age"
    [2]=>
    string(3) "sex"
  }
  ["attrs"]=>
  array(0) {
  }
  ["matches"]=>
  array(3) {
    [0]=>
    array(3) {
      ["id"]=>
      int(2)
      ["weight"]=>
      string(1) "1"
      ["attrs"]=>
      array(0) {
      }
    }
    [1]=>
    array(3) {
      ["id"]=>
      int(3)
      ["weight"]=>
      string(1) "1"
      ["attrs"]=>
      array(0) {
      }
    }
    [2]=>
    array(3) {
      ["id"]=>
      int(4)
      ["weight"]=>
      string(1) "1"
      ["attrs"]=>
      array(0) {
      }
    }
  }
  ["total"]=>
  string(1) "3"
  ["total_found"]=>
  string(1) "3"
  ["time"]=>
  string(5) "0.003"
  ["words"]=>
  array(1) {
    ["小"]=>
    array(2) {
      ["docs"]=>
      string(1) "3"
      ["hits"]=>
      string(1) "3"
    }
  }
}

coreseek错误记录

安装coerseek问题一

cd ../csft-3.2.14/      

sh buildconf.sh

./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

 vi src/sphinxexpr.cpp  #然后将所有的T val = ExprEval ( this->m_pArg, tMatch ).....修改为T val =this->ExprEval ( this->m_pArg, tMatch ),共有三处。

安装coreseek错误二

make[2]: *** [tokenizer_zhcn.o] Error 1
make[2]: Leaving directory `/home/zyf/zyfwork/csft3.1b3/src’
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/zyf/zyfwork/csft3.1b3/src’
make: *** [all-recursive] Error 1

/usr/local/sphinx/src/sphinx.cpp:15557: undefined reference to `libiconv_open’
libsphinx.a(sphinx.o)(.text+0x53a01):/usr/local/sphinx/src/sphinx.cpp:15575: undefined
reference to `libiconv’
libsphinx.a(sphinx.o)(.text+0x53a28):/usr/local/sphinx/src/sphinx.cpp:15581: undefined
reference to `libiconv_close’
collect2: ld returned 1 exit status
make[2]: * [indexer] Error 1
make[2]: Leaving directory `/usr/local/sphinx/src’
make[1]: * [all] Error 2
make[1]: Leaving directory `/usr/local/sphinx/src’
make: * [all-recursive] Error 1


修改 configure 文件把 #define USE_LIBICONV 0 最后的数值由1改为0

安装coreseek问题三

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

参考链接

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

coreseek额外说明

安装路径

/usr/local/coreseek

配置目录

/usr/local/coreseek/etc/

执行程序目录

/usr/local/coreseek/bin/

配置文件说明

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

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

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

执行程序说明

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

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

分享文件目录说明

├── api.zip // coreseek类文件(该文件和测试代码目录下的api.zip是一样的)
├── coreseek-3.2.14.tar.gz // coreseek安装程序文件
├── coreseek配置文件 
│   └── csft.conf // 上述 配置coreseek配置文件 步骤中提交到的配置文件
├── 测试代码 
│   ├── api.zip
│   └── index.php // 测试代码
└── 测试数据库
    └── test.sql // 测试数据库
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6月前
|
关系型数据库 MySQL 应用服务中间件
百度搜索:蓝易云【LNMP网站框架搭建(编译安装)】
现在,你已经成功搭建了LNMP网站框架。你可以将你的网站文件放置在指定的网站根目录中,并访问你的域名或IP地址来查看网站。记得根据你的实际需求进行进一步的配置和安全性调整。
227 4
|
7月前
|
关系型数据库 MySQL Linux
百度搜索:蓝易云【Cnetos7编译安装MySQL教程。】
请注意,上述步骤提供了基本的编译安装MySQL的指南,具体的过程可能会因您选择的MySQL版本和特定需求而有所不同。如果遇到任何问题,建议参考MySQL官方文档或社区资源进行进一步的研究和咨询。
70 0
|
7月前
|
数据安全/隐私保护
百度搜索:蓝易云【Debian11系统编译安装Pure-Ftpd教程。】
以上是在Debian 11系统上编译安装Pure-FTPd的基本步骤。请根据实际情况进行相应的调整和配置。
37 0
|
7月前
|
存储 关系型数据库 MySQL
百度搜索:蓝易云【Debian11系统编译安装MySQL5.7教程。】
以上是在Debian 11系统上编译安装MySQL 5.7的基本步骤。请根据实际情况进行相应的调整和配置。
73 2
|
7月前
|
应用服务中间件 nginx
百度搜索:蓝易云【Debian11系统编译安装Nginx教程。】
以上是在Debian 11系统上编译安装Nginx的基本步骤。请根据实际情况进行相应的调整和配置。
58 2
|
关系型数据库 MySQL 测试技术
|
Web App开发 关系型数据库 应用服务中间件
|
自然语言处理 Shell C语言