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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 为什么会用到这个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可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
18天前
|
Java Maven 开发工具
【ElasticSearch 】IK 分词器安装
【ElasticSearch 】IK 分词器安装
23 1
|
11天前
|
关系型数据库 MySQL
web简易开发(二){html5+php实现文件上传及通过关键字搜索已上传图片)}
web简易开发(二){html5+php实现文件上传及通过关键字搜索已上传图片)}
|
18天前
|
存储 数据可视化 数据挖掘
【ElasticSearch】ElasticSearch安装
【ElasticSearch】ElasticSearch安装
27 2
|
2天前
|
存储 自然语言处理 搜索推荐
分布式搜索引擎ElasticSearch
Elasticsearch是一款强大的开源搜索引擎,用于快速搜索和数据分析。它在GitHub、电商搜索、百度搜索等场景中广泛应用。Elasticsearch是ELK(Elasticsearch、Logstash、Kibana)技术栈的核心,用于存储、搜索和分析数据。它基于Apache Lucene构建,提供分布式搜索能力。相比其他搜索引擎,如Solr,Elasticsearch更受欢迎。倒排索引是其高效搜索的关键,通过将词条与文档ID关联,实现快速模糊搜索,避免全表扫描。
28 2
|
3天前
|
JavaScript Windows
window安装配置ElasticSearch
window安装配置ElasticSearch
|
6天前
|
SQL 监控 搜索推荐
Elasticsearch 与 OpenSearch:开源搜索技术的演进与选择
Elasticsearch 与 OpenSearch:开源搜索技术的演进与选择
33 2
|
6天前
|
人工智能 程序员 开发者
Elasticsearch 中文社区的转型后,搜索人怎么破局?
Elasticsearch 中文社区的转型后,搜索人怎么破局?
11 0
|
6天前
|
自然语言处理 算法 索引
Elasticsearch 8.X 分词插件版本更新不及时解决方案
Elasticsearch 8.X 分词插件版本更新不及时解决方案
10 0
|
6天前
|
存储 机器学习/深度学习 API
高维向量搜索:在 Elasticsearch 8.X 中利用 dense_vector 的实战探索
高维向量搜索:在 Elasticsearch 8.X 中利用 dense_vector 的实战探索
21 0
高维向量搜索:在 Elasticsearch 8.X 中利用 dense_vector 的实战探索
|
13天前
|
存储 搜索推荐 Java
Java远程连接本地开源分布式搜索引擎ElasticSearch
Java远程连接本地开源分布式搜索引擎ElasticSearch