인터넷의 발달로 기업은 점점 더 많은 양의 텍스트 데이터에 직면해 있습니다. 관련 콘텐츠를 어떻게 빠르고 정확하게 검색하는가는 정보분야 기업의 중요한 이슈 중 하나가 되었습니다. Lucene을 기반으로 하는 오픈 소스 검색 엔진인 Elasticsearch는 고가용성, 높은 확장성 및 빠른 검색이라는 특징을 갖고 있어 기업 전체 텍스트 검색에 선호되는 솔루션 중 하나입니다. 널리 사용되는 서버측 프로그래밍 언어인 PHP는 웹 개발 및 API 개발도 빠르게 수행할 수 있으며 Elasticsearch와 통합되어 일반적으로 사용되는 언어 중 하나가 되었습니다.
이 글에서는 주로 PHP와 Elasticsearch를 통합하여 전체 텍스트 검색 기능을 구현하는 세부 단계를 설명합니다.
1. Elasticsearch 소개
Elasticsearch는 대량의 텍스트 데이터를 빠르고 정확하게 검색하는 데 사용할 수 있는 Lucene 기반의 오픈 소스 검색 엔진입니다. Elasticsearch는 분산 스토리지 아키텍처를 채택하고 수평적 확장을 지원하며 대용량 데이터 스토리지와 빠른 검색 요구 사항에 적응할 수 있습니다.
Elasticsearch는 RESTful API 인터페이스를 제공하고 JSON 형식의 데이터 상호 작용을 지원하며 일반적으로 사용되는 프로그래밍 언어와 통합될 수 있습니다. Elasticsearch에서는 데이터가 문서에 따라 저장됩니다. 각 문서에는 여러 필드가 포함되어 있으며 각 필드는 다른 필드를 포함하도록 중첩될 수 있으므로 데이터 구조가 더욱 유연해집니다. 동시에 Elasticsearch는 문서에 대한 전체 텍스트 검색, 정확한 일치, 집계, 분석 및 기타 작업을 지원합니다.
2. PHP와 Elasticsearch 통합
Elasticsearch-PHP는 Elasticsearch의 RESTful API 인터페이스를 캡슐화하고 PHP 애플리케이션에서 Elasticsearch를 쉽게 운영할 수 있는 공식 PHP 클라이언트 라이브러리입니다. Composer를 통해 라이브러리를 설치하고 다음 명령을 실행할 수 있습니다.
composer require elasticsearch/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 서버를 나타내며, 고가용성과 로드 밸런싱을 달성하기 위해 여러 서버를 설정할 수 있습니다.
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'는 인덱스의 매핑을 나타냅니다. 이 매개변수에는 인덱스의 필드와 유형을 설정할 수 있습니다.
Elasticsearch에서 문서 추가는 다음 코드를 통해 수행할 수 있습니다.
$params = [ 'index' => 'my_index', 'id' => '1', 'body' => [ 'title' => 'Elasticsearch PHP集成', 'content' => 'Elasticsearch是一款基于Lucene的开源搜索引擎...' ] ]; $response = $client->index($params);
그 중 $params 배열 매개변수에서 'index'는 추가할 문서의 인덱스 이름을 나타냅니다. id'는 문서의 고유 식별자를 나타내고, 선택적 매개변수인 'body'는 문서의 내용을 나타내며 여러 필드와 값을 설정할 수 있습니다.
Elasticsearch에서 문서 검색은 다음 코드를 통해 가능합니다.
$params = [ 'index' => 'my_index', 'body' => [ 'query' => [ 'match' => [ 'title' => 'Elasticsearch PHP' ] ] ] ]; $response = $client->search($params);
그 중 $params 배열 매개변수에서 'index'는 검색할 문서의 인덱스 이름을 나타냅니다. body'는 쿼리 조건을 나타내며, 여러 개의 쿼리 조건과 정렬 규칙을 설정할 수 있습니다.
3. 전체 텍스트 검색을 구현하기 위한 PHP+Elasticsearch
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가 사용됩니다. 여기에서는 단어 분할로 처리된 최대값에 따라 중국어 텍스트를 변환합니다.
인덱싱 후 문서를 인덱스에 추가할 수 있습니다. 학생 정보를 추가하고 싶다면 다음 코드를 통해 이를 수행할 수 있습니다.
$params = [ 'index' => 'student', 'body' => [ 'id' => 1, 'name' => '张三', 'age' => 18, 'score' => 90.5 ] ]; $response = $client->index($params);
루프에 문서를 추가하여 색인에 여러 문서를 추가할 수 있습니다.
문서를 인덱싱하고 추가한 후 전체 텍스트 검색이 가능합니다. 이 예에서는 일치 쿼리를 사용하여 키워드를 입력하여 검색할 수 있는 전체 텍스트 검색을 수행합니다. 이는 다음 코드를 통해 달성할 수 있습니다:
$params = [ 'index' => 'student', 'body' => [ 'query' => [ 'match' => [ 'name' => '张三' ] ] ] ]; $response = $client->search($params);
그 중 'name' 필드는 일치에 사용되며 전체 텍스트 검색이 필요한 다른 필드로 대체될 수 있습니다. 검색 결과에 의해 반환되는 정보는 $response에 있으며, 쿼리 결과를 얻어서 표시할 수 있습니다.
4. 요약
이 글에서는 전체 텍스트 검색 기능을 구현하기 위해 PHP와 Elasticsearch를 통합하는 세부 단계를 소개합니다. Elasticsearch 접속, 인덱스 구축, 문서 추가, 문서 검색 등의 단계를 통해 대용량의 텍스트 데이터를 빠르고 정확하게 검색할 수 있습니다. 전체 텍스트 검색을 수행할 때 검색 정확도와 효율성을 높이기 위해 단어 분할기를 사용하여 중국어를 분할하는 것이 좋습니다.
위 내용은 전체 텍스트 검색 기능을 구현하기 위한 PHP와 Elasticsearch의 통합에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!