>  기사  >  백엔드 개발  >  PHP에서 Elasticsearch 기술을 어떻게 사용하나요?

PHP에서 Elasticsearch 기술을 어떻게 사용하나요?

WBOY
WBOY원래의
2023-05-13 08:04:501797검색

웹 애플리케이션이 등장하면서 검색 엔진은 최신 애플리케이션의 필수 기능이 되었습니다. 과거에는 SQL 쿼리를 사용하여 데이터를 검색했지만 SQL은 검색용으로 특별히 설계되지 않았습니다. 이러한 단점을 보완하기 위해 Apache Solr, Elasticsearch 등과 같은 전체 텍스트 검색 엔진이 만들어졌습니다.

Elasticsearch는 실시간 데이터 분석 및 검색 엔진에 즉시 사용 가능한 분산 검색 및 분석 기능을 제공하는 인기 있는 Lucene 기반 전체 텍스트 검색 엔진입니다. 기존 관계형 데이터베이스에 비해 Elasticsearch는 쿼리를 더 빠르게 수행할 수 있고, 매우 동적인 데이터 구조를 더 잘 처리할 수 있으며, 더 풍부한 쿼리 언어를 지원합니다.

이 글에서는 PHP 애플리케이션에서 Elasticsearch를 사용하는 방법을 소개하겠습니다.

환경 준비

먼저 로컬 환경이나 원격 서버에 Elasticsearch를 설치해야 합니다. Elasticsearch는 Windows, macOS, Linux를 포함한 모든 일반적인 운영 체제를 지원합니다. 공식 웹사이트에서 다양한 버전의 설치 프로그램을 다운로드하거나 패키지 관리자를 사용하여 설치할 수 있습니다.

PHP의 elasticsearch 클라이언트 라이브러리를 사용하려면 PHP의 elasticsearch 클라이언트 확장도 설치해야 합니다. PECL을 통해 또는 수동으로 다운로드하고 컴파일하고 설치할 수 있습니다. PECL 사용 예는 다음과 같습니다.

pecl install elasticsearch

그런 다음 php.ini에 다음 줄을 추가합니다.

extension=elasticsearch.so

설치가 완료되면 PHP를 사용하여 Elasticsearch를 실행할 수 있습니다.

PHP에서 Elasticsearch 사용

PHP에서 Elasticsearch를 사용하려면 Elasticsearch 클라이언트 클래스 또는 라이브러리를 사용해야 합니다. 현재 Elasticsearch-PHP, Elasticsearch-DSL, Elastica 등 다양한 PHP Elasticsearch 클라이언트 라이브러리를 사용할 수 있습니다.

이 기사에서는 Elasticsearch-PHP 라이브러리를 사용하여 Elasticsearch 사용법을 보여 드리겠습니다.

먼저 Elasticsearch 클라이언트 개체를 생성해야 합니다.

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

이제 이 클라이언트 개체를 사용하여 Elasticsearch와 연결을 설정하고 다양한 작업을 수행할 수 있습니다.

문서 색인 및 검색

Elasticsearch에서 문서는 JSON 형식의 데이터를 참조합니다. PHP Elasticsearch 클라이언트 라이브러리를 사용하면 PHP 배열을 JSON 형식으로 쉽게 변환하고 이를 Elasticsearch로 인덱싱할 수 있습니다. 먼저 인덱스(관계형 데이터베이스의 테이블과 유사)를 선택한 다음 해당 인덱스에 데이터를 추가해야 합니다.

$params = [
    'index' => 'my_index',
    'type' => 'my_type',
    'id' => '1',
    'body' => ['title' => 'My first document', 'content' => 'Hello World']
];
$response = $client->index($params);

위 코드에서는 index 메서드를 사용하여 문서를 색인화했습니다. index 메소드에는 최소한 다음 키를 포함하는 매개변수 배열이 필요합니다: index 方法来索引文档。index 方法需要一个参数数组,它至少包含以下键:

  • index:索引的名称
  • type:文档的类型
  • id:文档的唯一标识符
  • body:包含文档数据的数组或JSON格式字符串

上述代码示例创建了一个名为 my_index 的索引,类型为my_type,文档唯一标识符为1,并包含一个 titlecontent字段。一旦文档被索引并储存到Elasticsearch中,我们就可以搜索它们了。

$params = [
    'index' => 'my_index',
    'type' => 'my_type',
    'body' => [
        'query' => [
            'match' => [
                'title' => 'My first document'
            ]
        ]
    ]
];
$response = $client->search($params);

在上面的代码中,我们使用 search 方法搜索文档。search 方法需要一个参数数组,它至少包含以下键:

  • index:要搜索的索引的名称
  • type:要搜索的文档类型
  • body:包含实际搜索查询的数组

上述代码示例搜索了 my_index 索引中,类型为 my_typetitle 包含 My first document 的文档。搜索结果是一个JSON格式的响应,其中包含匹配查询的文档。

分页和排序

当搜索结果集很大时,我们可能希望对结果进行分页或排序。我们可以使用Elasticsearch提供的参数来实现这两个功能。

$params = [
    'index' => 'my_index',
    'type' => 'my_type',
    'body' => [
        'query' => [
            'match' => [
                'title' => 'document'
            ]
        ]
    ],
    'size' => 10,
    'from' => 0,
    'sort' => ['title' => ['order' => 'asc']]
];
$response = $client->search($params);

在上面的代码中,我们添加了以下额外的参数:

  • size:每页文档的数量
  • from:起始文档的位置,用于分页
  • sort:按 title 字段进行升序排序

以上示例获取了前10个匹配 document 的文档,并按 title 字段升序排序。

聚合搜索

Elasticsearch还支持聚合搜索,这是一种在搜索结果集上执行各种分析的技术。例如,我们可以从搜索结果中提取所有 author 字段的唯一值。

$params = [
    'index' => 'my_index',
    'type' => 'my_type',
    'body' => [
        'aggs' => [
            'unique_authors' => [
                'terms' => [
                    'field' => 'author.keyword',
                    'size' => 10
                ]
            ]
        ]
    ]
];
$response = $client->search($params);

在上面的代码中,我们使用 aggs 作为参数数组中的新键,并在其中定义了一个名称为 unique_authors 的聚合搜索。 terms 表示我们将按照 author 字段的值进行分组聚合。field 键用于指定要聚合的字段,size

  • index: 인덱스 이름
  • type : 문서 유형
  • id: 문서의 고유 식별자
  • body: 문서 데이터를 포함하는 배열 또는 JSON 형식 문자열
위의 코드 예에서는 my_index라는 인덱스를 생성하고 유형은 my_type이며 문서 고유 식별자 은 1 이고 titlecontent 필드를 포함합니다. 문서가 색인화되어 Elasticsearch에 저장되면 검색할 수 있습니다.

rrreee

위 코드에서는 search 메소드를 사용하여 문서를 검색합니다. search 메소드에는 최소한 다음 키를 포함하는 매개변수 배열이 필요합니다: 🎜
  • index: 검색할 인덱스의 이름
  • type: 검색할 문서 유형
  • body: 실제 검색어가 포함된 배열
🎜위 내용 코드 예제는 my_type 유형의 문서와 해당 제목에 코드>my_index 인덱스의 내 첫 번째 문서가 포함되어 있는 문서를 검색합니다. 검색 결과는 쿼리와 일치하는 문서가 포함된 JSON 형식의 응답입니다. 🎜🎜페이징 및 정렬🎜🎜검색 결과 집합이 크면 결과를 페이지로 매기거나 정렬해야 할 수 있습니다. Elasticsearch에서 제공하는 매개변수를 사용하여 이 두 가지 기능을 달성할 수 있습니다. 🎜rrreee🎜위 코드에서는 다음과 같은 추가 매개변수를 추가했습니다: 🎜
  • size: 페이지당 문서 수
  • from/ code>: 페이징에 사용되는 시작 문서의 위치
  • sort: title 필드를 기준으로 오름차순으로 정렬
  • ul> 🎜위의 예에서는 document와 일치하는 처음 10개의 문서를 가져와 title 필드를 기준으로 오름차순으로 정렬합니다. 🎜🎜집계 검색🎜🎜Elasticsearch는 검색 결과 세트에 대해 다양한 분석을 수행하는 기술인 집계 검색도 지원합니다. 예를 들어 검색 결과에서 author 필드에 대한 모든 고유 값을 추출할 수 있습니다. 🎜rrreee🎜위 코드에서는 매개변수 배열의 새 키로 aggs를 사용하고 그 안에 unique_authors라는 이름의 집계 검색을 정의합니다. termsauthor 필드 값을 기준으로 그룹화하고 집계한다는 의미입니다. 필드 키는 집계할 필드를 지정하는 데 사용되며, 크기 키는 집계 그룹의 크기 제한을 지정합니다. 🎜🎜결론🎜

    Elasticsearch는 많은 최신 웹 애플리케이션에서 없어서는 안될 부분이 된 강력한 전체 텍스트 검색 엔진으로, 데이터를 더 잘 처리하고 실시간 검색을 수행하는 데 도움이 됩니다. 이 문서에서는 PHP에서 Elasticsearch를 사용하는 방법과 문서를 색인화, 검색, 페이지 매김 및 정렬하는 방법을 설명합니다. 또한, 집계 검색에 Elasticsearch를 사용하는 방법도 소개합니다. 이제 Elasticsearch를 사용하여 PHP 애플리케이션에서 효율적이고 빠른 검색을 구현하는 방법을 배웠습니다.

위 내용은 PHP에서 Elasticsearch 기술을 어떻게 사용하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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