>백엔드 개발 >PHP 튜토리얼 >PHP 개발: Elasticsearch를 사용하여 전체 텍스트 검색을 구현하는 방법

PHP 개발: Elasticsearch를 사용하여 전체 텍스트 검색을 구현하는 방법

WBOY
WBOY원래의
2023-06-14 17:07:291250검색

최신 웹 애플리케이션에서 데이터 볼륨은 점점 더 커지고 있지만 사용자 기대치와 데이터에 대한 액세스도 마찬가지입니다. 따라서 사용자 기대를 충족하고 더 나은 사용자 경험을 제공하기 위해 검색 기술이 점점 더 중요해지고 있습니다. 전체 텍스트 검색은 대량의 데이터를 빠르게 색인화하고, 검색하고, 정렬할 수 있는 강력한 기술입니다. 이러한 측면에서 Elasticsearch는 고가용성, 손쉬운 확장성 및 기타 장점은 물론 다양한 고급 기능을 제공하는 선도적인 오픈 소스 검색 엔진입니다.

이 기사에서는 Elasticsearch를 사용하여 PHP를 통해 전체 텍스트 검색을 구현하는 방법을 소개합니다. Elasticsearch 및 PHP 설치를 포함한 환경 설정부터 시작하여 인덱싱, 검색, 분석의 세 가지 주요 측면을 심층적으로 소개합니다.

1. 환경 설정

먼저 Elasticsearch를 로컬 또는 서버에 설치하세요. Elasticsearch는 공식 웹사이트나 패키지 관리자를 통해 다운로드하여 설치할 수 있습니다.

둘째, Elasticsearch-php인 Composer를 통해 Elasticsearch의 PHP 클라이언트를 설치하세요. Elasticsearch API를 호출할 수 있는 다양한 편리한 메서드와 클래스를 제공합니다.

composer require elasticsearch/elasticsearch

설치가 완료된 후 PHP 파일에서 다음을 구성합니다.

require 'vendor/autoload.php';

$client = ElasticsearchClientBuilder::create()->build( );

이렇게 해서 Elasticsearch 서버와 통신하는 클라이언트가 생성됩니다.

2. 인덱스

Elasticsearch에서 인덱스는 데이터를 저장하고 빠르게 찾는 데 사용되는 데이터 모음입니다. elasticsearch-php의 API를 사용하여 인덱스에 데이터를 삽입할 수 있습니다.

  1. 색인 만들기

먼저 새 색인을 만들어야 합니다. 다음 코드를 사용하여 "my_index"라는 인덱스에 "my_type"이라는 유형을 만듭니다.

$params = [

'index' => 'my_index',
'body'  => [
    'mappings' => [
        'my_type' => [
            'properties' => [
                'title' => ['type' => 'text'],
                'body'  => ['type' => 'text'],
            ]
        ]
    ]
]

];

$response = $client->indices()->create($params);

"속성" 배열의 "제목" 및 "본문" 필드 유형 "텍스트"입니다. 이는 전체 텍스트 색인이 생성됨을 의미합니다. 실제로는 특정 요구에 따라 인덱스와 필드 유형을 설정합니다.

이렇게 해서 "my_index"라는 인덱스를 성공적으로 생성했습니다.

  1. 색인에 문서 데이터 추가

다음 코드를 사용하여 문서를 색인에 삽입합니다.

$params = [

'index' => 'my_index',
'type'  => 'my_type',
'body'  => [
    'title' => 'PHP Elasticsearch 全文检索',
    'body'  => 'Elasticsearch 是一个领先的全文搜索引擎,其功能包括分布式、高可用、实时搜索和分析能力等。',
]

];

$response = $client->index($params);

여기서 제목과 본문이 포함된 문서를 색인에 삽입합니다.

  1. 문서 업데이트

이미 색인에 있는 문서를 업데이트해야 하는 경우 다음 코드를 사용하세요.

$params = [

'index' => 'my_index',
'type'  => 'my_type',
'id'    => '1',
'body'  => [
    'doc' => [
        'title' => '修改后的标题',
        'body'  => '修改后的正文内容',
    ]
]

];

$response = $client->update( $params);

업데이트 시 문서의 ID를 반드시 제공해야 한다는 점에 유의하세요.

  1. 문서 삭제

기존 문서를 삭제해야 하는 경우 다음 코드를 사용하세요.

$params = [

'index' => 'my_index',
'type'  => 'my_type',
'id'    => '1'

];

$response = $client->delete($params);

이렇게 해서 색인과 문서의 생성, 삽입, 업데이트, 삭제가 완료되었습니다.

3. 검색

elasticsearch-php API를 사용하여 검색하는 방법을 살펴보겠습니다.

  1. 간단한 쿼리

먼저 간단한 쿼리를 실행해 보겠습니다.

$params = [

'index' => 'my_index',
'type'  => 'my_type',
'body'  => [
    'query' => [
        'match' => [
            'title' => 'PHP'
        ]
    ]
]

];

$response = $client->search($params);

위에서 코드에서는 "PHP" 키워드가 포함된 인덱스의 모든 문서에 대해 일치 쿼리를 실행합니다. 검색 결과는 $response 변수에 저장됩니다.

  1. 다중 조건 쿼리

여러 조건을 쿼리해야 하는 경우 부울 쿼리를 사용하여 여러 조건을 결합할 수 있습니다.

$params = [

'index' => 'my_index',
'type'  => 'my_type',
'body'  => [
    'query' => [
        'bool' => [
            'must' => [
                [ 'match' => [ 'title' => 'PHP' ] ],
                [ 'match' => [ 'body'  => '搜索引擎' ] ]
            ]
        ]
    ]
]

];

$response = $client->search ( $params);

여기서 must 매개변수를 통해 동시에 충족해야 하는 두 가지 쿼리 조건을 지정합니다.

  1. 페이징 쿼리

데이터 양이 많은 경우 검색 결과를 페이지로 매길 수 있습니다.

$params = [

'index' => 'my_index',
'type'  => 'my_type',
'body'  => [
    'from' => 0, 'size' => 10,
    'query' => [
        'match' => [
            'title' => 'PHP'
        ]
    ]
]

];

$response = $client->search($params);

from 및 size 매개변수를 통해 결과 집합의 오프셋과 크기를 지정합니다.

  1. 점수로 정렬

더 정확한 검색 결과를 위해 Elasticsearch는 각 문서에 대한 관련성 점수를 계산합니다. 다음 코드를 통해 점수별로 정렬할 수 있습니다.

$params = [

'index' => 'my_index',
'type'  => 'my_type',
'body'  => [
    'query' => [
        'match' => [
            'title' => 'PHP'
        ]
    ],
    'sort'  => [
        '_score' => [ 'order' => 'desc' ]
    ]
]

];

$response = $client->search($params);

이러한 방식으로 쿼리 결과는 다음과 같이 정렬됩니다. 관련성 점수가 높은 것에서 낮은 것 순으로 정렬됩니다.

4. 분석

Elasticsearch는 데이터 세트에 대한 더 깊은 정보를 얻는 데 사용할 수 있는 다양하고 강력한 분석 및 집계 기능을 지원합니다.

  1. Aggregation

다음 코드는 "제목" 필드에서 발생 빈도가 가장 높은 상위 10개 단어를 가져올 수 있습니다.

$params = [

'index' => 'my_index',
'type'  => 'my_type',
'size'  => 0,
'body'  => [
    'aggs' => [
        'top_titles' => [
            'terms' => [
                'field' => 'title.keyword',
                'size'  => 10
            ]
        ]
    ]
]

];

$response = $client-> search($params) ;

문서 반환을 건너뛰고 집계된 결과만 반환하려면 size 매개변수를 통해 지정하세요.

  1. Analyzers

Elasticsearch는 또한 텍스트를 분석하고 처리할 수 있는 많은 강력한 분석기를 제공합니다. 다음 코드는 중국어 분석기를 사용하여 텍스트를 처리하는 방법을 보여줍니다.

$params = [

'index' => 'my_index',
'body'  => [
    'settings' => [
        'analysis' => [
            'analyzer' => [
                'my_analyzer'   => [
                    'type'      => 'custom',
                    'tokenizer' => 'ik_max_word'
                ]
            ]
        ]
    ]
]

];

$response = $client->indices()->putSettings($params);

这里,我们为名为“my_analyzer”的分析器指定了“ik_max_word”分词器。

下面的代码可以使用这个分析器来分析文本:

$params = [

'index' => 'my_index',
'body'  => [
    'query' => [
        'query_string' => [
            'query'         => '搜索',
            'analyzer'      => 'my_analyzer',
            'default_field' => 'title'
        ]
    ]
]

];

$response = $client->search($params);

这样,我们就可以使用中文分析器来分析中文文本了。

总结

在本文中,我向您介绍了如何使用elasticsearch-php的API来创建、添加、更新和删除索引和文档,以及如何使用搜索API来执行简单和复杂的查询。此外,我还介绍了使用聚合和分析器来处理数据的相关技术。

随着数据集规模的增加,Elasticsearch的重要性逐渐增加。只要您熟悉它的API,您就可以通过PHP轻松地利用其强大的搜索和分析能力来优化您的Web应用程序。

위 내용은 PHP 개발: Elasticsearch를 사용하여 전체 텍스트 검색을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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