首页 后端开发 php教程 PHP和Elasticsearch集成实现全文检索功能详解

PHP和Elasticsearch集成实现全文检索功能详解

Jun 25, 2023 am 10:14 AM
php elasticsearch 全文检索

随着互联网的发展,企业面对的文本数据越来越庞大。如何快速、准确地检索出相关内容,成为企业在信息化领域的重要课题之一。Elasticsearch作为一个基于Lucene的开源搜索引擎,具有高可用性、高可扩展性和快速检索的特点,成为企业全文检索的首选方案之一。而PHP作为一门流行的服务器端编程语言,也能够快速进行Web开发和API开发,成为与Elasticsearch集成的常用语言之一。

本篇文章主要讲解PHP和Elasticsearch集成,实现全文检索功能的详细步骤。

一、Elasticsearch简介

Elasticsearch是一款基于Lucene的开源搜索引擎,可用于快速、准确地检索大量文本数据。Elasticsearch采用分布式存储架构,支持水平扩展,能够适应海量数据存储和快速检索的需求。

Elasticsearch提供了RESTful API接口,支持JSON格式的数据交互,与常用的编程语言都可以进行集成。在Elasticsearch中,数据按照文档存储,每个文档包含多个字段,每个字段又可以嵌套包含其他字段,使得数据结构更加灵活。同时,Elasticsearch支持对文档进行全文检索、精确匹配、聚合、分析等操作。

二、PHP与Elasticsearch集成

  1. 安装Elasticsearch-PHP库

Elasticsearch-PHP是官方提供的PHP客户端库,封装了Elasticsearch的RESTful API接口,可以方便地在PHP应用中进行Elasticsearch的操作。我们可以通过Composer安装该库,执行以下命令:

composer require elasticsearch/elasticsearch
登录后复制
  1. 连接Elasticsearch

连接Elasticsearch之前,需要先启动Elasticsearch服务。在PHP中使用Elasticsearch-PHP库连接Elasticsearch,需先实例化ElasticsearchClient对象,并设置连接的Elasticsearch服务器ip和端口:

require 'vendor/autoload.php';

$client = ElasticsearchClientBuilder::create()->setHosts(['http://127.0.0.1:9200'])->build();
登录后复制

其中,setHosts()方法传入一个数组参数,每个元素表示一个Elasticsearch服务器,可以设置多个服务器,实现高可用性和负载均衡。

  1. 创建索引

在Elasticsearch中,索引是用于存储和检索相似数据的数据结构,类似于数据库中的表。可以通过以下代码创建一个名为“my_index”的索引:

$params = [
    'index' => 'my_index',
    'body' => [
        'settings' => [
            'number_of_shards' => 5, // 分片数
            'number_of_replicas' => 1, // 副本数
        ],
    ],
];

$response = $client->indices()->create($params);
登录后复制

其中,$params数组参数中,'settings'表示索引的设置,包含分片数和副本数等信息。'body'表示索引的映射,可以在该参数中设置索引的字段和类型等。

  1. 添加文档

在Elasticsearch中添加文档,可以通过以下代码实现:

$params = [
    'index' => 'my_index',
    'id' => '1',
    'body' => [
        'title' => 'Elasticsearch PHP集成',
        'content' => 'Elasticsearch是一款基于Lucene的开源搜索引擎...'
    ]
];

$response = $client->index($params);
登录后复制

其中,$params数组参数中,'index'表示要添加文档的索引名称;'id'表示文档的唯一标识,可选参数;'body'表示文档的内容,可以设置多个字段和值。

  1. 搜索文档

在Elasticsearch中搜索文档,可以通过以下代码实现:

$params = [
    'index' => 'my_index',
    'body'  => [
        'query' => [
            'match' => [
                'title' => 'Elasticsearch PHP'
            ]
         ]
    ]
];

$response = $client->search($params);
登录后复制

其中,$params数组参数中,'index'表示要搜索文档的索引名称;'body'表示查询条件,可以设置多个查询条件和排序规则。

三、PHP+Elasticsearch实现全文检索

  1. 建立索引

在使用Elasticsearch实现全文检索之前,需要先将要检索的数据建立索引。建立索引时,可以将要检索的字段设置成text类型,这样就可以进行全文索引。

在本例中,假设要检索的数据为学生表,包含字段id、name、age和score。我们可以通过以下代码创建一个名为“student”的索引:

$params = [
    'index' => 'student',
    'body' => [
        'settings' => [
            'number_of_shards' => 5,
            'number_of_replicas' => 1,
        ],
        'mappings' => [
            'properties' => [
                'id' => ['type' => 'integer'],
                'name' => ['type' => 'text', 'analyzer' => 'ik_max_word'],
                'age' => ['type' => 'integer'],
                'score' => ['type' => 'double']
            ]
        ]
    ]
];

$response = $client->indices()->create($params);
登录后复制

其中,'name'字段的类型设置为text,同时指定了分词器,这里使用了中文分词插件ik_max_word,可以将中文文本按照最大化分词的方式进行处理。

  1. 添加文档

在建立索引后,可以向索引中添加文档。假设要添加一个学生信息,可以通过以下代码实现:

$params = [
    'index' => 'student',
    'body' => [
        'id' => 1,
        'name' => '张三',
        'age' => 18,
        'score' => 90.5
    ]
];

$response = $client->index($params);
登录后复制

可以通过循环添加的方式,向索引中添加多个文档。

  1. 搜索文档

在建立索引并添加文档后,可以进行全文检索。在本例中,使用了match查询实现全文检索,可以通过输入关键字进行检索。可以通过以下代码实现:

$params = [
    'index' => 'student',
    'body'  => [
        'query' => [
            'match' => [
                'name' => '张三'
            ]
         ]
    ]
];

$response = $client->search($params);
登录后复制

其中,'name'字段用于匹配,可以更换为其他需要进行全文检索的字段。搜索结果返回的信息在$response中,可以获取查询结果并进行展示。

四、总结

本篇文章介绍了PHP与Elasticsearch集成实现全文检索功能的详细步骤。通过连接Elasticsearch、建立索引、添加文档和搜索文档等步骤,可以实现快速、准确地检索大量文本数据的功能。在进行全文检索时,建议使用分词器对中文进行切分,以提高搜索的准确性和效率。

以上是PHP和Elasticsearch集成实现全文检索功能详解的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

CakePHP 项目配置 CakePHP 项目配置 Sep 10, 2024 pm 05:25 PM

在本章中,我们将了解CakePHP中的环境变量、常规配置、数据库配置和电子邮件配置。

适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

CakePHP 使用数据库 CakePHP 使用数据库 Sep 10, 2024 pm 05:25 PM

在 CakePHP 中使用数据库非常容易。本章我们将了解CRUD(创建、读取、更新、删除)操作。

CakePHP 日期和时间 CakePHP 日期和时间 Sep 10, 2024 pm 05:27 PM

为了在 cakephp4 中处理日期和时间,我们将使用可用的 FrozenTime 类。

CakePHP 文件上传 CakePHP 文件上传 Sep 10, 2024 pm 05:27 PM

为了进行文件上传,我们将使用表单助手。这是文件上传的示例。

CakePHP 路由 CakePHP 路由 Sep 10, 2024 pm 05:25 PM

在本章中,我们将学习以下与路由相关的主题?

讨论 CakePHP 讨论 CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP 是 PHP 的开源框架。它的目的是使应用程序的开发、部署和维护变得更加容易。 CakePHP 基于类似 MVC 的架构,功能强大且易于掌握。模型、视图和控制器 gu

CakePHP 创建验证器 CakePHP 创建验证器 Sep 10, 2024 pm 05:26 PM

可以通过在控制器中添加以下两行来创建验证器。

See all articles