ホームページ  >  記事  >  バックエンド開発  >  PHP の Elasticsearch に基づくあいまい検索とセマンティック検索の実装

PHP の Elasticsearch に基づくあいまい検索とセマンティック検索の実装

WBOY
WBOYオリジナル
2023-10-03 08:37:55609ブラウズ

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

PHP での Elasticsearch に基づくあいまい検索とセマンティック検索の実装には、特定のコード例が必要です

現代のインターネット環境では、検索機能はさまざまなアプリケーションにとって必須となっています。 . 機器の機能の一つ。従来のあいまい検索では、キーワードに基づく単純な一致しか実行できないことが多く、ユーザーの意図を理解できませんでした。セマンティック検索により、ユーザーの意図をより適切に捉え、より正確な検索結果を提供できます。この記事では、Elasticsearchを使用してPHPであいまい検索とセマンティック検索を実装する方法と、具体的なコード例を紹介します。

Elasticsearch は、Lucene をベースにしたオープンソースの検索エンジンで、豊富な検索機能と効率的な分散検索サポートを提供します。 PHP では、Elasticsearch が提供する公式クライアント ライブラリである Elasticsearch-PHP を使用して、Elasticsearch と対話できます。

まず、Elasticsearch-PHP ライブラリを PHP プロジェクトに導入する必要があります。 Composer を介してインストールできます。必要な作業は、プロジェクトのルート ディレクトリにあるcomposer.json ファイルに依存関係を追加するだけです:

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

その後、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 にあいまい一致の程度を自動的に決定させることを意味します。

もちろん、より複雑な検索関数が必要な場合は、multi_matchbool など、Elasticsearch が提供する他のクエリ タイプを使用することもできます。具体的な利用方法については、Elasticsearchの公式ドキュメントを参照してください。

次に、セマンティック検索機能の実装方法を紹介します。セマンティック検索を実装するには、Elasticsearch-Elasticsearch Elasticsearch-Elasticsearch-DSL というプラグインを使用する必要があります。このプラグインは、PHP を通じて複雑なクエリを構築できる DSL (ドメイン固有言語) を提供します。

まず、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 を通じて構築されます。複数フィールドのクエリを作成し、あいまい一致の程度を設定します。

上記のコード例を通じて、Elasticsearch を使用して、PHP であいまい検索およびセマンティック検索関数を実装できます。もちろん、実際のビジネス シナリオでは、検索機能をさらに最適化および拡張して、より正確かつ効率的な検索結果を実現できます。この記事がお役に立てば幸いです!

以上がPHP の Elasticsearch に基づくあいまい検索とセマンティック検索の実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。