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

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

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

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

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

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

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

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

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

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

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

下载地址:

https://gitee.com/sdagfsdh/coreseek?_from=gitee_search

111.png

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

一:安装编译环境

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

已安装的同学请略过

二:安装mmseg3

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

222.png
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。

有好的建议,请在下方输入你的评论。

欢迎访问个人博客
https://guanchao.site

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容