sphinx(二)centos7编译安装coreseek3.2

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: sphinx是不支持中文分词的,所以,百度上给的大多数的结果是基于sphinx内核开发的coreseek+mmseg分词的一套组合来实现中文分词+全文检索。

QQ图片20220424174047.png


文章搜索我现在使用的是mysql的模糊查询like搜索标题关键字。


之前也有用全文索引,但是全文索引的效率比较低,所以,后期就没有在对文章内容进行匹配。


后来接触到中文分词器,感觉他刚好能解决我的问题:目前比较好的支持PHP的分词器大概有solr(基于Java开发),sphinx(基于C++开发)


Solr需要java环境才可以运行。我不太喜欢,所以,这个先被过滤掉。


比较好的选择就是sphinx(斯文克斯)


但是,sphinx是不支持中文分词的,所以,百度上给的大多数的结果是基于sphinx内核开发的coreseek+mmseg分词的一套组合来实现中文分词+全文检索。


但是有个问题,coreseek目前已经没有人在维护了。


官方网站已经不能访问了:www.coreseek.cn/


我能找到的最新版本是coreseek4.1。


coreseek4.1版本我在阿里云的centos7.8上边没有编译安装成功。所以我这里还是推荐使用coreseek3.2版本(基于sphinx0.9版本开发),版本有点老。


下载地址:

gitee.com/sdagfsdh/co…


QQ图片20220424174050.png


我这里主要使用的是红框标注的压缩包。


一:安装编译环境


yum -y install gcc gcc-c++ autoconf python python-devel libiconv libtool


已安装的同学请略过


二:安装mmseg3


我的软件包放在usr/local/download目录下


QQ图片20220424174053.jpg


cd /usr/local/download/coreseek-3.2.14
cd mmseg-3.2.14
chmod -R 777 ./configure # configure文件增加执行权限
./configure --prefix=/usr/local/mmseg3 # 安装目录是/usr/local/mmseg3
make&&make install


1:可能出现的报错


(1):config.status: error: cannot find input file: src/Makefile.in


解决方法:


yum -y install libtool
aclocal
libtoolize --force
automake --add-missing
autoconf
autoheader
make clean
./configure --prefix=/usr/local/mmseg3
make&&make install


2:编译成功显示


------------------------------------------------------------------------
Configuration:
  Source code location:       .
  Compiler:                   gcc
  Compiler flags:             -g -O2
  Host System Type:           x86_64-redhat-linux-gnu
  Install path:               /usr/local/mmseg3
  See config.h for further configuration information.
------------------------------------------------------------------------


三:安装coreseek


1:安装依赖项


yum -y install expat expat-devel


2:进入目录


# 进入目录
cd csft-3.2.14
# 给configure文件执行权限
chmod -R 777 ./configure
# 执行编译,编译命令需要根据你自己软件安装的情况来修改目录。
./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/local/mariadb # 我的mysql安装目录


这里需要注意一下,我的mysql是采用编译安装的,将所有文件(配置文件,数据库文件)都编译到了同一个目录下(/usr/local/mariadb),如果你的数据库是使用yum源安装的,那么上边的编译命令,可能用不了。


编译成功显示:


generating configuration files
------------------------------
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating libstemmer_c/Makefile
config.status: creating sphinx.conf.dist
config.status: creating sphinx-min.conf.dist
config.status: creating config/config.h
config.status: executing depfiles commands
configuration done
------------------


执行安装


make&&make install


1:可能出现的报错


make[2]: *** [sphinxexpr.o] Error 1
make[2]: Leaving directory `/usr/local/download/coreseek-3.2.14/csft-3.2.14/src'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/usr/local/download/coreseek-3.2.14/csft-3.2.14/src'
make: *** [all-recursive] Error 1


解决方法:


上面已经有提示, 在sphinxexpr.cpp文件里面(会有好多行),将”ExprEval“替换为”this->ExprEval“, 然后从新./configure........, 编译安装:


make && make install


安装成功显示:


make[2]: Leaving directory `/usr/local/download/coreseek-3.2.14/csft-3.2.14/src'
make[1]: Leaving directory `/usr/local/download/coreseek-3.2.14/csft-3.2.14/src'
Making all in test
make[1]: Entering directory `/usr/local/download/coreseek-3.2.14/csft-3.2.14/test'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/usr/local/download/coreseek-3.2.14/csft-3.2.14/test'
make[1]: Entering directory `/usr/local/download/coreseek-3.2.14/csft-3.2.14'
make[1]: Nothing to be done for `all-am'.
make[1]: Leaving directory `/usr/local/download/coreseek-3.2.14/csft-3.2.14'


至此,编译安装成功。


四:启动报错解决方法


使用如下命令启动coreseek


/usr/local/coreseek/bin/searchd


报错:


/usr/local/coreseek/bin/searchd: error while loading shared libraries: libmariadb.so.3: cannot open shared object file: No such file or directory


解决方法:


ln -s /usr/local/mariadb/lib/libmariadb.so.3 /usr/lib64/libmariadb.so.3


再次启动:


/usr/local/coreseek/bin/searchd


报错:


Coreseek Fulltext 3.2 [ Sphinx 0.9.9-release (r2117)]
Copyright (c) 2007-2011,
Beijing Choice Software Technologies Inc (http://www.coreseek.com)
FATAL: no readable config file (looked in /usr/local/coreseek/etc/csft.conf, ./csft.conf).


没有配置文件,解决方法:


cp /usr/local/coreseek/etc/sphinx-min.conf.dist csft.conf


再次启动


/usr/local/coreseek/bin/searchd


报错:


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'...
listening on all interfaces, port=9312
WARNING: index 'test1': preload: failed to open /usr/local/coreseek/var/data/test1.sph: No such file or directory; NOT SERVING
FATAL: no valid indexes to serve


就是找不到索引文件。


我们来配置cstf.conf文件:


#
# Minimal Sphinx configuration sample (clean, simple, functional)
#
source src1
{
    type                    = mysql
    # 你的数据库纤细
    sql_host                = localhost
    sql_user                = mysql
    sql_pass                =
    sql_db                  = test
    sql_port                = 3306  # optional, default is 3306
    sql_query               = \
        SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
        FROM documents
    sql_attr_uint           = group_id
    sql_attr_timestamp      = date_added
    sql_query_info          = SELECT * FROM documents WHERE id=$id
}
index test1
{
    source                  = src1
    # 确保一下路径存在,不存在提前创建
    path                    = /usr/local/coreseek/var/data/test1
    docinfo                 = extern
    charset_type            = sbcs
}
indexer
{
    mem_limit               = 32M
}
searchd
{
    port                    = 9312
    # 确保一下路径存在,不存在提前创建
    log                     = /usr/local/coreseek/var/log/searchd.log
    # 确保一下路径存在,不存在提前创建
    query_log               = /usr/local/coreseek/var/log/query.log
    read_timeout            = 5
    max_children            = 30
    # 确保一下路径存在,不存在提前创建
    pid_file                = /usr/local/coreseek/var/log/searchd.pid
    max_matches             = 1000
    seamless_rotate         = 1
    preopen_indexes         = 0
    unlink_old              = 1
}


我们将/usr/local/coreseek/etc目录下(安装目录)的example.sql导入数据库


# 使用test数据库
MariaDB [(none)]> use test;
Database changed
#导入sql文件
MariaDB [test]> source /usr/local/coreseek/etc/example.sql
Query OK, 0 rows affected, 1 warning (0.018 sec)
Query OK, 0 rows affected (0.011 sec)
Query OK, 4 rows affected (0.003 sec)
Records: 4  Duplicates: 0  Warnings: 0
Query OK, 0 rows affected, 1 warning (0.002 sec)
Query OK, 0 rows affected (0.010 sec)
Query OK, 10 rows affected (0.001 sec)
Records: 10  Duplicates: 0  Warnings: 0


创建索引:


/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf  --all –rotate


创建成功显示:


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'...
indexing index 'test1'...
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 193 bytes
total 0.003 sec, 56581 bytes/sec, 1172.67 docs/sec
total 2 reads, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
total 7 writes, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
WARNING: failed to scanf pid from pid_file '/usr/local/coreseek/var/log/searchd.pid'.
WARNING: indices NOT rotated.
复制代码


最后这两个警告,就是缺少文件。


解决方法不是自己去创建,重启服务器,再重新启动coreseek就可以了


五:coreseek常用命令


1:启动


/usr/local/coreseek/bin/searchd


2:停止


/usr/local/coreseek/bin/searchd –stop


3:创建索引


/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf  --all –rotate


4:搜索测试


/usr/local/coreseek/bin/search -c /usr/local/coreseek/etc/csft_mysql.conf -a abc


5:如果在coreseek运行时创建索引,加上--rotate参数,这样索引创建完成就直接生效了


/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf --all --rotate


其他使用方法,请参照sphinx。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
Linux 开发工具 C语言
Centos8下编译安装最新版ffmpeg解决方案(含Centos8换源阿里云)
Centos8下编译安装最新版ffmpeg解决方案(含Centos8换源阿里云)
2236 3
|
Linux 数据库管理 Python
CentOS7编译安装Python3.10(含OpenSSL1.1.1安装),创建虚拟环境,运行Django项目(含sqlite版本报错)
CentOS7编译安装Python3.10(含OpenSSL1.1.1安装),创建虚拟环境,运行Django项目(含sqlite版本报错)
2179 4
|
10月前
|
Linux 编译器 开发工具
在CentOS上编译安装TinyXml2
以上就是在CentOS上编译安装TinyXml2的步骤。这个过程可能看起来有些复杂,但是只要你按照步骤一步步来,应该不会有太大问题。如果在过程中遇到任何问题,你可以查阅相关的文档,或者在网上搜索解决方案。记住,编程就是一个不断学习和解决问题的过程,不要因为遇到困难就放弃。
232 27
|
10月前
|
Linux 开发工具 C语言
在CentOS系统中编译安装TinyXml2的方法
以上就是在CentOS系统中编译安装TinyXml2的方法。这个过程可能会有些复杂,但只要你按照上面的步骤一步一步来,你应该能够成功地完成这个任务。如果你在这个过程中遇到任何问题,你可以在网上搜索相关的资料,或者在相关的论坛上寻求帮助。希望这个指南能够帮助你成功地在你的CentOS系统中编译安装TinyXml2。
287 22
|
11月前
|
Linux Python
centos 编译安装 python 和 openssl
centos 编译安装 python 和 openssl
704 2
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
1175 2
|
安全 Linux 编译器
Centos 7.9如何使用源码编译安装curl最新版本
通过上述步骤,您就能在CentOS 7.9上成功地从源代码编译并安装curl的最新版本。这种方法不仅提供了灵活性,允许您定制编译选项,还确保了软件的最新功能和安全更新得到应用。
959 2
|
Linux 开发工具 C语言
centos7编译安装python3
centos7编译安装python3
|
分布式计算 Java Hadoop
centos7编译安装Hadoop3
centos7编译安装Hadoop3
|
关系型数据库 MySQL Linux
centos linux mysql 5.5脚本全自动源码包 编译安装
centos linux mysql 5.5脚本全自动源码包 编译安装
198 0