Elasticsearch Python 클라이언트 설정하기

이 섹션에서는 Python용 Elasticsearch 클라이언트 라이브러리를 설치하고 이를 사용하여 Elasticsearch 서비스에 연결합니다.

설치

Elasticsearch 클라이언트 라이브러리는 pip 과 함께 설치되는 Python 패키지입니다. 앞서 만든 가상 환경이 활성화되어 있는지 확인한 다음 다음 명령을 실행하여 클라이언트를 설치합니다:

잠재적인 비호환성을 방지하려면 설치하는 Elasticsearch 클라이언트 라이브러리의 버전이 사용 중인 Elasticsearch 스택의 버전과 일치하는지 확인하세요.

항상 모든 종속성이 포함된 요구 사항 파일을 업데이트하는 것이 좋으므로 지금이 새로 설치된 패키지를 포함하도록 이 파일을 업데이트하는 좋은 시기입니다. 터미널에서 다음 명령을 실행합니다:

Elasticsearch에 연결

Elasticsearch 서비스에 대한 연결을 생성하려면 적절한 연결 옵션을 사용하여 Elasticsearch 개체를 생성해야 합니다.

코드 편집기에서 search-tutorial 디렉토리에 있는 search.py 파일을 새로 만듭니다. search.py 파일은 모든 검색 함수가 정의되는 곳입니다. 검색 기능을 위한 별도의 파일을 만드는 이유는 나중에 이 파일을 추출하여 자신의 프로젝트에 쉽게 추가할 수 있기 때문입니다.

search.py에 다음 코드를 입력하여 Search 클래스를 추가합니다:

여기서 풀어야 할 것이 많습니다. 가져오기 직후에 호출되는 load_dotenv() 함수는 python-dotenv 패키지에서 제공됩니다. 이 패키지는 .env로 작업하는 방법을 알고 있습니다. 파일에 비밀번호 및 키와 같은 구성 변수를 저장하는 데 사용됩니다. load_dotenv() 함수는 .env에 저장된 변수를 읽습니다. 파일을 생성하고 파이썬 프로세스에 환경 변수로 가져옵니다.

Search 클래스에는 Elasticsearch 클라이언트 클래스의 인스턴스를 생성하는 생성자가 있습니다. 여기에는 Elasticsearch 서비스와 통신하는 모든 클라이언트 로직이 존재합니다. 서비스에 적합한 연결 옵션을 포함해야 하므로 현재 이 줄은 불완전합니다. 아래에서 귀하의 사례에 어떤 옵션이 적용되는지 알아보세요. Elasticsearch 객체가 생성되면 self.es 이라는 인스턴스 변수에 저장됩니다.

클라이언트 개체가 Elastic Cloud 배포와 통신할 수 있도록 하기 위해 info() 메서드가 호출됩니다. 이 메서드는 기본 정보를 요청하는 서비스를 호출합니다. 이 호출이 성공하면 서비스에 대한 유효한 연결이 있는 것으로 간주할 수 있습니다.

그런 다음 연결이 설정되었음을 나타내는 상태 메시지를 출력한 다음 Python의 pprint 함수를 사용하여 서비스에서 반환한 정보를 읽기 쉬운 형식으로 표시합니다.

참고: 이 파일에서 Python 표준 라이브러리의 json 패키지를 가져왔지만 사용하지 않은 것을 보셨을 것입니다. 이 패키지는 나중에 사용되므로 이 가져오기를 제거하지 마세요.

Search 클래스의 생성자를 완료하려면 Elasticsearch 객체에 적절한 연결 옵션을 지정해야 합니다. 다음 하위 섹션에서는 Elastic Cloud 및 Docker 설치 방법에 필요한 옵션에 대해 설명합니다.

Elastic Cloud 배포에 연결

지침에 따라 Elastic Cloud 배포를 생성한 경우, 배포의 클라우드 ID와 API 키를 알고 있어야 합니다. 이러한 값은 민감한 값이므로 애플리케이션 코드에 직접 포함시키는 것은 좋지 않습니다. 대신 .env (dot-env로 발음) 파일에 이러한 비밀을 안전하게 저장할 수 있습니다.

즐겨 사용하는 코드 편집기를 열고 검색 튜토리얼 프로젝트 디렉터리에 .env라는 이름의 새 파일을 만듭니다. (앞의 점을 잊지 마세요). 이 파일에 다음 내용을 입력합니다:

참고: 이 프로젝트를 소스 제어 리포지토리에 커밋하려는 경우 .env 파일에 저장하여 Elastic 계정 자격 증명이 손상되는 것을 방지하세요.

git을 사용하는 경우 .gitignore 끝부분에 다음 줄을 추가합니다. 파일(또는 아직 파일이 없는 경우 새 파일 만들기)을 만듭니다:

.env 파일에 자격 증명을 입력한 후 파일의 Search 클래스 생성자로 돌아가서 첫 번째 줄을 다음과 같이 편집합니다:

cloud_idapi_key 인수의 값은 파이썬이 os.environ 사전에서 유지 관리하는 환경에서 추출됩니다. 이러한 변수는 .env에서 읽습니다. 파일에 저장하고 load_dotenv() 함수를 통해 이 사전에 저장합니다.

자체 호스팅 Elasticsearch 도커 컨테이너에 연결하기

Docker를 사용하여 로컬로 호스팅된 Elasticsearch 서비스를 실행하기로 선택한 경우, 필요한 연결 옵션은 연결 엔드포인트뿐입니다. search.py에서 Search 클래스 생성자의 첫 번째 줄을 다음과 같이 편집합니다:

이 버전의 생성자에서 Elasticsearch 객체는 Elasticsearch 서비스의 최상위 엔드포인트(일반적으로 http://localhost:9200)에 대한 URL을 사용하여 인스턴스화됩니다. Docker 지침은 암호화 및 인증을 명시적으로 비활성화하므로 자격 증명을 제공하지 않아도 된다는 점을 기억하세요.

연결 테스트

이제 Elasticsearch 서비스에 연결할 준비가 되었습니다. 이렇게 하려면 Python 가상 환경이 활성화되어 있는지 확인한 다음 python 입력하여 Python 대화형 세션을 시작하세요. 익숙한 >>> 프롬프트가 표시되며, 이 프롬프트에서 Python 문을 입력할 수 있습니다.

다음과 같이 Search 클래스를 가져옵니다:

다음으로 새 클래스를 인스턴스화합니다:

연결 메시지가 표시되고 클라이언트의 info() 메서드가 반환한 정보가 이어집니다. 식별자와 버전 번호의 차이를 제외하면 출력은 다음과 같아야 합니다:

오류가 발생하면 .env 파일에 올바른 자격 증명을 입력했는지 확인하세요. 파일을 확인하거나, 자체 호스팅 배포의 경우 지침에 따라 컴퓨터에서 Elasticsearch Docker 컨테이너를 실행하고 있는지 확인합니다.

Elasticsearch와 플라스크 애플리케이션 통합

이 섹션의 마지막 단계는 지금까지 수행한 작업을 앞서 설치한 작은 플라스크 애플리케이션에 통합하는 것입니다. 목표는 애플리케이션이 시작될 때 Elasticsearch에 대한 연결을 자동으로 생성하는 것입니다.

이렇게 하려면 코드 편집기에서 app.py를 엽니다. 기존의 유일한 임포트 아래에 search.py 모듈에 대한 임포트 문을 추가합니다:

그런 다음 app 변수가 생성되는 줄을 찾아서 새 Search 클래스의 인스턴스를 바로 생성합니다:

그거예요! 이제 애플리케이션에 필요할 때 사용할 수 있는 es 개체가 생겼습니다. 터미널에서 플라스크 애플리케이션을 실행 중인 경우 파일을 저장하자마자 애플리케이션이 다시 로드되는 것을 볼 수 있습니다. 다시 로드하면 Search 클래스 생성자에 의해 인쇄된 연결 정보가 표시되며, 이제부터 애플리케이션이 다시 시작될 때마다 계속 표시됩니다.

플라스크 애플리케이션을 실행하고 있지 않으셨다면 지금이 바로 시작하기에 좋은 시기입니다. 터미널 창에서 프로젝트 디렉터리로 변경하고 Python 가상 환경을 활성화한 다음 다음을 사용하여 애플리케이션을 시작합니다:

오류가 발생하는 경우 문제를 해결하는 데 도움이 되도록, 다음은 통합 Elasticsearch 클라이언트가 포함된 app.py의 전체 사본입니다:

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

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

직접 사용해 보세요