ES|QL에서 PHP 객체로

PHP에서 ES|QL 쿼리를 실행하고 관리하는 방법을 알아보세요. 이 가이드에 따라 ES|QL 결과를 PHP 객체 또는 사용자 정의 클래스에 매핑하세요.

Elasticsearch를 직접 체험해 보세요. Elasticsearch Labs 리포지토리의 샘플 노트북을 살펴보거나, 무료 클라우드 체험을 시작해 보세요. 지금 바로 로컬 컴퓨터에서 Elastic을 사용해 보셔도 좋습니다.

elasticsearch-php v8.13.0부터는 ES|QL 쿼리를 실행하고 그 결과를 stdClass 또는 사용자 정의 클래스의 PHP 객체에 매핑할 수 있습니다.

ES|QL

ES|QL은 Elasticsearch 8.11.0에 도입된 새로운 Elasticsearch 쿼리 언어입니다. 현재는 기술 미리보기 버전으로 제공됩니다. Elasticsearch에 저장된 데이터를 필터링, 변환, 분석할 수 있는 강력한 방법을 제공합니다.

"파이프" (|)를 사용하여 단계별 방식으로 데이터를 조작하고 변환합니다. 이 접근 방식을 통해 사용자는 한 작업의 출력이 다음 작업의 입력이 되는 일련의 작업을 구성하여 복잡한 데이터 변환 및 분석을 수행할 수 있습니다.

예를 들어 다음 쿼리는 sample_data 인덱스의 처음 3개 문서(행)를 반환합니다:

사용 사례: 공식 PHP 클라이언트의 ES|QL 기능

공식 PHP 클라이언트에서 개발된 ES|QL 기능을 설명하기 위해 다음 정보를 포함한 81,828권의 책(54.4MB)으로 구성된 CSV 파일을 Elasticsearch에 저장했습니다:

이 목록은 공개적으로 사용 가능한 Amazon 서평 데이터 세트에서 추출했습니다.

다음 Elasticsearch 매핑을 사용하여 books 인덱스를 생성했습니다:

rating 값은 2.9GB의 Books_rating.csv 파일에서 가져온 순위 리뷰의 평균입니다.

여기에서 Elasticsearch에서 모든 도서를 일괄 가져오기 위해 사용한 PHP 스크립트를 찾을 수 있습니다. 대량 작업은 PHP 8.2.17을 사용하여 7초와 28MB RAM이 소요되었습니다. 제안된 매핑을 사용하면 Elasticsearch의 인덱스 크기는 약 62MB입니다.

ES|QL 결과를 PHP 객체 또는 사용자 정의 클래스에 매핑하기

esql()->query() 엔드포인트를 사용하여 PHP에서 ES|QL 쿼리를 실행할 수 있습니다. 이 쿼리의 결과는 테이블 데이터 구조입니다. 이는 columnsvalues 필드를 사용하여 JSON으로 표현됩니다. columns 필드에는 nametype 정의가 있습니다.

다음은 사용자 순위 리뷰에 따라 스티븐 킹이 쓴 상위 10권의 책을 검색하는 ES|QL 쿼리의 예입니다:

Elasticsearch의 JSON 결과는 다음과 같습니다:

이 예에서는 책과 관련된 6개의 속성(저자, 설명, 출판사, 등급, 제목, 연도)과 10개의 결과(모두 스티븐 킹의 책)가 있습니다.

ES|QL에서 지원되는 모든 유형 목록은 여기에 나와 있습니다.

$result 응답 개체는 배열, 문자열 또는 객체로 액세스할 수 있습니다(자세한 내용은 여기를 참조하세요).

객체 인터페이스를 사용하면 속성 및 인덱스를 사용하여 값에 액세스할 수 있습니다. 예를 들어 $result->values[0][4] 은 목록에서 첫 번째 책(0)의 제목(4)을 반환하고 $result->values[1][3] 은 두 번째 책(1)의 순위 점수(3) 등을 반환합니다. PHP에서 배열의 인덱스는 0부터 시작한다는 점을 기억하세요.

이 인터페이스는 일부 사용 사례에는 충분할 수 있지만 대부분의 경우 결과물로 여러 개의 객체를 원합니다.

결과를 객체 배열로 매핑하려면 elasticsearch-php의 새로운 mapTo() 기능을 사용할 수 있습니다.

이 기능은 Elasticsearch 응답 개체에서 직접 사용할 수 있습니다. 즉, 다음과 같이 액세스할 수 있습니다:

사용자 지정 Book 클래스가 있는 경우 다음과 같이 이를 사용하여 결과를 매핑할 수 있습니다:

클래스에 ES|QL 결과에 포함된 속성 외에 다른 속성이 있는 경우 이 방법도 작동합니다. mapTo() 함수는 ES|QL 결과의 열로 반환된 속성만 사용합니다.

이 문서에 보고된 모든 예제는 여기에서 다운로드할 수 있습니다.

자주 묻는 질문

ES|QL이란 무엇인가요?

ES|QL은 Elasticsearch 8.11.0에 도입된 Elasticsearch 쿼리 언어입니다. Elasticsearch에 저장된 데이터를 필터링, 변환, 분석할 수 있는 강력한 방법을 제공합니다.

관련 콘텐츠

최첨단 검색 환경을 구축할 준비가 되셨나요?

충분히 고급화된 검색은 한 사람의 노력만으로는 달성할 수 없습니다. Elasticsearch는 여러분과 마찬가지로 검색에 대한 열정을 가진 데이터 과학자, ML 운영팀, 엔지니어 등 많은 사람들이 지원합니다. 서로 연결하고 협력하여 원하는 결과를 얻을 수 있는 마법 같은 검색 환경을 구축해 보세요.

직접 사용해 보세요