Jtti广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php操作ElasticSearch搜索引擎流程详解
  • 621
分享到

php操作ElasticSearch搜索引擎流程详解

phpElasticSearch搜索引擎php搜索引擎 2021-02-18 19:02:25 621人浏览 无得
摘要

目录一、安装二、使用三、新建ES数据库四、创建表五、插入数据六、 查询所有数据七、查询单条数据八、搜索九、测试代码〝 古人学问遗无力,少壮功夫老始成 〞 如果这篇文章能给你带来一点帮助,希望给飞兔小哥哥一键三连,表示支持,谢谢各位小伙伴们。

目录
  • 一、安装
  • 二、使用
  • 三、新建ES数据库
  • 四、创建表
  • 五、插入数据
  • 六、 查询所有数据
  • 七、查询单条数据
  • 八、搜索
  • 九、测试代码

〝 古人学问遗无力,少壮功夫老始成 〞

如果这篇文章能给你带来一点帮助,希望给飞兔小哥哥一键三连,表示支持,谢谢各位小伙伴们。

一、安装

通过composer安装


composer require 'elasticsearch/elasticsearch'

二、使用

创建ES类


<?PHP
 
require 'vendor/autoload.php';
 
//如果未设置密码
$es = \Elasticsearch\ClientBuilder::create()->setHosts(['xxx.xxx.xxx.xxx'])->build();
 
//如果es设置了密码
$es = \Elasticsearch\ClientBuilder::create()->setHosts(['Http://username:passWord@xxx.xxx.xxx.xxx:9200'])->build()

三、新建ES数据库

index 对应关系型数据(以下简称Mysql)里面的数据库,而不是对应mysql里面的索引


<?php
$params = [
    'index' => 'autofelix_db', #index的名字不能是大写和下划线开头
    'body' => [
        'settings' => [
            'number_of_shards' => 5,
            'number_of_replicas' => 0
        ]
    ]
];
$es->indices()->create($params);

四、创建表

  • 在Mysql里面,光有了数据库还不行,还需要建立表,ES也是一样的
  • ES中的type对应MySQL里面的表
  • es6以前,一个index有多个type,就像MySQL中一个数据库有多个表一样
  • 但是ES6以后,每个index只允许一个type
  • 在定义字段的时候,可以看出每个字段可以定义单独的类型
  • 在first_name中还自定义了 分词器 ik,这是个插件,是需要单独安装的

<?php
$params = [
    'index' => 'autofelix_db',
    'type' => 'autofelix_table',
    'body' => [
        'mytype' => [
            '_source' => [
                'enabled' => true
            ],
            'properties' => [
                'id' => [
                    'type' => 'integer'
                ],
                'first_name' => [
                    'type' => 'text',
                    'analyzer' => 'ik_max_word'
                ],
                'last_name' => [
                    'type' => 'text',
                    'analyzer' => 'ik_max_word'
                ],
                'age' => [
                    'type' => 'integer'
                ]
            ]
        ]
    ]
];
$es->indices()->putMapping($params);

五、插入数据

  • 现在数据库和表都有了,可以往里面插入数据了
  • 在ES里面的数据叫文档
  • 可以多插入一些数据,等会可以模拟搜索功能

<?php
$params = [
    'index' => 'autofelix_db',
    'type' => 'autofelix_table',
    //'id' => 1, #可以手动指定id,也可以不指定随机生成
    'body' => [
        'first_name' => '飞',
        'last_name' => '兔',
        'age' => 26
    ]
];
$es->index($params);

六、 查询所有数据


<?php
$data = $es->search();
 
var_dump($data);

七、查询单条数据

  • 如果你在插入数据的时候指定了id,就可以查询的时候加上id
  • 如果你在插入的时候未指定id,系统将会自动生成id,你可以通过查询所有数据后查看其id

<?php
$params = [
    'index' => 'autofelix_db',
    'type' => 'autofelix_table',
    'id' =>  //你插入数据时候的id
];
$data = $es->get($params);

八、搜索

ES精髓的地方就在于搜索


<?php
$params = [
    'index' => 'autofelix_db',
    'type' => 'autofelix_table',
    'body' => [
        'query' => [
            'constant_score' => [ //非评分模式执行
                'filter' => [ //过滤器,不会计算相关度,速度快
                    'term' => [ //精确查找,不支持多个条件
                        'first_name' => '飞'
                    ]
                ]
            ]
        ]
    ]
];
 
$data = $es->search($params);
var_dump($data);

九、测试代码

基于Laravel环境,包含删除数据库,删除文档等操作


<?php
use Elasticsearch\ClientBuilder;
use Faker\Generator as Faker;
 

class EsDemo
{
    private $EsClient = null;
    private $faker = null;
 
    
    private $index = 'autofelix_db';
    private $type = 'autofelix_table';
 
    public function __construct(Faker $faker)
    {
        
        $this->EsClient = ClientBuilder::create()->setHosts(['xxx.xxx.xxx.xxx'])->build();
        
        $this->faker = $faker;
    }
 
    
    public function generateDoc($num = 100) {
        foreach (range(1,$num) as $item) {
            $this->putDoc([
                'first_name' => $this->faker->name,
                'last_name' => $this->faker->name,
                'age' => $this->faker->numberBetween(20,80)
            ]);
        }
    }
 
    
    public function delDoc($id) {
        $params = [
            'index' => $this->index,
            'type' => $this->type,
            'id' =>$id
        ];
        return $this->EsClient->delete($params);
    }
 
    
    public function search($query = [], $from = 0, $size = 5) {
//        $query = [
//            'query' => [
//                'bool' => [
//                    'must' => [
//                        'match' => [
//                            'first_name' => 'Cronin',
//                        ]
//                    ],
//                    'filter' => [
//                        'range' => [
//                            'age' => ['gt' => 76]
//                        ]
//                    ]
//                ]
//
//            ]
//        ];
        $params = [
            'index' => $this->index,
//            'index' => 'm*', #index 和 type 是可以模糊匹配的,甚至这两个参数都是可选的
            'type' => $this->type,
            '_source' => ['first_name','age'], // 请求指定的字段
            'body' => array_merge([
                'from' => $from,
                'size' => $size
            ],$query)
        ];
        return $this->EsClient->search($params);
    }
 
    
    public function getDocs($ids) {
        $params = [
            'index' => $this->index,
            'type' => $this->type,
            'body' => ['ids' => $ids]
        ];
        return $this->EsClient->mget($params);
    }
 
    
    public function getDoc($id) {
        $params = [
            'index' => $this->index,
            'type' => $this->type,
            'id' =>$id
        ];
        return $this->EsClient->get($params);
    }
 
    
    public function updateDoc($id) {
        $params = [
            'index' => $this->index,
            'type' => $this->type,
            'id' =>$id,
            'body' => [
                'doc' => [
                    'first_name' => '张',
                    'last_name' => '三',
                    'age' => 99
                ]
            ]
        ];
        return $this->EsClient->update($params);
    }
 
    
    public function putDoc($body = []) {
        $params = [
            'index' => $this->index,
            'type' => $this->type,
            // 'id' => 1, #可以手动指定id,也可以不指定随机生成
            'body' => $body
        ];
        $this->EsClient->index($params);
    }
 
    
    public function delAllIndex() {
        $indexList = $this->esStatus()['indices'];
        foreach ($indexList as $item => $index) {
            $this->delIndex();
        }
    }
 
    
    public function esStatus() {
        return $this->EsClient->indices()->stats();
    }
 
    
    public function createIndex() {
        $this->delIndex();
        $params = [
            'index' => $this->index,
            'body' => [
                'settings' => [
                    'number_of_shards' => 2,
                    'number_of_replicas' => 0
                ]
            ]
        ];
        $this->EsClient->indices()->create($params);
    }
 
    
    public function checkIndexExists() {
        $params = [
            'index' => $this->index
        ];
        return $this->EsClient->indices()->exists($params);
    }
 
    
    public function delIndex() {
        $params = [
            'index' => $this->index
        ];
        if ($this->checkIndexExists()) {
            $this->EsClient->indices()->delete($params);
        }
    }
 
    
    public function getMapping() {
        $params = [
            'index' => $this->index
        ];
        return $this->EsClient->indices()->getMapping($params);
    }
 
    
    public function createMapping() {
        $this->createIndex();
        $params = [
            'index' => $this->index,
            'type' => $this->type,
            'body' => [
                $this->type => [
                    '_source' => [
                        'enabled' => true
                    ],
                    'properties' => [
                        'id' => [
                            'type' => 'integer'
                        ],
                        'first_name' => [
                            'type' => 'text',
                            'analyzer' => 'ik_max_word'
                        ],
                        'last_name' => [
                            'type' => 'text',
                            'analyzer' => 'ik_max_word'
                        ],
                        'age' => [
                            'type' => 'integer'
                        ]
                    ]
                ]
            ]
        ];
        $this->EsClient->indices()->putMapping($params);
        $this->generateDoc();
    }
}

到此这篇关于php操作ElasticSearch搜索引擎流程详解的文章就介绍到这了,更多相关php ElasticSearch搜索引擎内容请搜索编程界以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程界!

--结束END--

本文标题: php操作ElasticSearch搜索引擎流程详解

本文链接: https://www.lsjlt.com/news/50.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • php操作ElasticSearch搜索引擎流程是什么
    本篇内容主要讲解“php操作ElasticSearch搜索引擎流程是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php操作ElasticSearch搜索引擎流程是什么”吧!一、安装通过co...
    705
    2023-09-29
  • PHP怎么实现搜索引擎类
    小编给大家分享一下PHP怎么实现搜索引擎类,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!PHP搜索引擎类1.类文件:class grabble{ &nb...
    439
    2023-09-29
  • Spring Boot整合Elasticsearch如何实现全文搜索引擎
    这篇文章给大家分享的是有关Spring Boot整合Elasticsearch如何实现全文搜索引擎的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。简单说,ElasticSearch(简称 ES)是搜索引擎,是结构化...
    293
    2023-09-29
    spring boot elasticsearch
  • 微服务分布式搜索引擎 ElasticSearch 查询文档
    文章目录 ⛄引言一、DSL查询文档⛅DSL 查询分类 二、DSL查询实例⛅全文检索查询⏰精确查询⚡地理坐标查询⌚复合查询 ⛵小结 ⛄引言 本文参考黑马 分布式Elastic search Elasticsearch是一款...
    681
    2023-09-29
    搜索引擎 elasticsearch 微服务 分布式 java
  • 什么是搜索引擎
    搜索引擎是一种帮助用户获取互联网信息的重要工具。通过索引和算法分析互联网上的信息,提供最准确、最有价值的搜索结果。搜索引擎的发展对人们的生活产生了深远的影响,并在信息获取、商业和政治等方面发挥着重要作用。本教程操作系统:windows10系...
    718
    2023-09-29
  • php Laravel 使用elasticsearch+ik中文分词器搭建搜索引擎
    文章目录 开发环境效果展示开发前准备及注意事项部署与安装安装ES到服务器为ES分配新用户并给新用户分配对应权限ES启动与停止修改配置与错误处理错误1错误2 启动ES安装IK分词器现在与你...
    871
    2023-09-29
    搜索引擎 elasticsearch php linux 中文分词
  • 10分钟用Python快速搭建全文搜索引擎详解流程
    有一个群友在群里问个如何快速搭建一个搜索引擎,在搜索之后我看到了这个 代码所在 Git:https://github.com/asciimoo/searx 官方很贴心,...
    847
    2023-09-29
    Python 搜索引擎 Python 文章搜索
  • 什么搜索引擎可以关闭JavaScript
    随着互联网的不断发展,搜索引擎成了我们日常生活中必不可少的工具。然而,我们可能会遇到一些无法解决的问题,例如浏览器出现卡顿、网页跳转失败等等。这往往是因为某些网站使用了JavaScript技术,导致浏览器出现了问题。而如果您想关闭JavaS...
    454
    2023-09-29
  • 怎么通过搜索引擎获取流量
    怎么通过搜索引擎获取流量?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、躲藏文本内容及躲藏连接大多是指页面专为搜索引擎规划,但一般拜访用户没办法看见文本内容及连接,在五花...
    348
    2023-09-29
  • Edge怎么设置默认搜索引擎
    这篇文章给大家分享的是有关Edge怎么设置默认搜索引擎的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体操作:打开浏览器设置。在设置里面找到隐私、搜索和服务。往下拉找到服务选项里面的地址栏和搜索。在地址栏中使用的...
    300
    2023-09-29
  • windows谷歌搜索引擎怎么使用
    这篇文章主要介绍“windows谷歌搜索引擎怎么使用”,在日常操作中,相信很多人在windows谷歌搜索引擎怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”windows谷歌搜索引擎怎么使用”的疑惑有所...
    265
    2023-09-29
  • 搜索引擎的倒排索引是什么
    本篇内容主要讲解“搜索引擎的倒排索引是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“搜索引擎的倒排索引是什么”吧!什么是倒排索引?  见其名知其意,有倒排索引,对应肯定,有正向索引。&nbs...
    406
    2023-09-29
  • 怎么在Spring Boot中使用ElasticSearch实现一个搜索引擎
    这篇文章将为大家详细讲解有关怎么在Spring Boot中使用ElasticSearch实现一个搜索引擎,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Elastic Search是一个开源的...
    607
    2023-09-29
    springboot elasticsearch
  • Python搜索引擎实现原理和方法
    如何在庞大的数据中高效的检索自己需要的东西?本篇内容介绍了Python做出一个大数据搜索引擎的原理和方法,以及中间进行数据分析的原理也给大家做了详细介绍。 布隆过滤器 (Bloom Filter) 第一步我...
    719
    2023-09-29
    原理 搜索引擎 方法
  • 搜索引擎工作原理是什么
    本篇内容介绍了“搜索引擎工作原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!搜索引擎发展过程现代意义上的搜索引擎的祖先,是1990年...
    902
    2023-09-29
  • Python中怎么保存搜索引擎结果
    本篇文章给大家分享的是有关Python中怎么保存搜索引擎结果,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。#!/usr/bin/env python  #-...
    302
    2023-09-29
  • 各大搜索引擎收录入口
    >> 搜索引擎网站收录地址大全 360搜索引擎登录入口:http://info.so.360.cn/site_submit.html百度搜索网站登录口:http://www.baidu.com/search/url_submit.html百...
    169
    2023-09-29
    搜索引擎 php 百度
  • 网站开发中搜索引擎算法调整和被搜索引擎惩罚的解决方法
    这期内容当中小编将会给大家带来有关网站开发中搜索引擎算法调整和被搜索引擎惩罚的解决方法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Google被惩罚,百度算法频繁更新。2009年金融危机,对我们这些依赖...
    189
    2023-09-29
  • SpringBoot2中怎么整合ElasticSearch框架实现高性能搜索引擎
    SpringBoot2中怎么整合ElasticSearch框架实现高性能搜索引擎,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、核心依赖<dependency>...
    655
    2023-09-29
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作