ES|QL에서 PHP 객체로

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

Elasticsearch를 직접 체험하려면 당사의 샘플 노트북을 살펴보거나, 무료 클라우드 체험판을 시작하거나, 지금 바로 로컬 기기에서 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 운영팀, 엔지니어 등 많은 사람들이 지원합니다. 서로 연결하고 협력하여 원하는 결과를 얻을 수 있는 마법 같은 검색 환경을 구축해 보세요.

직접 사용해 보세요