安装测试Manticore Search

2018-09-30 约 1827 字 预计阅读 4 分钟

最近有个项目腹案。打算就用Wordpress作为前端,用Python作为后台提供内容。

但是Wordpress的搜索功能不够强大,速度也非常慢。

如果贸然用不成熟的技术上新网站新项目,只会起到事倍功半的反效果。

我这个博客就是用来做各类技术练手之用,通过这博客一步步实现,就能令自己的“能”每天增加一点点。

上个月重启博客以来,今天翻过头来看最初的简陋网站,发现这个月还是学了不少新技术新知识。

“吾能即吾道”,能够做的事情越多,道路则越宽,所谓的修行财侣法地也就是靠这每天进步一点点的“能”慢慢达成。

回归正题。

现在搜索的OPEN SOURCE最知名的就是Elasticsearch,前些日子试着在自己的电脑上安装了一下,一直配置不成功,估计是要求的硬件资源过于庞大。

本拟直接购买外部的Elasticsearch service罢了,也不算太昂贵,最低起步是16美元每月。

但是用外部的服务不太明了其中的过程,是比较省心省力,但是没有达到格物致知的效果,不究竟。

还是想配置一遍,了解清楚,以后若流量大了需要更扩容的服务,再购买外部服务也能轻易转换。

但Elasticsearch虽然是OPEN SOURCE,但是用JAVA编的,本身JAVA不是很熟悉,占用资源那是相当惊人。

目前的硬件条件装这个软件力有未逮。

本人一向是“究竟而不执着”,此时不能,就换一个解决方案。

找到与其竞争的Sphinx Search。用C++编制,这个C++的运行效率肯定就是高多了。

但这个项目感觉好长时间没有更新了。有点老旧。

突然间发现一个Manticore,是Sphinx Search的分支项目,去年才开始上线,搜索研究了一下,发现一篇文章,评测师认为该项目比之Sphinx Search源码要更好,bug更少

值得尝试一下。

备份了现有服务器所有内容,开始增加搜索功能之旅。

安装Manticore Search


首先到其网站上下载适合本服务器系统的最新版本。本服务器用的是Ubuntu 18.04。网页上可以轻易找到最新版本链接。当前时间下载和安装的命令如下:
wget https://github.com/manticoresoftware/manticoresearch/releases/download/2.7.3/manticore_2.7.3-180926-d07c4d43-stemmer.bionic_amd64-bin.deb

sudo dpkg -i manticore_2.7.3-180926-d07c4d43-stemmer.bionic_amd64-bin.deb

根据其安装教程,还需要安装几个lib
sudo apt-get install libmysqlclient20 libodbc1 libpq5 libexpat1

然后启动此服务
sudo systemctl start manticore

服务器启动时也启动此服务
sudo systemctl enable manticore

创建Manticore Search测试数据库


先用root用户名口令登陆mysql
mysql -u root -p

创建一个test数据库
mysql> CREATE DATABASE test;

Manticore search提供了一个例子文件,导入到test数据库
mysql> SOURCE /usr/share/doc/MANTICORE/example-conf/example.sql

退出mysql命令界面
mysql> exit

好了,这样就有了一个测试数据库

配置Manticore search


因为manticore search是sphinx的分支项目,为了保持对元项目的兼容,配置文件仍然是一样的。

故此编辑其配置文件
sudo nano /etc/sphinxsearch/sphinx.conf

将数据库用户口令修改进去:
source src1
{
# data source type. mandatory, no default value
# known types are mysql, pgsql, mssql, xmlpipe, xmlpipe2, odbc
type = mysql

#####################################################################
## SQL settings (for 'mysql' and 'pgsql' types)
#####################################################################

# some straightforward parameters for SQL source types
sql_host = localhost
sql_user = root
sql_pass = yourpassword
sql_db = test
sql_port = 3306 # optional, default is 3306

....

配置文件很长,暂时其他无需修改。

测试Manticore search收录及检索


test数据库是在mysql里面储存的。Manicore search需要将之收录到自己的系统中。用下列命令:
sudo -u manticore indexer -c /etc/sphinxsearch/sphinx.conf test1 --rotate

出来一堆提示
indexing index 'test1'...
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 193 bytes
total 0.160 sec, 1202 bytes/sec, 24.91 docs/sec
total 4 reads, 0.000 sec, 8.1 kb/call avg, 0.0 msec/call avg
total 12 writes, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
rotating indices: successfully sent SIGHUP to searchd (pid=21729).

成功收录。我们需要用mysql登陆到Manicore
mysql -h0 -P9306

到了mysql命令行
mysql> show TABLES;

看到下列结果
+--------+-------------+
| Index | Type |
+--------+-------------+
| dist1 | distributed |
| test1 | local |
| testrt | rt |
+--------+-------------+
3 rows in set (0.00 sec)

表示test1已经收录成功了。我们就可以测试其检索功能
mysql> CALL KEYWORDS ('one two three', 'test1', 1);
+------+-----------+------------+------+------+
| qpos | tokenized | normalized | docs | hits |
+------+-----------+------------+------+------+
| 1 | one | one | 1 | 2 |
| 2 | two | two | 1 | 2 |
| 3 | three | three | 0 | 0 |
+------+-----------+------------+------+------+
3 rows in set (0.00 sec)

文档上有一些测试命令,可以参考测试。

不过测试之前,可以看一看他这个example写了些啥。退出mysql命令行后,运行一下
cat /usr/share/doc/MANTICORE/example-conf/example.sql

发现其代码:
DROP TABLE IF EXISTS test.documents;
CREATE TABLE test.documents
(
id INTEGER PRIMARY KEY NOT NULL AUTO_INCREMENT,
group_id INTEGER NOT NULL,
group_id2 INTEGER NOT NULL,
date_added DATETIME NOT NULL,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL
);

REPLACE INTO test.documents ( id, group_id, group_id2, date_added, title, content ) VALUES
( 1, 1, 5, NOW(), 'test one', 'this is my test document number one. also checking search within phrases.' ),
( 2, 1, 6, NOW(), 'test two', 'this is my test document number two' ),
( 3, 2, 7, NOW(), 'another doc', 'this is another group' ),
( 4, 2, 8, NOW(), 'doc number four', 'this is to test groups' );

DROP TABLE IF EXISTS test.tags;
CREATE TABLE test.tags
(
docid INTEGER NOT NULL,
tagid INTEGER NOT NULL,
UNIQUE(docid,tagid)
);

INSERT INTO test.tags VALUES
(1,1), (1,3), (1,5), (1,7),
(2,6), (2,4), (2,2),
(3,15),
(4,7), (4,40);

可以根据其内容进行SQL命令的测试。

今天暂时就先测试到此,后面要研究其跟wordpress的接口,届时再写一篇。

更新:跟Wordpress的接口与普通Mysql数据库并无二致,请阅读Manticore search教程2

 

 

 

author

Jesse Lau

网名遁去的一,简称遁一。2012年定居新西兰至今,自由职业者。
本文采用知识共享署名 4.0 国际许可协议进行许可。简而言之,可随意转发转载,转载请注明出处。


留点评论吧:

本网站使用cookie技术以提高用户体验度。 了解我们的隐私政策 我已了解