최신 웹 애플리케이션에서 데이터 볼륨은 점점 더 커지고 있지만 사용자 기대치와 데이터에 대한 액세스도 마찬가지입니다. 따라서 사용자 기대를 충족하고 더 나은 사용자 경험을 제공하기 위해 검색 기술이 점점 더 중요해지고 있습니다. 전체 텍스트 검색은 대량의 데이터를 빠르게 색인화하고, 검색하고, 정렬할 수 있는 강력한 기술입니다. 이러한 측면에서 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를 사용하여 인덱스에 데이터를 삽입할 수 있습니다.
먼저 새 색인을 만들어야 합니다. 다음 코드를 사용하여 "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"라는 인덱스를 성공적으로 생성했습니다.
다음 코드를 사용하여 문서를 색인에 삽입합니다.
$params = [
'index' => 'my_index', 'type' => 'my_type', 'body' => [ 'title' => 'PHP Elasticsearch 全文检索', 'body' => 'Elasticsearch 是一个领先的全文搜索引擎,其功能包括分布式、高可用、实时搜索和分析能力等。', ]
];
$response = $client->index($params);
여기서 제목과 본문이 포함된 문서를 색인에 삽입합니다.
이미 색인에 있는 문서를 업데이트해야 하는 경우 다음 코드를 사용하세요.
$params = [
'index' => 'my_index', 'type' => 'my_type', 'id' => '1', 'body' => [ 'doc' => [ 'title' => '修改后的标题', 'body' => '修改后的正文内容', ] ]
];
$response = $client->update( $params);
업데이트 시 문서의 ID를 반드시 제공해야 한다는 점에 유의하세요.
기존 문서를 삭제해야 하는 경우 다음 코드를 사용하세요.
$params = [
'index' => 'my_index', 'type' => 'my_type', 'id' => '1'
];
$response = $client->delete($params);
이렇게 해서 색인과 문서의 생성, 삽입, 업데이트, 삭제가 완료되었습니다.
3. 검색
elasticsearch-php API를 사용하여 검색하는 방법을 살펴보겠습니다.
먼저 간단한 쿼리를 실행해 보겠습니다.
$params = [
'index' => 'my_index', 'type' => 'my_type', 'body' => [ 'query' => [ 'match' => [ 'title' => 'PHP' ] ] ]
];
$response = $client->search($params);
위에서 코드에서는 "PHP" 키워드가 포함된 인덱스의 모든 문서에 대해 일치 쿼리를 실행합니다. 검색 결과는 $response 변수에 저장됩니다.
여러 조건을 쿼리해야 하는 경우 부울 쿼리를 사용하여 여러 조건을 결합할 수 있습니다.
$params = [
'index' => 'my_index', 'type' => 'my_type', 'body' => [ 'query' => [ 'bool' => [ 'must' => [ [ 'match' => [ 'title' => 'PHP' ] ], [ 'match' => [ 'body' => '搜索引擎' ] ] ] ] ] ]
];
$response = $client->search ( $params);
여기서 must 매개변수를 통해 동시에 충족해야 하는 두 가지 쿼리 조건을 지정합니다.
데이터 양이 많은 경우 검색 결과를 페이지로 매길 수 있습니다.
$params = [
'index' => 'my_index', 'type' => 'my_type', 'body' => [ 'from' => 0, 'size' => 10, 'query' => [ 'match' => [ 'title' => 'PHP' ] ] ]
];
$response = $client->search($params);
from 및 size 매개변수를 통해 결과 집합의 오프셋과 크기를 지정합니다.
더 정확한 검색 결과를 위해 Elasticsearch는 각 문서에 대한 관련성 점수를 계산합니다. 다음 코드를 통해 점수별로 정렬할 수 있습니다.
$params = [
'index' => 'my_index', 'type' => 'my_type', 'body' => [ 'query' => [ 'match' => [ 'title' => 'PHP' ] ], 'sort' => [ '_score' => [ 'order' => 'desc' ] ] ]
];
$response = $client->search($params);
이러한 방식으로 쿼리 결과는 다음과 같이 정렬됩니다. 관련성 점수가 높은 것에서 낮은 것 순으로 정렬됩니다.
4. 분석
Elasticsearch는 데이터 세트에 대한 더 깊은 정보를 얻는 데 사용할 수 있는 다양하고 강력한 분석 및 집계 기능을 지원합니다.
다음 코드는 "제목" 필드에서 발생 빈도가 가장 높은 상위 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 매개변수를 통해 지정하세요.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!