中小型网站结合mysql搭建elasticsearch分词搜索系统-k8凯发旗舰

elasticsearch是什么,用来做什么?这个就不重复了,相信你读到这篇文章时,对elasticsearch已有了解。对于中小型网站来说,怎样合理地搭建elasticsearch分词搜索系统呢?这里记一下个人心得,以便新人少走些弯路。

本文操作环境:php mysql elasticsearch elasticsearch-php

php上使用es需要安装elasticsearch-php,elasticsearch-php 的版本要和 elasticsearch 版本适配。

elasticsearch的安装这里就略去了,注意的地方主要是选择合适的elasticsearch的版本,因为不同版本的es用法还是有些细微区别。

要使用elasticsearch,关键的地方是导入查询数据。

elasticsearch本身就是一个数据库,普通中小网站大多使用mysql数据库,所以应用es时就涉及到两种数据库的配合。一种方法是放弃mysql只用es做后台数据库,阿里腾讯云等都提供了这种专门的elasticsearch数据库,不过要多花点银子,此外应用起来也需要学很多新东西,对新人来说有点难度。另外一种方法就是mysql和es结合使用,这也是明生(monseng)推荐的中小网站应用es的方法。

以下以mysql结合es使用为例,记一下个人心得。

网站使用elasticsearch分词检索,首先需要将mysql中数据查询出来并写入到elasticsearch中,同时要实现mysql和es数据源的同步更新,以保证es索引为最新数据。难点和节点其实也在这里,就是mysql中数据写入到elasticsearch索引。

es.jpg

方案一:使用第三方建站工具

如果你想闭着眼睛也可以在自己的网站上简单使用elasticsearch的话,其实也是一件非常容易的事情。可以借助第三方建站工具来实现,比如说使用wordpress,免费elasticpress 插件可以轻松搭建elasticsearch应用。

不过,wp es运行起来有点吃内存,这也是wordpress让人诟病的地方。

方案二、使用elasticsearch-php接口

直接操作es有点太暴力了,难度也大,我们可以借助现成的client包来完成es的使用。

elasticsearch-php是官方提供的php客户端,可以方便操作es。简单来说,elasticsearch-php可以为php端提供更简洁易用的封装方法,以方便建立es索引和进行检索。

php版的client包叫做elasticsearch-php,可git_hub上直接下载地址:https://github.com/elasticsearch/elasticsearch

一、elasticsearch-php的安装和启动

这也很简单,几个命令就完成了,具体可查看官方说明:

https://www.elastic.co/guide/cn/elasticsearch/php/current/_installation_2.html

官方elasticsearch-php也提供了composer自动安装方法,主要是两条命令:第一个命令来安装 composer.phar ,第二个命令来执行安装程序。

curl -s http://getcomposer.org/installer | php

php composer.phar install --no-dev

elasticsearch-php的安装也略去了,官方说明已经非常清楚,照着操作一般都没问题,如果这个都有问题的话,真正应用es就不方便了,得补一下课。

索引相当于 mysql 中的表,文档相当于mysql 中的行记录。

一、elasticsearch-php的加载

require './vendor/autoload.php';

use elasticsearch\clientbuilder;

$client = clientbuilder::create()->build();

也就是实例化一个es类。

二、elasticsearch进行建立索引和进行检索

elasticsearch-php实例化完成后,就可以连接mysql进行es索引的增删改查了。

这里以网上流行的代码为例,并整理一下。

(一)从mysql中创建一个名为index的索引(表)

create_index();

function create_index(){

global $pdo;

$client = new elasticsearch\client();

$sql = "select * from log";

$stmt = $pdo->query($sql);

$rtn = $stmt->fetchall();

//如果index存在则删除原索引

$params = array();

$params['index'] = 'log_index';

$client->indices()->delete($params);

//创建index索引,包括 log_date,src_ip,dest_ip

$rtncount = count($rtn);

for($i=0;$i<$rtncount;$i

){

$params = array();

$params['body'] = array(

'log_date' => $rtn[$i]['log_date'],

'src_ip' => $rtn[$i]['src_ip'],

'dest_ip' => $rtn[$i]['dest_ip']

);

$params['index'] = 'log_index';

$params['type'] = 'log_type';

$client->index($params);

}

echo 'create index done!';

}

(二)从索引index中执行查询src_ip(行记录)

search();

function search(){

$client = new elasticsearch\client();

$params = array();

$params['index'] = 'log_index';

$params['type'] = 'log_type';

$params['body']['query']['match']['src_ip'] = '1.122.33.141';

$rtn = $client->search($params);

var_dump($rtn);

}

(三)es返回值的读取

elasticsearch返回的数据格式为json,因为elasticsearch中的文档以json格式储存。

示例返回的就是json格式的$params数组,跟php查询mysql记录类似。

通过以上步骤的创建,基本上完成了网站中elasticsearch的简单应用。

#笔记 #记录
发表评论
投稿
网站地图