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

RediSearch 2.0 시작하기

RediSearch 2.0이 공개 미리보기로 출시되었습니다! 이 주요 새 릴리스의 기능 대부분은 개발자 경험 개선 및 확장성 향상에 중점을 두고 귀하의 피드백에 의해 주도되었습니다. 그러나 이 블로그 게시물은 RediSearch 2.0의 새로운 데이터 인덱싱 기능과 더 나은 인덱스 생성 방법 사용을 시작하는 데 도움이 되는 데 중점을 둡니다.

Redis 데이터베이스 내부에 풍부한 쿼리 및 집계 엔진이 있으면 캐싱을 훨씬 능가하는 많은 새로운 애플리케이션의 가능성이 열립니다. 복잡한 쿼리를 사용하여 데이터에 액세스해야 하는 경우에도 Redis를 기본 데이터베이스로 사용할 수 있습니다. 이 모든 것이 Redis의 유명한 속도, 안정성 및 확장성으로 이루어집니다!

새로운 기능에 대한 자세한 내용은 를 참조하십시오. RediSearch 2.0 소개

시작하기

전제조건

RediSearch 2.0을 시작하려면 다음이 필요합니다.

  • 도커
  • Redis 명령줄 인터페이스. 두 가지 주요 옵션은 다음과 같습니다.
    • redis-cli, Redis와 함께 제공됨
    • 간소화된 Redis 애플리케이션 개발을 위한 무료 GUI인 RedisInsight에는 명령줄 인터페이스도 포함되어 있습니다.

RediSearch가 활성화된 Redis 데이터베이스 가져오기

다양한 방법으로 RediSearch 2.0을 설치하고 사용할 수 있습니다.

  • Redis 엔터프라이즈 클라우드
  • Redis 엔터프라이즈 소프트웨어
  • RediSearch 바이너리
  • RediSearch 소스
  • 도커 이미지

편의상 이 블로그 게시물에서는 Docker 이미지를 사용합니다. (이미 RedisSearch 2.0을 설치했다면 다음 섹션으로 건너뛸 수 있습니다.) Docker로 Redis 인스턴스를 시작하려면 터미널을 열고 다음 명령을 실행하세요.

> docker run -it --rm --name redis-search-2 \
   -p 6379:6379 \
   redis/redisearch:2.0.0

참고: 컨테이너는 종료될 때 자동으로 제거됩니다(–rm 매개변수).

Redis에 연결하고 데이터 삽입

즐겨 사용하는 Redis 클라이언트를 사용하여 RediSearch 데이터베이스에 연결합니다.

Docker로 Redis 인스턴스를 시작한 경우 다음 명령을 사용하여 redis-cli를 사용할 수 있습니다. 컨테이너에 포함:

> docker exec -it redis-search-2 redis-cli

Redis Insight를 사용하려면 RediSearch 인스턴스를 추가하고 CLI로 이동하세요.

데이터 삽입

이제 일부 데이터를 삽입할 준비가 되었습니다. 이 예에서는 Redis 해시로 저장된 영화 데이터를 사용하므로 몇 개의 영화를 삽입해 보겠습니다.

> HSET movie:11002 title "Star Wars: Episode V - The Empire Strikes Back" plot "Luke Skywalker begins Jedi training with Yoda." release_year 1980 genre "Action" rating 8.7 votes 1127635

(integer) 6 

> HSET movie:11003 title "The Godfather" plot "The aging patriarch of an organized crime dynasty transfers control of his empire to his son." release_year 1972 genre "Drama" rating 9.2 votes 1563839 

(integer) 6

데이터베이스에는 이제 두 개의 해시가 포함됩니다. 영화의 키(movie:11002 ):

> HMGET movie:11002 title rating

1) "Star Wars: Episode V - The Empire Strikes Back"
2) "8.7"

그러나 title을 사용하여 영화 목록을 얻기 위해 데이터베이스를 어떻게 쿼리할 수 있습니까? , 장르 , 또는 release_year ?

'핵심' Redis 데이터 구조를 사용하면 예를 들어 장르를 영화 ID 목록에 연결하기 위해 세트를 사용하여 색인을 직접 관리하고 색인을 관리하고 쿼리하기 위해 애플리케이션에 많은 코드를 추가해야 합니다.

그러나 RediSearch를 사용하면 데이터와 연결된 인덱스를 정의하고 데이터베이스에서 관리하도록 할 수 있습니다. 그런 다음 쿼리 엔진을 사용하여 보조 인덱스를 사용하여 데이터를 쿼리/검색할 수 있습니다.

영화에 대한 RediSearch 색인 생성

인덱스를 생성하려면 인덱싱되고 쿼리에 사용할 수 있는 필드와 해당 유형을 나열하는 스키마를 정의해야 합니다.

이 예에서는 4개의 필드를 인덱싱합니다.

  1. 제목
  2. 출시 연도
  3. 평가
  4. 장르

인덱스 생성은 FT.CREATE를 사용하여 수행됩니다. 명령:

> FT.CREATE idx:movie ON hash PREFIX 1 "movie:" SCHEMA title TEXT SORTABLE release_year NUMERIC SORTABLE rating NUMERIC SORTABLE genre TAG SORTABLE

OK

하지만 쿼리를 실행하기 전에 FT.CREATE 명령:

  • idx:영화 :쿼리를 수행할 때 사용할 인덱스의 이름
  • ON 해시 :인덱싱할 구조의 유형입니다. (RediSearch 2.0은 해시 구조만 지원하지만 이 매개변수를 사용하면 RediSearch가 향후 다른 구조를 인덱싱할 수 있습니다.)
  • PREFIX 1 "영화:" :인덱싱되어야 하는 키의 접두사. 이것은 목록이므로 우리는 movie:* 키만 인덱싱하려고 하므로 숫자는 1입니다. 동일한 필드로 영화와 TV 프로그램을 인덱싱하려면 다음을 사용할 수 있습니다. PREFIX 2 "movie:" "tv_show:"
  • 스키마 ... :인덱싱할 스키마, 필드 및 해당 유형을 정의합니다. 명령에서 볼 수 있듯이 TEXT, NUMERIC, TAG 및 SORTABLE 매개변수를 사용하고 있습니다.

RediSearch 2.0 엔진은 PREFIX 값을 사용하여 데이터베이스를 스캔하고 스키마 정의를 기반으로 인덱스를 업데이트합니다. 이렇게 하면 기존 애플리케이션에 색인을 쉽게 추가할 수 있습니다. Hashes를 사용하므로 코드를 변경할 필요가 없습니다.

다음 명령으로 인덱스 정보를 볼 수 있습니다.

> FT.INFO idx:movie

 1) index_name
 2) idx:movie
... 
46) 1) global_idle
    2) (integer) 0
...

이제 인덱스를 사용하고 데이터베이스를 쿼리할 준비가 되었습니다.

영화 데이터베이스 쿼리

이 섹션에서는 FT.SEARCH를 사용합니다. 명령 및 구문 이 블로그 게시물의 목표는 시작하는 것이므로 기본 사항을 고수하고 모든 세부 사항을 다루지는 않습니다. RediSearch에 대해 자세히 알아보려면 설명서와 자습서를 참조하세요.

전체 텍스트 검색어

RediSearch는 전체 텍스트 검색 엔진으로, 애플리케이션이 Google에서 강력한 쿼리를 실행할 수 있도록 합니다. 예를 들어 '전쟁이 포함된 모든 영화를 검색하려면 " 관련 정보를 보려면 다음 명령을 실행합니다.

> FT.SEARCH idx:movie "war" RETURN 3 title release_year rating

1) (integer) 1
2) "movie:11002"
3) 1) "title"
   2) "Star Wars: Episode V - The Empire Strikes Back"
   3) "release_year"
   4) "1980"
   5) "rating"
   6) "8.7"

보시다시피 영화 스타워즈:에피소드 V - 제국의 역습 "war이라는 단어만 사용했음에도 불구하고 "를 일치시키려면 "전쟁 "라는 제목으로. 제목이 텍스트로 인덱싱되어 필드가 토큰화되고 형태소로 표시되기 때문입니다.

또한 이 명령은 필드를 지정하지 않으므로 단어 "war"(및 관련 단어 )는 인덱스의 모든 텍스트 필드에서 검색됩니다. 특정 필드를 검색하려면 @field를 사용합니다. 표기법:

> FT.SEARCH idx:movie "@title:war" RETURN 3 title release_year rating

여기에 설명된 대로 이 간단한 데이터세트에 대해 전체 텍스트 검색 쿼리를 추가로 실행할 수 있습니다. (참고:문서를 짧게 유지하기 위해 쿼리 결과는 표시되지 않습니다.)

접두어 일치:

> FT.SEARCH idx:movie "emp*" RETURN 3 title release_year rating

퍼지 검색:

> FT.SEARCH idx:movie "%gdfather%" RETURN 3 title release_year rating

조합:

> FT.SEARCH idx:movie "war |  %gdfather% " RETURN 3 title release_year rating

쿼리 구문에 대한 자세한 정보는 RediSearch 문서에서 찾을 수 있습니다.

태그 필드 검색

모든 "드라마" 영화를 찾으려면 "장르" 태그 필드를 사용하십시오.

> FT.SEARCH idx:movie "@genre:{Drama}" RETURN 3 title release_year rating

1) (integer) 1
2) "movie:11003"
3) 1) "title"
   2) "The Godfather"
   3) "release_year"
   4) "1972"
   5) "rating"
   6) "9.2"

구문 @field:{value} 태그 필드에서 검색 중임을 나타냅니다. RediSearch 문서에서 태그 필터에 대한 자세한 정보를 찾을 수 있습니다.

데이터베이스 및 쿼리 업데이트

지금까지 쿼리하는 모든 데이터는 인덱스 이전에 생성되었으며 인덱스 생성 중에 인덱싱되었습니다. 새로운 영화를 추가하여 상황을 바꿔봅시다:

> HSET "movie:11005" title "Star Wars: Episode VI - Return of the Jedi"  plot "The Rebels destroy the Empire's Death Star." release_year 1983 genre "Action" rating 8.3 votes 906260 

(integer) 6

이전 쿼리를 재사용할 수 있습니다.

> FT.SEARCH idx:movie "war" RETURN 3 title release_year rating

1) (integer) 2
2) "movie:11005"
3) 1) "title"
   2) "Star Wars: Episode VI - Return of the Jedi"
   3) "release_year"
   4) "1983"
   5) "rating"
   6) "8.3"
4) "movie:11002"
5) 1) "title"
   2) "Star Wars: Episode V - The Empire Strikes Back"
   3) "release_year"
   4) "1980"
   5) "rating"
   6) "8.7"

보시다시피 새 영화는 자동으로 색인이 생성되었습니다.

마찬가지로 영화를 삭제하거나 만료하면 다음과 같이 색인이 자동으로 업데이트됩니다.

> EXPIRE "movie:11002" 15

(integer) 1

15초 정도 기다렸다가 검색어를 실행하면 해당 영화가 색인에서 삭제된 것을 볼 수 있습니다.

이것은 임시 검색을 수행하고 데이터베이스가 데이터 및 인덱스의 만료를 관리하도록 할 때 매우 강력합니다. 임시 검색에 대한 사례를 제시하는 블로그 게시물에서 임시 검색에 대한 자세한 정보를 찾을 수 있습니다.

여기서 어디로 갈 수 있나요?

이 게시물은 RediSearch의 몇 가지 기본 사항을 공유하고 인덱싱 데이터가 애플리케이션 코드에서 어떻게 투명한지 보여주었습니다. 이 기능은 RediSearch 2.0의 새로운 기능입니다. RediSearch 1.x에서는 개발자가 FT.ADD를 특별히 사용해야 했기 때문입니다. 데이터를 인덱싱하는 명령입니다.

이 블로그 게시물에서 논의된 검색 및 인덱싱 기능 외에도 RediSearch에는 RediSearch 설명서, 자습서 및 온라인 과정에서 다루는 강력한 데이터 집계 기능도 포함되어 있습니다.

자습서에는 동일한 데이터가 포함되어 있지만 더 큰 데이터 세트와 더 많은 샘플 쿼리 및 집계가 있습니다. 또한 Java, Python 및 Node.js와 같은 프로그래밍 언어와 함께 RediSearch를 사용하는 방법을 보여주는 응용 프로그램이 포함되어 있습니다. 자세히 알아보려면 다음 추가 리소스를 확인하세요.

  • RediSearch 웹페이지
  • RediSearch 2.0 튜토리얼
  • 사용 사례 및 프로젝트 재발견