>  기사  >  백엔드 개발  >  PHP의 Elasticsearch를 기반으로 퍼지 검색 및 의미 검색 구현

PHP의 Elasticsearch를 기반으로 퍼지 검색 및 의미 검색 구현

WBOY
WBOY원래의
2023-10-03 08:37:55615검색

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

Elasticsearch를 기반으로 PHP에서 퍼지 검색과 의미 검색을 구현하려면 특정 코드 예제가 필요합니다.

현대 인터넷 환경에서 검색 기능은 다양한 애플리케이션에 꼭 필요한 기능 중 하나가 되었습니다. 기존의 퍼지 검색은 키워드 기반 단순 매칭만 수행할 수 있을 뿐 사용자 의도에 대한 이해가 부족한 경우가 많습니다. 의미론적 검색은 사용자의 의도를 더 잘 포착하고 보다 정확한 검색 결과를 제공할 수 있습니다. 이 기사에서는 Elasticsearch를 사용하여 PHP에서 퍼지 검색과 의미 검색을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다.

Elasticsearch는 Lucene 기반의 오픈소스 검색 엔진으로, 풍부한 검색 기능과 효율적인 분산 검색 지원을 제공합니다. PHP에서는 Elasticsearch에서 제공하는 공식 클라이언트 라이브러리인 Elasticsearch-PHP를 사용하여 Elasticsearch와 상호 작용할 수 있습니다.

먼저 PHP 프로젝트에 Elasticsearch-PHP 라이브러리를 도입해야 합니다. Composer를 통해 설치할 수 있습니다. 프로젝트 루트 디렉터리의 작곡가.json 파일에 다음 종속성을 추가하기만 하면 됩니다.

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

그런 다음 composer install 명령을 실행하여 설치합니다. 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

다음으로 Elasticsearch와의 연결을 설정해야 합니다. PHP에서는 다음 코드를 통해 이를 수행할 수 있습니다. 위 코드의

rrreee

localhost:9200은 Elasticsearch 서비스의 주소 및 포트입니다. 기본적으로 Elasticsearch 수신 주소는 localhost이고 포트는 9200입니다. Elasticsearch가 다른 머신에서 실행 중이거나 포트가 다른 경우 해당 값으로 수정해야 합니다. 🎜🎜이제 퍼지 검색 기능 구현을 시작할 수 있습니다. 다음은 간단한 예입니다. 위 코드의 🎜rrreee🎜 my_index는 Elasticsearch의 인덱스이고 title은 필드 이름입니다. match 쿼리를 통해 퍼지 검색을 수행하고 fuzziness 매개변수를 사용하여 퍼지 일치 정도를 설정합니다. AUTO는 Elasticsearch가 퍼지 일치 정도를 자동으로 결정하도록 하는 것을 의미합니다. 🎜🎜물론, 더 복잡한 검색 기능이 필요한 경우 multi_match, bool 등과 같이 Elasticsearch에서 제공하는 다른 쿼리 유형을 사용할 수도 있습니다. 구체적인 사용방법은 Elasticsearch 공식 문서를 참고하시기 바랍니다. 🎜🎜다음으로 의미 검색 기능을 구현하는 방법을 소개하겠습니다. 의미 검색을 구현하려면 Elasticsearch-Elasticsearch Elasticsearch-Elasticsearch-DSL이라는 플러그인을 사용해야 합니다. 이 플러그인은 PHP를 통해 복잡한 쿼리를 작성할 수 있는 DSL(도메인 특정 언어)을 제공합니다. 🎜🎜먼저, 작곡가.json 파일을 수정하고 다음 종속성을 추가해야 합니다. 🎜rrreee🎜 그런 다음 composer install 명령을 실행하여 설치합니다. 🎜🎜다음으로 Elasticsearch-Elasticsearch-DSL을 사용하여 의미 체계 쿼리를 작성할 수 있습니다. 다음은 간단한 예입니다. 위 코드의 🎜rrreee🎜titlecontentMultiMatchQuery를 통해 구축한 Elasticsearch의 필드 이름입니다. 퍼지 일치 정도가 설정된 다중 필드 쿼리입니다. 🎜🎜위의 코드 예제를 통해 Elasticsearch를 사용하여 PHP에서 퍼지 검색 및 의미 검색 기능을 구현할 수 있습니다. 물론 실제 비즈니스 시나리오에서는 검색 기능을 더욱 최적화하고 확장하여 보다 정확하고 효율적인 검색 결과를 얻을 수 있습니다. 이 기사가 도움이 되기를 바랍니다! 🎜

위 내용은 PHP의 Elasticsearch를 기반으로 퍼지 검색 및 의미 검색 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.