Maison  >  Article  >  développement back-end  >  Implémentation de la recherche floue et de la recherche sémantique basée sur Elasticsearch en PHP

Implémentation de la recherche floue et de la recherche sémantique basée sur Elasticsearch en PHP

WBOY
WBOYoriginal
2023-10-03 08:37:55609parcourir

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

La mise en œuvre de la recherche floue et de la recherche sémantique basée sur Elasticsearch en PHP nécessite des exemples de code spécifiques

Dans l'environnement Internet moderne, la fonction de recherche est devenue l'une des fonctions nécessaires pour diverses applications. La recherche floue traditionnelle ne peut souvent effectuer qu'une simple correspondance basée sur des mots-clés, mais manque de compréhension des intentions des utilisateurs. La recherche sémantique peut mieux capturer l'intention de l'utilisateur et fournir des résultats de recherche plus précis. Dans cet article, nous présenterons comment utiliser Elasticsearch pour implémenter la recherche floue et la recherche sémantique en PHP, et donnerons des exemples de code spécifiques.

Elasticsearch est un moteur de recherche open source basé sur Lucene, qui fournit des fonctions de recherche riches et un support de recherche distribué efficace. En PHP, nous pouvons utiliser la bibliothèque client officielle fournie par Elasticsearch - Elasticsearch-PHP pour interagir avec Elasticsearch.

Tout d'abord, nous devons introduire la bibliothèque Elasticsearch-PHP dans le projet PHP. Il peut être installé via Composer. Il vous suffit d'ajouter les dépendances suivantes au fichier composer.json dans le répertoire racine du projet :

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

Exécutez ensuite la commande composer install pour l'installer. composer install 命令进行安装。

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

<?php
require 'vendor/autoload.php';

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

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

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

<?php
require 'vendor/autoload.php';

$client = ElasticsearchClientBuilder::create()
            ->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_matchbool 等。具体的使用方法可以参考 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 来构建语义查询。以下是一个简单的例子:

<?php
require 'vendor/autoload.php';

use ElasticsearchClientBuilder;
use ElasticsearchDSLSearch;

$client = ClientBuilder::create()
            ->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'] . "
";
}
?>

以上代码中的 titlecontent 是 Elasticsearch 中的字段名,我们通过 MultiMatchQuery

Ensuite, nous devons établir une connexion avec Elasticsearch. En PHP, cela peut être réalisé via le code suivant :

rrreee

localhost:9200 dans le code ci-dessus est l'adresse et le port du service Elasticsearch. Par défaut, l'adresse d'écoute Elasticsearch est localhost et le. le port est 9200. Si Elasticsearch s'exécute sur une autre machine ou si le port est différent, il doit être modifié avec la valeur correspondante. 🎜🎜Maintenant, nous pouvons commencer à implémenter la fonction de recherche floue. Voici un exemple simple : 🎜rrreee🎜 my_index dans le code ci-dessus est un index dans Elasticsearch et title est un nom de champ. Nous effectuons une recherche floue via la requête match et utilisons le paramètre fuzziness pour définir le degré de correspondance floue. AUTO signifie laisser Elasticsearch déterminer automatiquement le degré de correspondance floue. 🎜🎜Bien sûr, si vous avez besoin de fonctions de recherche plus complexes, vous pouvez également utiliser d'autres types de requêtes fournis par Elasticsearch, tels que multi_match, bool, etc. Pour les méthodes d'utilisation spécifiques, veuillez vous référer à la documentation officielle d'Elasticsearch. 🎜🎜Ensuite, nous présenterons comment implémenter la fonction de recherche sémantique. Afin d'implémenter la recherche sémantique, nous devons utiliser un plug-in appelé Elasticsearch-Elasticsearch Elasticsearch-Elasticsearch-DSL. Ce plug-in fournit un DSL (Domain Specific Language) qui permet de créer des requêtes complexes via PHP. 🎜🎜Tout d'abord, nous devons modifier le fichier composer.json et ajouter les dépendances suivantes : 🎜rrreee🎜 Ensuite, exécutez la commande composer install pour l'installer. 🎜🎜Ensuite, nous pouvons utiliser Elasticsearch-Elasticsearch-DSL pour créer des requêtes sémantiques. Voici un exemple simple : 🎜rrreee🎜Le title et le content dans le code ci-dessus sont les noms de champs dans Elasticsearch, que nous avons construits via MultiMatchQuery Une requête multi-champs avec le degré de correspondance floue défini. 🎜🎜Grâce aux exemples de code ci-dessus, nous pouvons utiliser Elasticsearch pour implémenter des fonctions de recherche floue et de recherche sémantique en PHP. Bien entendu, dans des scénarios commerciaux réels, la fonction de recherche peut être encore optimisée et étendue pour obtenir des résultats de recherche plus précis et plus efficaces. J'espère que cet article vous aidera ! 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn