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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: 为什么会用到这个ES搜索?

一、背景


为什么会用到这个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搜索中。下面是我的一个代码示例


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;
    }
}


七、查询数据


//引入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)
相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
1月前
|
存储 自然语言处理 BI
|
30天前
|
自然语言处理 大数据 应用服务中间件
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
50 5
|
27天前
|
自然语言处理 Java 网络架构
elasticsearch学习三:elasticsearch-ik分词器的自定义配置 分词内容
这篇文章是关于如何自定义Elasticsearch的ik分词器配置以满足特定的中文分词需求。
109 0
elasticsearch学习三:elasticsearch-ik分词器的自定义配置 分词内容
|
2天前
|
存储 缓存 固态存储
Elasticsearch高性能搜索
【11月更文挑战第1天】
12 6
|
11天前
|
测试技术 API 开发工具
ElasticSearch的IK分词器
ElasticSearch的IK分词器
34 7
|
24天前
|
人工智能
云端问道12期-构建基于Elasticsearch的企业级AI搜索应用陪跑班获奖名单公布啦!
云端问道12期-构建基于Elasticsearch的企业级AI搜索应用陪跑班获奖名单公布啦!
167 2
|
2月前
|
Java PHP 数据安全/隐私保护
PHP 面向对象,构造函数,析构函数,继承,方法的重写,接口抽象类,static,final,this,parent,self的异同和作用
本文详细介绍了PHP面向对象编程的一系列核心概念和用法,包括构造函数、析构函数、继承、方法重写、访问控制、接口、抽象类、静态成员、final关键字、以及this、self、parent这三个关键字的异同和作用。通过具体示例代码,展示了如何在PHP中使用这些面向对象的特性,以及它们在实际开发中的应用。
PHP 面向对象,构造函数,析构函数,继承,方法的重写,接口抽象类,static,final,this,parent,self的异同和作用
|
27天前
|
Web App开发 JavaScript Java
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
这篇文章是关于如何使用Spring Boot整合Elasticsearch,并通过REST客户端操作Elasticsearch,实现一个简单的搜索前后端,以及如何爬取京东数据到Elasticsearch的案例教程。
160 0
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
|
28天前
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
92 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
|
2月前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入探索与实践在软件开发的广袤天地中,PHP以其独特的魅力和强大的功能,成为无数开发者手中的得力工具。而在这条充满挑战与机遇的征途上,设计模式犹如一盏明灯,指引着我们穿越代码的迷雾,编写出更加高效、灵活且易于维护的程序。今天,就让我们聚焦于设计模式中的璀璨明珠——策略模式,深入探讨其在PHP中的实现方法及其实际应用价值。
策略模式,这一设计模式的核心在于它为软件设计带来了一种全新的视角和方法。它允许我们在运行时根据不同情况选择最适合的解决方案,从而极大地提高了程序的灵活性和可扩展性。在PHP这门广泛应用的编程语言中,策略模式同样大放异彩,为开发者们提供了丰富的创作空间。本文将从策略模式的基本概念入手,逐步深入到PHP中的实现细节,并通过一个具体的实例来展示其在实际项目中的应用效果。我们还将探讨策略模式的优势以及在实际应用中可能遇到的挑战和解决方案,为PHP开发者提供一份宝贵的参考。