Computer >> 컴퓨터 >  >> 프로그램 작성 >> Redis

실행 중인 RediSearch

Redis에는 단순한 문자열에서 Redis Streams와 같은 강력한 추상화에 이르기까지 다양한 데이터 구조 세트가 있습니다. 기본 데이터 유형은 많은 시간이 걸릴 수 있지만 해결 방법이 필요할 수 있는 특정 사용 사례가 있습니다. 한 가지 예는 더 풍부한 쿼리 기능을 위해 키 기반 검색/조회를 넘어서기 위해 Redis에서 보조 인덱스를 사용해야 하는 요구 사항입니다. 정렬된 집합, 목록 등을 사용하여 작업을 완료할 수 있지만 일부 절충점을 고려해야 합니다.

RediSearch를 입력하세요! Redis 모듈로 제공되는 RediSearch는 일류 보조 인덱싱 엔진 덕분에 유연한 검색 기능을 제공합니다. 전체 텍스트 검색, 자동 완성, 지리적 인덱싱 등과 같은 강력한 기능을 제공합니다.

RediSearch의 힘을 보여주기 위해 이 블로그 게시물은 RediSearch Go 클라이언트를 사용하여 빌드된 Go 서비스의 도움으로 Redis용 Azure Cache와 함께 RediSearch를 사용하는 방법에 대한 실용적인 예를 제공합니다. 실시간으로 트윗을 수집하고 RediSearch를 사용하여 유연하게 쿼리할 수 있는 일련의 애플리케이션을 제공하도록 설계되었습니다.

구체적으로 다음 방법을 배우게 됩니다. 

  • RediSearch 색인 작업
  • TEXT, NUMERIC, TAG 등과 같은 다양한 RediSearch 데이터 유형 사용 
  • RediSearch 기능을 표시하는 애플리케이션을 빌드하는 방법 
  • 몇 가지 명령으로 Azure에 서비스 구성 요소를 배포하는 방법 
  • RediSearch를 쿼리하여 트윗 데이터 분석 

애플리케이션 개요 

언급했듯이 예제 서비스를 사용하면 실시간으로 트윗을 소비하고 RediSearch를 통해 쿼리할 수 있습니다.

실행 중인 RediSearch

두 가지 구성요소가 있습니다. 

  1. 소비자/인덱서: Twitter Streaming API에서 읽고, 인덱스를 생성하고, 도착하는 즉시 트윗 데이터(Redis HASH에)를 지속적으로 추가합니다.
  2. 검색 서비스: RediSearch 쿼리 구문을 사용하여 트윗을 검색할 수 있는 REST API입니다.

이 시점에서 솔루션을 시작하고 실행하여 실제로 작동하는 모습을 볼 수 있도록 하는 방법에 대해 설명하겠습니다. 그러나 개별 구성 요소의 작동 방식을 이해하는 데 관심이 있다면 아래의 코드 설명 섹션과 이 블로그의 GitHub 리포지토리(https://github.com/abhirockzz/redisearch-tweet-analysis)를 참조하세요.

전제조건

  1. 우선 MicrosoftAzure 계정이 필요합니다. 여기에서 무료로 계정을 만드십시오!
  2. 위에 나열된 서비스 구성 요소는 기본 Docker CLI 명령을 사용하여 Azure Container Instances에 배포됩니다. 이 기능은 Docker와 Azure 간의 통합을 통해 활성화됩니다.
  3. Windows, macOS의 경우 Docker Desktop 버전 2.3.0.5 이상이 필요하거나 Linux용 Docker ACI 통합 CLI를 설치해야 합니다. Twitter Streaming API를 사용하려면 Twitter 개발자 계정도 필요합니다. 아직 계정이 없는 경우 다음 지침을 따르세요. RediSearch가 실행 중입니다!

이 빠른 시작 자습서를 사용하여 Azure에서 Redis Enterprise 계층 캐시를 설정하여 시작하세요. 설정을 마치면 Redis 호스트 이름과 액세스 키가 준비되어 있는지 확인하세요.

실행 중인 RediSearch

우리 서비스의 두 구성 요소는 트윗 인덱싱 서비스와 검색 API 서비스인 Docker 컨테이너로 사용할 수 있습니다. (자체 Docker 이미지를 빌드해야 하는 경우 GitHub 리포지토리에서 제공되는 해당 Dockerfile을 사용하세요.) 

이제 이를 Azure Container Instances에 배포하는 것이 얼마나 편리한지 알게 될 것입니다. 이를 통해 관리되는 서버리스 Azure 환경에서 필요에 따라 Docker 컨테이너를 실행할 수 있습니다.

Azure에 배포 

docker-compose.yml 파일은 개별 구성요소를 정의합니다(tweets-search트윗 인덱서 ). Azure Redis 인스턴스와 Twitter 개발자 계정 자격 증명의 값을 바꾸도록 업데이트하기만 하면 됩니다. 전체 파일은 다음과 같습니다. 

Azure 컨텍스트 만들기: 

GitHub 저장소 복제: 

두 서비스 구성요소를 컨테이너 그룹의 일부로 배포합니다. 

(현재 ACI 컨텍스트에서 사용 가능한 Docker Compose 명령은 docker compose로 시작합니다. . 그건 아닙니다 docker-compose와 동일 하이픈으로. )

다음과 유사한 출력이 표시됩니다. 

서비스가 시작될 때까지 기다리면 Azure Portal을 확인할 수도 있습니다. 두 서비스가 모두 실행되고 나면 각각의 로그를 확인할 수 있습니다. 

모든 것이 잘 되었다면 트윗 소비자 서비스가 시작되었을 것입니다. 트윗 스트림을 읽고 Redis에 유지합니다.

진실의 순간!

트윗 데이터를 조회할 차례입니다. 이렇게 하려면 IP 주소 및 FQDN(정규화된 도메인 이름)을 사용하여 Azure Container Instances의 REST API에 액세스할 수 있습니다(Container Access에서 자세히 알아보기). IP를 찾으려면 docker ps를 실행하세요. PORTS 확인 섹션 출력(아래 참조):

이제 모든 종류의 쿼리를 실행할 수 있습니다! 자세히 알아보기 전에 다음은 검색어에 사용할 수 있는 색인이 생성된 속성에 대한 간략한 정보입니다. 

(참고로 아래 예에서는 curl을 사용하지만 VS Code용으로 'REST 클라이언트'를 적극 권장합니다.) 

검색 서비스 API의 기본 URL 설정: 

간단하게 시작하고 모든 문서를 쿼리합니다( * 사용):

다음과 유사한 출력이 표시됩니다. 

Page-Size 헤더를 확인하세요. 및 검색 조회수 :주로 페이지 매김 및 제한을 보여주기 위해 애플리케이션에서 전달되는 사용자 정의 헤더입니다. '모든 문서 가져오기' 쿼리에 대한 응답으로 Redis에서 12개의 결과를 찾았지만 JSON 본문은 10개의 항목을 반환했습니다. 이는 다음과 같은 다른 쿼리 매개변수를 사용하여 변경할 수 있는 RediSearch Go API의 기본 동작 때문입니다.

또는 예를 들어 iPhone에서 보낸 트윗을 검색합니다.

쿼리 결과에 모든 속성이 항상 필요한 것은 아닙니다. 예를 들어 사용자(Twitter 화면 이름)와 트윗 텍스트를 다시 가져오는 방법은 다음과 같습니다.

사용자 이름에 대한 쿼리는 어떻습니까(예:jo로 시작):

쿼리에서 속성 조합을 사용할 수도 있습니다.

특정 해시태그가 포함된 트윗을 찾는 것은 어떻습니까? 여러 해시태그(|로 구분)를 사용할 수 있습니까?

biden이 있는 트윗이 몇 개인지 알고 싶습니다. 최근에 만든 해시태그는? 범위 쿼리 사용:

트윗에서 좌표 정보를 얻은 운이 좋다면 추출한 다음 좌표에 대해 쿼리할 수 있습니다. 속성:

이는 몇 가지 예일 뿐입니다. 자유롭게 실험하고 다른 쿼리를 시도하십시오. RediSearch 문서의 이 섹션이 유용할 수 있습니다!

중요: 완료한 후 Azure Container Instances에서 서비스 및 해당 컨테이너를 중지하는 것을 잊지 마십시오. 

Azure Portal을 사용하여 생성한 Azure Redis 인스턴스를 삭제합니다.

코드 둘러보기

이 섹션에서는 개별 구성 요소의 코드에 대한 높은 수준의 개요를 제공합니다. 이렇게 하면 GitHub 리포지토리에서 소스 코드를 더 쉽게 탐색할 수 있습니다.

트윗 소비자/인덱서:

go-twitter 라이브러리는 Twitter와 상호작용하는 데 사용되었습니다.

Twitter Streaming API에 인증합니다.

그리고 별도의 고루틴에서 트윗 스트림을 수신합니다.

index.AddData(tweetToMap(tweet))— 이동에 주목하세요. 여기에서 인덱싱 구성 요소가 호출됩니다. Azure Cache for Redis에 연결됩니다.

그런 다음 다시 만들기 전에 인덱스(및 기존 문서도 포함)를 삭제합니다.

색인 및 관련 문서가 삭제되어 깨끗한 상태로 시작할 수 있으므로 실험/데모가 더 쉽습니다. 원하는 경우 이 부분을 주석 처리하도록 선택할 수 있습니다.

각 트윗에 대한 정보는 HASH에 저장됩니다. (이름 트윗:<트윗 ID> ) HSET 사용 작업: 

트윗 검색은 REST API를 노출합니다. RediSearch를 쿼리합니다. 모든 옵션(쿼리 등 포함)은 쿼리 매개변수의 형태로 전달됩니다. 예:https://localhost:8080/search?q=@source:iphone . 필요한 쿼리 매개변수를 추출합니다.

q 매개변수는 필수입니다. 그러나 검색에 다음 매개변수를 사용할 수도 있습니다. 

  • fields :결과에 반환할 속성을 지정하고, 
  • offset_limit :검색하려는 위치의 오프셋과 결과에 포함하려는 문서 수를 지정하려는 경우(RediSearch Go 클라이언트에 따라 기본적으로 오프셋은 0이고 제한은 10입니다).

예:

마지막으로 결과는 반복되어 JSON(문서 배열)으로 다시 전달됩니다.

이것이 이 섹션의 전부입니다!

Azure Cache for Redis의 Redis Enterprise 계층

Redis Enterprise는 Microsoft와 Redis에서 운영 및 지원하는 Azure Cache for Redis용 두 개의 새로운 계층 형태로 Azure에서 기본 서비스로 사용할 수 있습니다. 이 서비스를 통해 개발자는 RediSearch와 같은 모듈을 비롯한 다양한 Redis Enterprise 기능에 액세스할 수 있습니다. 자세한 내용은 다음 리소스를 참조하세요. 

  • Redis용 Azure Cache, 이제 엔터프라이즈 계층 일반 공급
  • 클라우드에서 Redis Enterprise를 성장시키기 위한 Microsoft와의 파트너십 강화 
  • Microsoft와 Redis가 협력하여 개발자에게 새로운 Azure Cache for Redis 기능 제공 
  • Azure Cache for Redis의 Redis Enterprise 기능 

결론

이 엔드-투-엔드 애플리케이션은 인덱스 작업, 실시간 데이터 수집을 통해 RediSearch 엔진에 의해 인덱싱되는 문서(트윗 정보)를 생성한 다음 다목적 쿼리 구문을 사용하여 해당 트윗에 대한 통찰력을 추출하는 방법을 보여줍니다.

Redis 문서에서 주제를 검색할 때 배후에서 어떤 일이 일어나는지 알고 싶으십니까? 이 블로그 게시물을 확인하여 Redis 사이트에서 전체 텍스트 검색을 RediSearch와 통합한 방법을 알아보세요! 또는 서버리스 애플리케이션에서 RediSearch를 사용하는 방법에 관심이 있으십니까?

아직 시작하는 중이라면 RediSearch 빠른 시작 페이지를 방문하세요.

Azure Cache for Redis의 엔터프라이즈 기능에 대해 자세히 알아보려면 다음 리소스를 확인하세요. 

  • 다중 영역 이중화 및 설정 방법 
  • 네트워크 격리를 위한 Private Link 지원 
  • 적절한 캐싱 계층 선택 
  • 엔터프라이즈 계층의 고가용성