Elasticsearch Go 클라이언트로 텍스트 쿼리 수행

실제 예제를 통해 Elasticsearch Go 클라이언트를 사용하여 Elasticsearch에서 기존 텍스트 쿼리를 수행하는 방법을 알아보세요.

Elasticsearch를 직접 체험하려면 당사의 샘플 노트북을 살펴보거나, 무료 클라우드 체험판을 시작하거나, 지금 바로 로컬 기기에서 Elastic을 사용해 보세요.

Go를 포함한 모든 프로그래밍 언어로 소프트웨어를 구축하는 것은 평생에 걸친 학습에 전념하는 것입니다. 대학과 직장 생활을 하는 동안 Carly는 여러 언어를 구사하는 것에 적응해야 했고 Python, C, JavaScript, TypeScript, Java 등 다양한 프로그래밍 언어를 다뤄야 했습니다. 하지만 그것만으로는 충분하지 않았습니다! 그래서 최근에는 그녀도 바둑을 시작했습니다!

동물, 프로그래밍 언어, 친근한 저자 중 한 명처럼 검색도 검색 사용 사례에 따라 결정하기 어려울 정도로 다양한 방식으로 진화해 왔습니다. 이 블로그에서는 기존 키워드 검색에 대한 개요와 함께 Elasticsearch 및 Elasticsearch Go 클라이언트를 사용한 예제를 공유합니다.

필수 구성 요소

이 예제를 따라 하려면 다음 전제 조건이 충족되는지 확인하세요:

  1. Go 버전 1.21 이상 설치
  2. Go 문서에서다루는 권장 구조와 패키지 관리를 사용하여 자신만의 Go 리포지토리를 만드세요.
  3. 위키피디아에서 친숙한 Gopher를 포함한 설치류 기반 페이지 세트로 채워진 자체 Elasticsearch 클러스터를 생성합니다:

Elasticsearch에 연결

이 예제에서는 Go 클라이언트에서 제공하는 Typed API를 사용하겠습니다. 쿼리에 대한 보안 연결을 설정하려면 둘 중 하나를 사용하여 클라이언트를 구성해야 합니다:

  1. Elastic Cloud를 사용하는 경우 클라우드 ID와 API 키입니다.
  2. 클러스터 URL, 사용자 이름, 비밀번호 및 인증서를 입력합니다.

Elastic Cloud에 위치한 클러스터에 연결하면 다음과 같이 됩니다:

그러면 나중에 표시된 것처럼 client 연결을 검색에 사용할 수 있습니다.

키워드 검색은 1990년 문서화된 최초의 인터넷 검색 엔진인 Archie가 처음 등장한 이래로 우리에게 익숙한 기본적인 검색 유형입니다.

키워드 검색의 핵심 구성 요소는 문서를 반전된 색인으로 변환하는 것입니다. 교과서 뒷면에 있는 색인과 마찬가지로, 반전된 색인에는 토큰 목록과 각 문서 내 토큰 위치 간의 매핑이 포함되어 있습니다. 아래 다이어그램은 인덱스 생성의 주요 단계를 보여줍니다:

위에 표시된 바와 같이, Elasticsearch에서 토큰 생성은 세 가지 주요 단계로 구성됩니다:

  1. 0 개 이상을 통해 불필요한 문자 제거 char_filters. 이 예에서는 html_strip 필터를 통해 body_content 필드 내의 HTML 요소를 제거합니다.
  2. standard 토큰화 도구로 콘텐츠에서 토큰을 분할하면 간격과 키 구두점에 따라 토큰이 분할됩니다.
  3. 원치 않는 토큰을 제거하거나 토큰을 언어 루트로 다시 변환하는 lowercase 토큰 필터 또는 snowball 스템머와 같은 0개 이상의 filter 옵션을 사용하여 토큰라이저의 출력 스트림에서 토큰을 변환합니다.

Go로 Elasticsearch에서 검색하기

Go 클라이언트로 쿼리할 때는 아래 예시와 같이 검색할 인덱스를 지정하고 쿼리 및 기타 옵션을 전달합니다:

위의 예에서는 표준 match 쿼리를 수행하여 인덱스에서 함수에 전달된 지정된 문자열이 포함된 문서를 찾습니다. Do(context.Background()) 을 통해 검색 실행에 새로운 빈 컨텍스트를 전달합니다. 또한, Elasticsearch에서 반환된 모든 오류는 로깅 및 오류 처리를 위해 err 속성으로 출력됩니다.

결과는 _Source 속성과 함께 문서 자체를 JSON 형식으로 포함하는 res.Hits.Hits 형식으로 반환됩니다. 이 소스를 Go 친화적인 구조체로 변환하려면 아래 예시와 같이 Go encoding/json 패키지를 사용하여 JSON 응답을 마샬링 해제해야 합니다:

gopher 쿼리를 검색하고 마샬링을 해제하면 예상대로 Gopher의 Wikipedia 페이지가 반환됩니다:

하지만 What do Gophers eat? 에 문의하면 원하는 결과를 얻지 못합니다:

간단한 키워드 검색을 통해 우리가 사용하는 애플리케이션에서 익숙한 방식으로 작동하는 성능 좋은 결과를 Go 애플리케이션에 반환할 수 있습니다. 또한 특정 회사나 용어를 찾는 것과 같은 시나리오와 관련된 정확한 용어 검색에도 유용합니다.

그러나 위에서 보았듯이 어휘 불일치 문제로 인해 문맥과 의미를 파악하는 데 어려움을 겪고 있습니다. 또한 이미지 및 오디오와 같은 텍스트가 아닌 파일 형식에 대한 지원도 어렵습니다.

결론

여기서는 Elasticsearch Go 클라이언트를 사용하여 Elasticsearch에서 기존 텍스트 쿼리를 수행하는 방법에 대해 설명했습니다. Go는 인프라 스크립팅과 웹 서버 구축에 널리 사용되므로 Go에서 검색하는 방법을 아는 것이 유용합니다.

이 시리즈의 모든 코드는 GitHub 리포지토리에서 확인하세요. 2부에서 벡터 검색에 대한 개요와 Go에서 벡터 검색을 수행하는 방법을 알아보세요. 그때까지 고퍼 사냥을 즐기세요!

리소스

  1. Elasticsearch 가이드
  2. Elasticsearch Go 클라이언트
  3. 보 앤더슨의 Elasticsearch(분석기)에서 분석 이해하기 | #CodingExplained

관련 콘텐츠

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

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

직접 사용해 보세요