전체 텍스트 검색 기능을 구현하기 위한 PHP와 Elasticsearch의 통합에 대한 자세한 설명
인터넷의 발달로 기업은 점점 더 많은 양의 텍스트 데이터에 직면해 있습니다. 관련 콘텐츠를 어떻게 빠르고 정확하게 검색하는가는 정보분야 기업의 중요한 이슈 중 하나가 되었습니다. Lucene을 기반으로 하는 오픈 소스 검색 엔진인 Elasticsearch는 고가용성, 높은 확장성 및 빠른 검색이라는 특징을 갖고 있어 기업 전체 텍스트 검색에 선호되는 솔루션 중 하나입니다. 널리 사용되는 서버측 프로그래밍 언어인 PHP는 웹 개발 및 API 개발도 빠르게 수행할 수 있으며 Elasticsearch와 통합되어 일반적으로 사용되는 언어 중 하나가 되었습니다.
이 글에서는 주로 PHP와 Elasticsearch를 통합하여 전체 텍스트 검색 기능을 구현하는 세부 단계를 설명합니다.
1. Elasticsearch 소개
Elasticsearch는 대량의 텍스트 데이터를 빠르고 정확하게 검색하는 데 사용할 수 있는 Lucene 기반의 오픈 소스 검색 엔진입니다. Elasticsearch는 분산 스토리지 아키텍처를 채택하고 수평적 확장을 지원하며 대용량 데이터 스토리지와 빠른 검색 요구 사항에 적응할 수 있습니다.
Elasticsearch는 RESTful API 인터페이스를 제공하고 JSON 형식의 데이터 상호 작용을 지원하며 일반적으로 사용되는 프로그래밍 언어와 통합될 수 있습니다. Elasticsearch에서는 데이터가 문서에 따라 저장됩니다. 각 문서에는 여러 필드가 포함되어 있으며 각 필드는 다른 필드를 포함하도록 중첩될 수 있으므로 데이터 구조가 더욱 유연해집니다. 동시에 Elasticsearch는 문서에 대한 전체 텍스트 검색, 정확한 일치, 집계, 분석 및 기타 작업을 지원합니다.
2. PHP와 Elasticsearch 통합
- Elasticsearch-PHP 라이브러리 설치
Elasticsearch-PHP는 Elasticsearch의 RESTful API 인터페이스를 캡슐화하고 PHP 애플리케이션에서 Elasticsearch를 쉽게 운영할 수 있는 공식 PHP 클라이언트 라이브러리입니다. Composer를 통해 라이브러리를 설치하고 다음 명령을 실행할 수 있습니다.
composer require elasticsearch/elasticsearch
- 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 서버를 나타내며, 고가용성과 로드 밸런싱을 달성하기 위해 여러 서버를 설정할 수 있습니다.
- 인덱스 만들기
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP에서 데이터베이스 작업은 매우 쉽습니다. 이번 장에서는 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 이해하겠습니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu
