>백엔드 개발 >PHP 튜토리얼 >전체 텍스트 검색 기능을 구현하기 위한 PHP와 Elasticsearch의 통합에 대한 자세한 설명

전체 텍스트 검색 기능을 구현하기 위한 PHP와 Elasticsearch의 통합에 대한 자세한 설명

王林
王林원래의
2023-06-25 10:14:071027검색

인터넷의 발달로 기업은 점점 더 많은 양의 텍스트 데이터에 직면해 있습니다. 관련 콘텐츠를 어떻게 빠르고 정확하게 검색하는가는 정보분야 기업의 중요한 이슈 중 하나가 되었습니다. Lucene을 기반으로 하는 오픈 소스 검색 엔진인 Elasticsearch는 고가용성, 높은 확장성 및 빠른 검색이라는 특징을 갖고 있어 기업 전체 텍스트 검색에 선호되는 솔루션 중 하나입니다. 널리 사용되는 서버측 프로그래밍 언어인 PHP는 웹 개발 및 API 개발도 빠르게 수행할 수 있으며 Elasticsearch와 통합되어 일반적으로 사용되는 언어 중 하나가 되었습니다.

이 글에서는 주로 PHP와 Elasticsearch를 통합하여 전체 텍스트 검색 기능을 구현하는 세부 단계를 설명합니다.

1. Elasticsearch 소개

Elasticsearch는 대량의 텍스트 데이터를 빠르고 정확하게 검색하는 데 사용할 수 있는 Lucene 기반의 오픈 소스 검색 엔진입니다. Elasticsearch는 분산 스토리지 아키텍처를 채택하고 수평적 확장을 지원하며 대용량 데이터 스토리지와 빠른 검색 요구 사항에 적응할 수 있습니다.

Elasticsearch는 RESTful API 인터페이스를 제공하고 JSON 형식의 데이터 상호 작용을 지원하며 일반적으로 사용되는 프로그래밍 언어와 통합될 수 있습니다. Elasticsearch에서는 데이터가 문서에 따라 저장됩니다. 각 문서에는 여러 필드가 포함되어 있으며 각 필드는 다른 필드를 포함하도록 중첩될 수 있으므로 데이터 구조가 더욱 유연해집니다. 동시에 Elasticsearch는 문서에 대한 전체 텍스트 검색, 정확한 일치, 집계, 분석 및 기타 작업을 지원합니다.

2. PHP와 Elasticsearch 통합

  1. Elasticsearch-PHP 라이브러리 설치

Elasticsearch-PHP는 Elasticsearch의 RESTful API 인터페이스를 캡슐화하고 PHP 애플리케이션에서 Elasticsearch를 쉽게 운영할 수 있는 공식 PHP 클라이언트 라이브러리입니다. Composer를 통해 라이브러리를 설치하고 다음 명령을 실행할 수 있습니다.

composer require elasticsearch/elasticsearch
  1. Connect to Elasticsearch

Elasticsearch에 연결하기 전에 Elasticsearch 서비스를 시작해야 합니다. Elasticsearch-PHP 라이브러리를 사용하여 PHP에서 Elasticsearch에 연결하려면 먼저 ElasticsearchClient 개체를 인스턴스화하고 연결된 Elasticsearch 서버 IP 및 포트를 설정해야 합니다.

require 'vendor/autoload.php';

$client = ElasticsearchClientBuilder::create()->setHosts(['http://127.0.0.1:9200'])->build();

그 중 setHosts() 메서드는 배열 매개 변수를 전달합니다. 각 요소는 Elasticsearch 서버를 나타내며, 고가용성과 로드 밸런싱을 달성하기 위해 여러 서버를 설정할 수 있습니다.

  1. 인덱스 만들기

Elasticsearch에서 인덱스는 데이터베이스의 테이블과 유사하게 유사한 데이터를 저장하고 검색하는 데 사용되는 데이터 구조입니다. 다음 코드를 통해 "my_index"라는 인덱스를 생성할 수 있습니다:

$params = [
    'index' => 'my_index',
    'body' => [
        'settings' => [
            'number_of_shards' => 5, // 分片数
            'number_of_replicas' => 1, // 副本数
        ],
    ],
];

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

그 중 $params 배열 파라미터에서 'settings'는 샤드 수, 레플리카 수 등의 정보를 포함한 인덱스의 설정을 나타냅니다. . 'body'는 인덱스의 매핑을 나타냅니다. 이 매개변수에는 인덱스의 필드와 유형을 설정할 수 있습니다.

  1. 문서 추가

Elasticsearch에서 문서 추가는 다음 코드를 통해 수행할 수 있습니다.

$params = [
    'index' => 'my_index',
    'id' => '1',
    'body' => [
        'title' => 'Elasticsearch PHP集成',
        'content' => 'Elasticsearch是一款基于Lucene的开源搜索引擎...'
    ]
];

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

그 중 $params 배열 매개변수에서 'index'는 추가할 문서의 인덱스 이름을 나타냅니다. id'는 문서의 고유 식별자를 나타내고, 선택적 매개변수인 'body'는 문서의 내용을 나타내며 여러 필드와 값을 설정할 수 있습니다.

  1. 문서 검색

Elasticsearch에서 문서 검색은 다음 코드를 통해 가능합니다.

$params = [
    'index' => 'my_index',
    'body'  => [
        'query' => [
            'match' => [
                'title' => 'Elasticsearch PHP'
            ]
         ]
    ]
];

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

그 중 $params 배열 매개변수에서 'index'는 검색할 문서의 인덱스 이름을 나타냅니다. body'는 쿼리 조건을 나타내며, 여러 개의 쿼리 조건과 정렬 규칙을 설정할 수 있습니다.

3. 전체 텍스트 검색을 구현하기 위한 PHP+Elasticsearch

  1. 인덱스 생성

Elasticsearch를 사용하여 전체 텍스트 검색을 구현하기 전에 검색할 데이터를 먼저 인덱싱해야 합니다. 인덱스를 구축할 때 검색할 필드를 텍스트 유형으로 설정하여 전체 텍스트 인덱싱을 수행할 수 있습니다.

이 예에서는 검색할 데이터가 ID, 이름, 연령 및 점수 필드가 포함된 학생 테이블이라고 가정합니다. 다음 코드를 통해 "student"라는 인덱스를 생성할 수 있습니다.

$params = [
    'index' => 'student',
    'body' => [
        'settings' => [
            'number_of_shards' => 5,
            'number_of_replicas' => 1,
        ],
        'mappings' => [
            'properties' => [
                'id' => ['type' => 'integer'],
                'name' => ['type' => 'text', 'analyzer' => 'ik_max_word'],
                'age' => ['type' => 'integer'],
                'score' => ['type' => 'double']
            ]
        ]
    ]
];

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

그 중 'name' 필드의 유형은 텍스트로 설정되고, 단어 분할기는 중국어 단어 분할 플러그인 ik_max_word가 사용됩니다. 여기에서는 단어 분할로 처리된 최대값에 따라 중국어 텍스트를 변환합니다.

  1. 문서 추가

인덱싱 후 문서를 인덱스에 추가할 수 있습니다. 학생 정보를 추가하고 싶다면 다음 코드를 통해 이를 수행할 수 있습니다.

$params = [
    'index' => 'student',
    'body' => [
        'id' => 1,
        'name' => '张三',
        'age' => 18,
        'score' => 90.5
    ]
];

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

루프에 문서를 추가하여 색인에 여러 문서를 추가할 수 있습니다.

  1. 문서 검색

문서를 인덱싱하고 추가한 후 전체 텍스트 검색이 가능합니다. 이 예에서는 일치 쿼리를 사용하여 키워드를 입력하여 검색할 수 있는 전체 텍스트 검색을 수행합니다. 이는 다음 코드를 통해 달성할 수 있습니다:

$params = [
    'index' => 'student',
    'body'  => [
        'query' => [
            'match' => [
                'name' => '张三'
            ]
         ]
    ]
];

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

그 중 'name' 필드는 일치에 사용되며 전체 텍스트 검색이 필요한 다른 필드로 대체될 수 있습니다. 검색 결과에 의해 반환되는 정보는 $response에 있으며, 쿼리 결과를 얻어서 표시할 수 있습니다.

4. 요약

이 글에서는 전체 텍스트 검색 기능을 구현하기 위해 PHP와 Elasticsearch를 통합하는 세부 단계를 소개합니다. Elasticsearch 접속, 인덱스 구축, 문서 추가, 문서 검색 등의 단계를 통해 대용량의 텍스트 데이터를 빠르고 정확하게 검색할 수 있습니다. 전체 텍스트 검색을 수행할 때 검색 정확도와 효율성을 높이기 위해 단어 분할기를 사용하여 중국어를 분할하는 것이 좋습니다.

위 내용은 전체 텍스트 검색 기능을 구현하기 위한 PHP와 Elasticsearch의 통합에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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