PHP使用elasticsearch搜索安装及分词方法

2024-09-07 13:32

本文主要是介绍PHP使用elasticsearch搜索安装及分词方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、背景

为什么会用到这个ES搜索?
是因为我在看乌云的漏洞案例库时候,搜索即为不方便。

比如说说我要搜索一个 SQL注入

那mysql匹配的时候是like模糊匹配,搜索必须要有SQL注入这四个字,连续的才能查找到那这样会不太方便。

然后我就想着做一个分词,搜索起来会方便不少,第一个想到的就是ES搜索了。

怎么去用ES呢?

二、安装ES搜索

我们只需要一个JAVA环境并且把Java的环境变量配置好,我相信这些JAVA环境大家之前都配置过,这里不多说。

那现在只需要下载ES的文件,也不需要编译,下载下来就行了,把他放到一个目录。
下载地址: https://www.elastic.co/downlo...

三、 安装head

head是基于node开发的,所以需要先安装node
node下载地址:http://cdn.npm.taobao.org/dis...

在电脑任意一个目录下(不要在elasticsearch目录里面),执行一下命令,

git clone https://github.com/mobz/elasticsearch-head.git  
cd elasticsearch-head/  
npm install  

3、修改部分配置
修改两个地方:
文件:elasticsearch-headGruntfile.js

connect: {server: {options: {port: 9100,hostname: '*',base: '.',keepalive: true}}
}

增加配置,文件:elasticsearch-5.6.0configelasticsearch.yml

http.cors.enabled: true  
http.cors.allow-origin: "*"  

4、输入 npm run start 启动

5、访问head管理页面: http://localhost:9100/

四、安装composer

就是我们需要安装composer,安装composer干什么呢?

下载地址:https://getcomposer.org/Compo...

下载之后,直接下一步下一步就安装好了。

因为我们PHP如果调用ES搜索的接口,我们是需要去下载一个类库。

1. 在当前目录下载composer.phar
curl -sS https://getcomposer.org/installer | php
2. 在当前目录下创建一个composer.json的文件
{"require": {"elasticsearch/elasticsearch": "~2.0@beta"}
}
3. 安装依赖
php composer.phar install

五、安装分词插件

就是说我们需要安装一个分词插件。
在ES搜索当中Ik分词插件是中文分词最好用的一个,安装也极为方便。

我们只需要到GitHub上把他对应版本的这个,文件下载下来,然后解压到ES的插件目录,然后重新启动一下ES搜索服务,就可以了。

下载地址:https://github.com/medcl/elas...

怎么去验证这个插件有没有安装成功呢?
我们可以通过下面的URL,做分词测试。
http://localhost:9200/你的库名/_analyze?analyzer=ik_max_word&pretty=true&text=中华人民共和国

我们可以在这个URL中输入,中华人民共和国; 默认的分词器他会把中华人民共和国分别以以 中、华、人、民、共、和、国。

那我们选择用IK作为分词器后,它是可以把 中华人民共和国 作为一个词,把中华作为一个词。

六、导入数据

现在说一下怎么把数据库中的数据导入到ES中,

首先需要建立这样一个库,
然后把数据按照固定的格式插入到ES搜索中。下面是我的一个代码示例

<?php
require_once './vendor/autoload.php';//连接MYSQL数据库
function get_conn()
{@$conn = mysql_connect("localhost", "root", "") or die("error connecting");mysql_select_db("wooyun", $conn);mysql_query("SET NAMES 'UTF8'");return $conn;
}//插入数据到ES搜索中
function create_index($maxId, $client)
{//查询数据库中的数据$sql = "SELECT * FROM bugs where id > $maxId limit 0,300";get_conn();@$result_bugs = mysql_query($sql);while (@$row = mysql_fetch_assoc(@$result_bugs)) {$rtn[] = $row;}foreach ($rtn as $val) {$params = array();$params['body'] = array('id' => $val['id'],'wybug_id' => $val['wybug_id'],'wybug_title' => $val['wybug_title'],);$params['index'] = 'wooyun';$params['type'] = 'title';$client->index($params);}return (count($rtn) == 300) ? $val['id'] : false;
}set_time_limit(0);
$client = Elasticsearch\ClientBuilder::create()->setHosts(['localhost'])->build();
//删除所有数据
$client->indices()->delete(['index' => 'wooyun']);$a = true;
$maxId = 0;
while ($a) {$maxId = create_index($maxId, $client);if (empty($maxId)) {$a = false;}
}

七、查询数据

<?php
//引入mysql连接,和ES类库
require('conn.php');
require_once 'vendor/autoload.php';
function search($keyword, $page = 0, $size = 20)
{//对象实例化$client = Elasticsearch\ClientBuilder::create()->setHosts(['localhost'])->build();//查询数据的拼装$params = array();$params['index'] = 'wooyun';$params['type'] = 'title';$params['body']['query']['match']['wybug_title'] = $keyword;$params['from'] = $page;$params['size'] = $size;//执行查询$rtn = $client->search($params)['hits'];//结果组装组装数据$data['total'] = $rtn['total'];$data['lists'] = array_column($rtn['hits'], '_source');$data['lists'] = formartData(array_column($data['lists'], 'id'));return $data;
}function formartData($ids)
{$ids = implode($ids, ',');$sql = "select * from bugs where id in($ids)";$data = mysql_query($sql);$rtn = [];while (@$row = mysql_fetch_assoc(@$data)) {$rtn[] = $row;}return $rtn;
}$q0 = isset($_GET['q']) ? $_GET['q'] : 'SQL注入';
$num = "15"; //每页显示15条
$page = isset($_GET['page']) ? intval($_GET['page']) : 1;
$offset = ($page - 1) * $num;
$esData = search($q0, $offset, $num);

这篇关于PHP使用elasticsearch搜索安装及分词方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1145194

相关文章

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

Centos7安装Mongodb4

1、下载源码包 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.1.tgz 2、解压 放到 /usr/local/ 目录下 tar -zxvf mongodb-linux-x86_64-rhel70-4.2.1.tgzmv mongodb-linux-x86_64-rhel70-4.2.1/

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

hdu1240、hdu1253(三维搜索题)

1、从后往前输入,(x,y,z); 2、从下往上输入,(y , z, x); 3、从左往右输入,(z,x,y); hdu1240代码如下: #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#inc