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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 为什么会用到这个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可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
14天前
|
Java PHP 数据安全/隐私保护
PHP 面向对象,构造函数,析构函数,继承,方法的重写,接口抽象类,static,final,this,parent,self的异同和作用
本文详细介绍了PHP面向对象编程的一系列核心概念和用法,包括构造函数、析构函数、继承、方法重写、访问控制、接口、抽象类、静态成员、final关键字、以及this、self、parent这三个关键字的异同和作用。通过具体示例代码,展示了如何在PHP中使用这些面向对象的特性,以及它们在实际开发中的应用。
PHP 面向对象,构造函数,析构函数,继承,方法的重写,接口抽象类,static,final,this,parent,self的异同和作用
|
13天前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入探索与实践在软件开发的广袤天地中,PHP以其独特的魅力和强大的功能,成为无数开发者手中的得力工具。而在这条充满挑战与机遇的征途上,设计模式犹如一盏明灯,指引着我们穿越代码的迷雾,编写出更加高效、灵活且易于维护的程序。今天,就让我们聚焦于设计模式中的璀璨明珠——策略模式,深入探讨其在PHP中的实现方法及其实际应用价值。
策略模式,这一设计模式的核心在于它为软件设计带来了一种全新的视角和方法。它允许我们在运行时根据不同情况选择最适合的解决方案,从而极大地提高了程序的灵活性和可扩展性。在PHP这门广泛应用的编程语言中,策略模式同样大放异彩,为开发者们提供了丰富的创作空间。本文将从策略模式的基本概念入手,逐步深入到PHP中的实现细节,并通过一个具体的实例来展示其在实际项目中的应用效果。我们还将探讨策略模式的优势以及在实际应用中可能遇到的挑战和解决方案,为PHP开发者提供一份宝贵的参考。
|
14天前
|
PHP UED 开发者
PHP中处理异常的现代方法
【9月更文挑战第26天】在PHP的世界里,异常处理是代码健壮性的守护神。本文将深入浅出地探讨如何在PHP项目中优雅地处理异常,从而避免程序崩溃并提升用户体验。
|
17天前
|
IDE 安全 网络安全
Xdebug 在不同版本的 PHP 中配置方法有什么不同?
Xdebug 在不同版本的 PHP 中配置方法有什么不同?
|
1月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
22天前
|
存储 缓存 自然语言处理
深度解析ElasticSearch:构建高效搜索与分析的基石
【9月更文挑战第8天】在数据爆炸的时代,如何快速、准确地从海量数据中检索出有价值的信息成为了企业面临的重要挑战。ElasticSearch,作为一款基于Lucene的开源分布式搜索和分析引擎,凭借其强大的实时搜索、分析和扩展能力,成为了众多企业的首选。本文将深入解析ElasticSearch的核心原理、架构设计及优化实践,帮助读者全面理解这一强大的工具。
106 7
|
2月前
|
人工智能 自然语言处理 搜索推荐
阿里云Elasticsearch AI搜索实践
本文介绍了阿里云 Elasticsearch 在AI 搜索方面的技术实践与探索。
18881 21
因为一个问题、我新学了一门技术 ElasticSearch 分布式搜索
这篇文章讲述了作者因为一个检索问题而学习了ElasticSearch技术,并分享了排查和解决ElasticSearch检索结果与页面展示不符的过程。
因为一个问题、我新学了一门技术 ElasticSearch 分布式搜索
|
1月前
|
JSON 监控 Java
Elasticsearch 入门:搭建高性能搜索集群
【9月更文第2天】Elasticsearch 是一个分布式的、RESTful 风格的搜索和分析引擎,基于 Apache Lucene 构建。它能够处理大量的数据,提供快速的搜索响应。本教程将指导你如何从零开始搭建一个基本的 Elasticsearch 集群,并演示如何进行简单的索引和查询操作。
90 3
|
24天前
|
PHP 开发者
PHP中的魔法方法
本文将介绍PHP中的一些特殊方法,这些方法以双下划线(__)开头,被称为魔术方法或魔法方法。这些方法在特定情况下会自动调用,例如当尝试访问未定义的属性或调用未定义的方法时。本文将详细讲解几个常用的魔术方法,以及如何在实际应用中使用它们来增强PHP代码的可读性和健壮性。
18 0