WordPress使用Manticore search实现高效搜索-CentOS系统

作者: 站长 上传时间: 浏览: N/A 下载: N/A 格式: N/A 评分: N/A

Manticore Search是sphinx的分支开发版本,比sphinx的bug更少,使用更简单,且可以实现实时搜索,支持SNIPPET语法,还有很多高级用法,请至官方网站浏览manticoresearch.com

Manticore search支持以下centos/RHEL的32位和64位系统
CentOS 6 and RHEL 6
CentOS 7 and RHEL 7
CentOS 8 and RHEL 8

老牛最开始是在博客上使用了,参照本站搜索页面的高级搜索功能

最近一个WordPress站点准备上Manticore search,系统采用的是CentOS 6.8 64位,以下为安装过程记录

一、添加必要的环境组件
yum install mysql-libs postgresql-libs expat unixODBC -y

注意,对于要使用的源类型,一般只需要lib。如果您计划只从mysql数据库创建索引,那么安装mysql libs就足够了。如果您根本不打算使用“indexer”工具(创建索引的工具),则不需要安装这些软件包。
安装完成如下:

如果需要ICU开发包支持,需要额外安装以下包,本教程不安装
yum install libicu -y

二、安装Manticore Search有两种方法:
1、通过yum安装(本次教程,采用方式)
yum install https://repo.manticoresearch.com/manticore-repo.noarch.rpm -y
yum install manticore -y


安装完成后

Running Transaction
Installing : manticore-3.4.0_200327.b212975-1.el6.x86_64 1/1
Manticore Search (https://manticoresearch.com)

Getting Started with Manticore Search:
https://docs.manticoresearch.com/latest/html/getting-started.html

Learn Manticore with interactive courses:
https://play.manticoresearch.com/

To start Manticore Search service:
> service manticore start/stop

Configuration file:
/etc/manticoresearch/manticore.conf

Verifying : manticore-3.4.0_200327.b212975-1.el6.x86_64 1/1

Installed:
manticore.x86_64 0:3.4.0_200327.b212975-1.el6

2、通过rpm进行安装
wget https://github.com/manticoresoftware/manticoresearch/releases/download/3.4.0/manticore-3.4.0_200327.b212975-1.el7.centos.x86_64.rpm
rpm -Uhv manticore-3.4.0_200327.b212975-1.el7.centos.x86_64.rpm

三、新版Manticore Search控制命令
以默认配置启动Manticore Search服务
centos7
systemctl start manticore

centos6
service manticore start
或者以指定配置wpindex.conf启动
searchd --config /etc/manticoresearch/wpindex.conf

注意监听的端口!测试下manticore是否工作正常

以默认配置停止Manticore Search服务
service manticore stop
停止wpindex.conf配置的搜索服务
searchd --config /etc/manticoresearch/wpindex.conf --stop

添加Manticore Search自启动
chkconfig --level 345 manticore on

四、添加wp的索引和搜索配置

针对WordPress需要索引的字段编写wpindex.conf配置文件,这个有点儿多,暂时不写,有需要的可以留言,我再写,我也是参照已经定居新西兰的一个程序猿的教程搞的

建立必要的目录
mkdir /var/lib/manticore/data
cd /var/lib/manticore
chmod 777 data

要建立索引
前提是searchd服务器已经启动并监听了9312和9306端口(即第三节中已经按指定wpindex.conf配置启动Manticore Search服务)

添加针对本次需要索引的WordPress数据库配置文件并启用搜索监听服务
cd /etc/manticoresearch
vi /etc/manticoresearch/wpindex.conf
写入以下配置(自行去官网研究)

#
# INDEX GROUP:
# MY BLOG
#
# SOURCES:
# src_my_blog
#
# INDEXES:
# idx_blog
#
#
source src_my_blog {
type = mysql
sql_host = 127.0.0.1
sql_user = root
sql_pass = 这里输入你的mysql的root用户密码
sql_db = 这里是你需要建立索引的数据库
sql_query_pre = SET NAMES utf8
sql_query = \
SELECT DISTINCT \
wp_posts.ID as ID, \
wp_posts.post_title as title, \
wp_posts.post_content as body, \
wp_posts.guid as urlid, \
UNIX_TIMESTAMP(wp_posts.post_date) AS date_added \
FROM \
wp_posts \
WHERE \
wp_posts.post_type = 'post' AND \
wp_posts.post_status = 'publish';
sql_field_string = title
sql_field_string = body
sql_field_string = urlid
sql_attr_timestamp = date_added
}
index idx_blog {
type = plain
source = src_my_blog
path = /var/lib/manticore/data/idx_blog
min_word_len = 1
### support Chinese words query ###
charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
ngram_len = 1
ngram_chars = U+3000..U+2FA1F
html_strip = 1
html_index_attrs = img=alt,title; a=title;
html_remove_elements = style, script, object, embed, span
}
#############################################################################
## indexer settings
#############################################################################
indexer
{
# memory limit, in bytes, kiloytes (16384K) or megabytes (256M)
# optional, default is 128M, max is 2047M, recommended is 256M to 1024M
mem_limit = 256M
}
#############################################################################
## searchd settings
#############################################################################
searchd
{
listen = 127.0.0.1:9312
listen = 127.0.0.1:9306:mysql41
log = /var/log/manticore/searchd.log
query_log = /var/log/manticore/query.log
pid_file = /var/run/manticore/searchd.pid

read_timeout = 5
client_timeout = 300
max_children = 30
persistent_connections_limit = 30
seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
max_packet_size = 8M
max_filters = 256
max_filter_values = 4096
max_batch_queries = 32
workers = threads # for RT to work
binlog_path = /var/lib/manticore/data # binlog.001 etc will be created there
}
# --eof--

手动建立索引
indexer --config /etc/manticoresearch/wpindex.conf --all --rotate

测试搜索及索引是否正常,ssh root登录状态进入mysql控制台
mysql -h0 -P9306

六、新建crontab任务,每天凌晨4点定时更新索引
在你指定的文件夹内新建一个manticore.sh文件,写入以下命令(参考上面的控制常用命令文章)
/codefiles/crontab是我存放定时任务的shell脚本目录,根据你自己的来
cd /codefiles/crontab
vi manticore.sh
在manticore.sh内写入以下命令

#!/bin/bash
searchd --config /etc/manticoresearch/wpindex.conf --stop && indexer --config /etc/manticoresearch/wpindex.conf --all --rotate && searchd --config /etc/manticoresearch/wpindex.conf
exit 1

添加执行权限
chmod +x manticore.sh

crontab -e
vi编辑状态下(按i键),添加以下任务(每天凌晨4点执行索引更新)
0 4 * * * /codefiles/crontab/manticore.sh

七、Manticore Search与WordPress结合,使用ajax来展现搜索结果
进入WordPress主题根目录
新建js文件manticore_search.js
写入以下内容:

function displaysort() {
var q=document.getElementById("manticoresearch").value;
if (q==""){
return;
}
var x = document.getElementById("sort");
if (x.style.display === "none") {
x.style.display = "block";
}
var sort= document.getElementById("sortoption").value;
search(sort);
}
function search(str) {
if (str=="") {

return;
}
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (this.readyState==4 && this.status==200) {
document.getElementById("searchresult").innerHTML=this.responseText;
}
}
var q=document.getElementById("manticoresearch").value;
//
xmlhttp.open("GET","//你网站域名/wp-content/themes/你主题文件夹名称/manticore_search.php?q="+q+"&sort="+str,true);
xmlhttp.send();
}

然后在主题根目录新建一个manticore_search.php文件
写入以下内容

real_escape_string($q);
if ($sort=="1")
{
$sphinxQl="SELECT * ,SNIPPET(title,'".$q."','limit=100') as snippet FROM idx_blog WHERE MATCH('".$q."') OPTION max_matches=100";
}
else
{
$sphinxQl="SELECT * ,SNIPPET(title,'".$q."','limit=100') as snippet FROM idx_blog WHERE MATCH('".$q."') ORDER BY date_added DESC";
}
$result = $manticore->query($sphinxQl);

echo "高级搜索结果:";
echo "

";
function highlight_word( $content, $word) {
mb_internal_encoding("UTF-8");
mb_regex_encoding("UTF-8");
$replace = '' . $word . ''; // create replacement
$content = str_ireplace( $word, $replace, $content ); // replace content
return $content; // return highlighted data
}
?>

注意:上面的$replace后面的代码可能需要根据你的重写规则进行小调整

然后修改主题的search.php文件,在合适的地方加入以下代码(html内容及样式根据自己主题修改)





One thought on “WordPress使用Manticore search实现高效搜索-CentOS系统

Leave a Comment