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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
云数据库 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可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
2月前
|
自然语言处理 Java 网络架构
elasticsearch学习三:elasticsearch-ik分词器的自定义配置 分词内容
这篇文章是关于如何自定义Elasticsearch的ik分词器配置以满足特定的中文分词需求。
156 0
elasticsearch学习三:elasticsearch-ik分词器的自定义配置 分词内容
|
3天前
|
机器学习/深度学习 人工智能 运维
阿里云技术公开课直播预告:基于阿里云 Elasticsearch 构建 AI 搜索和可观测 Chatbot
阿里云技术公开课预告:Elastic和阿里云搜索技术专家将深入解读阿里云Elasticsearch Enterprise版的AI功能及其在实际应用。
阿里云技术公开课直播预告:基于阿里云 Elasticsearch 构建 AI 搜索和可观测 Chatbot
|
6天前
|
存储 人工智能 API
(Elasticsearch)使用阿里云 infererence API 及 semantic text 进行向量搜索
本文展示了如何使用阿里云 infererence API 及 semantic text 进行向量搜索。
|
1月前
|
Java 程序员 PHP
01 入门PHP就来我这-安装phpstudy
路老师的PHP入门教程,带你从零开始学习PHP。首先下载并安装phpStudy,接着配置域名和端口,最后创建并运行第一个PHP文件。内容详实,适合初学者。
46 3
01 入门PHP就来我这-安装phpstudy
|
2天前
|
搜索推荐 API 定位技术
一文看懂Elasticsearch的技术架构:高效、精准的搜索神器
Elasticsearch 是一个基于 Lucene 的开源搜索引擎,以其强大的全文本搜索功能和快速的倒排索引技术著称。它不仅支持数字、文本、地理位置等多类型数据,还提供了可调相关度分数、高级查询 DSL 等功能。Elasticsearch 的核心技术流程包括数据导入、解析、索引化、查询处理、得分计算及结果返回,确保高效处理大规模数据并提供准确的搜索结果。通过 RESTful API、Logstash 和 Filebeat 等工具,Elasticsearch 可以从多种数据源中导入和解析数据,支持复杂的查询需求。
12 0
|
1月前
|
SQL 安全 PHP
PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全
本文深入探讨了PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全。
54 4
|
1月前
|
JSON PHP 数据格式
PHP解析配置文件的常用方法
INI文件是最常见的配置文件格式之一。
50 12
|
2月前
|
NoSQL MongoDB PHP
PHP7 MongDB 安装与使用
10月更文挑战第19天
38 1
PHP7 MongDB 安装与使用
|
1月前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
46 5
|
1月前
|
存储 缓存 固态存储
Elasticsearch高性能搜索
【11月更文挑战第1天】
48 6
下一篇
DataWorks