PHP 中基于 Elasticsearch 的模糊搜索与语义搜索实现

php 中基于 elasticsearch 的模糊搜索与语义搜索实现

PHP 中基于 Elasticsearch 的模糊搜索语义搜索实现,需要具体代码示例

在现代互联网环境下,搜索功能已经成为了各种应用的必备功能之一。传统的模糊搜索往往只能按照关键字进行简单的匹配,而缺乏了对用户意图的理解。而语义搜索则可以更好地抓住用户的意图,从而提供更加精确的搜索结果。在本文中,我们将介绍如何在 PHP 中利用 Elasticsearch 实现模糊搜索和语义搜索,并给出具体的代码示例。

Elasticsearch 是一个基于 Lucene 的开源搜索引擎,它提供了丰富的搜索功能和高效的分布式搜索支持。在 PHP 中,我们可以使用 Elasticsearch 提供的官方客户端库——Elasticsearch-PHP 来与 Elasticsearch 进行交互。

首先,我们需要在 PHP 项目中引入 Elasticsearch-PHP 的库。可以通过 Composer 进行安装,只需要在项目根目录的 composer.json 文件中添加以下依赖:

立即学习“PHP免费学习笔记(深入)”;

{  "require": {    "elasticsearch/elasticsearch": "^7.0"  }}

登录后复制

然后执行 composer install 命令进行安装。

接下来,我们需要与 Elasticsearch 建立连接。在 PHP 中,可以通过以下代码来实现:

setHosts(['localhost:9200']) // 修改为 Elasticsearch 的地址和端口            ->build();?>

登录后复制

以上代码中的 localhost:9200 是 Elasticsearch 服务的地址和端口,默认情况下 Elasticsearch 监听地址为 localhost,端口为 9200。如果 Elasticsearch 运行在其他机器上或者端口不同,需要修改为相应的值。

现在,我们可以开始实现模糊搜索的功能了。以下是一个简单的例子:

setHosts(['localhost:9200'])            ->build();$params = [    'index' => 'my_index',    'body'  => [        'query' => [            'match' => [                'title' => [                    'query' => '搜索关键字',                    'fuzziness' => 'AUTO',                ],            ],        ],    ],];$response = $client->search($params);foreach ($response['hits']['hits'] as $hit) {    echo $hit['_source']['title'] . "";}?>

登录后复制

以上代码中的 my_index 是 Elasticsearch 中的一个索引,title 是一个字段名。我们通过 match 查询来进行模糊搜索,利用 fuzziness 参数来设置模糊匹配的程度。AUTO 表示让 Elasticsearch 自动判断模糊匹配程度。

当然,如果需要更加复杂的搜索功能,还可以使用 Elasticsearch 提供的其他查询类型,比如 multi_match、bool 等。具体的使用方法可以参考 Elasticsearch 的官方文档。

接下来,我们将介绍如何实现语义搜索的功能。为了实现语义搜索,我们需要借助一个叫做 Elasticsearch 的插件——Elasticsearch Elasticsearch-Elasticsearch-DSL。该插件提供了可以通过 PHP 构建复杂查询的 DSL(Domain Specific Language)。

首先,我们需要修改 composer.json 文件,添加以下依赖:

{  "require": {    "elasticsearch/elasticsearch": "^7.0",    "elastic/elasticsearch-dsl": "^8.0"  }}

登录后复制

然后执行 composer install 命令进行安装。

接下来,我们可以使用 Elasticsearch-Elasticsearch-DSL 来构建语义查询。以下是一个简单的例子:

setHosts(['localhost:9200'])            ->build();$search = new Search();$search->addQuery(    (new ElasticsearchElasticsearchDSLQueryMultiMatchQuery('搜索关键词', ['title', 'content']))        ->setFuzziness('AUTO'));$params = [    'index' => 'my_index',    'body'  => $search->toArray(),];$response = $client->search($params);foreach ($response['hits']['hits'] as $hit) {    echo $hit['_source']['title'] . "";}?>

登录后复制

以上代码中的 title 和 content 是 Elasticsearch 中的字段名,我们通过 MultiMatchQuery 构建了一个多字段查询,并设置了模糊匹配的程度。

通过以上的代码示例,我们可以在 PHP 中利用 Elasticsearch 实现模糊搜索和语义搜索的功能。当然,实际的业务场景中,还可以进一步优化和扩展搜索功能,实现更加精确和高效的搜索结果。希望本文能对您有所帮助!

以上就是PHP 中基于 Elasticsearch 的模糊搜索与语义搜索实现的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1661541.html

(0)
上一篇 2025年2月19日 07:05:28
下一篇 2025年2月19日 07:05:44

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论