RediSearch 2.0 개발의 첫 번째 이정표의 릴리스를 발표하게 된 것을 기쁘게 생각합니다. RediSearch는 Redis 데이터를 쿼리하여 다양하고 복잡한 질문에 답할 수 있는 실시간 검색 엔진입니다.
2.0-M01로 명명된 이 마일스톤은 인덱스가 데이터와 동기화된 상태로 유지되는 방식의 재구성을 나타냅니다. 인덱스를 통해 데이터를 쓰는 대신(FT.ADD 사용) 명령), RediSearch는 이제 해시로 작성된 데이터를 추적하고 자동으로 색인을 생성합니다.
여기서 가장 큰 장점은 이제 기존 Redis 인스턴스에 RediSearch를 추가하고 애플리케이션 코드를 업데이트하지 않고도 보조 인덱스를 생성할 수 있다는 것입니다. 이렇게 하면 단순히 RediSearch 모듈을 로드하고 스키마를 정의하여 기존 데이터에서 RediSearch 사용을 즉시 시작할 수 있습니다. RediSearch 2.0은 올 가을에 일반 공급될 예정입니다.
(참고: 이 새로운 기능은 API에 몇 가지 변경 사항을 도입합니다(아래 나열). 우리는 가능한 한 이전 버전과의 호환성을 유지하려고 노력하지만 이 경우에는 불가능했습니다. 앞으로 고객 피드백을 수집하는 대로 조정하고 수정할 계획입니다.)
API 변경사항
위에서 언급했듯이 이 RediSearch 2.0 이정표에는 API에 대한 몇 가지 변경 사항이 포함되어 있습니다.
- 인덱스가 더 이상 키 공간에 존재하지 않습니다. 예를 들어 인덱스 키(idx:
)를 사용하여 데이터베이스의 인덱스를 나열한 경우 더 이상 작동하지 않습니다. 하지만 FT._LIST 명령어를 도입했습니다. 데이터베이스의 모든 인덱스를 반환합니다. - 인덱스는 접두사/필터를 사용하여 생성해야 합니다. RediSearch에서 자동으로 색인을 생성할 문서를 지정합니다. 간단한 접두사 및/또는 복잡한 필터 표현식을 지정할 수 있습니다.
- 업그레이드가 불가능합니다. 이전 버전의 RediSearch로 생성된 RDB가 있는 경우 RediSearch 2.0은 이를 읽을 수 없습니다. 현재 전체 데이터 세트를 다시 색인화해야 합니다. 그러나 GA 릴리스를 위한 업그레이드 프로세스를 진행 중입니다.
- Redis 6 이상에서만 작동합니다.
- FT 명령은 Redis와 동등한 명령에 매핑되었습니다. 이를 통해 기존 애플리케이션이 RediSearch 2.0에서 계속 작동할 수 있습니다. 매핑은 다음과 같습니다.
- FT.ADD => HSET
- FT.DEL => 삭제 (기본적으로 DD)
- FT.GET => HGETALL
- FT.MGET => HGETALL
- 역 인덱스 자체는 더 이상 RDB에 저장되지 않습니다. . 지속성이 지원되지 않는다는 의미는 아닙니다. RediSearch는 인덱스 정의를 RDB에 저장하고 Redis가 시작된 후 백그라운드에서 데이터를 인덱싱합니다. FT.INFO를 이용하여 인덱싱 상태를 확인하면 재인덱싱이 완료되는 시점을 알 수 있습니다. 명령.
새로운 API
API에 대한 가장 큰 업데이트는 인덱스가 생성되는 방식입니다. RediSearch 2.0에서 FT.CREATE 명령 인덱스를 생성하는 데 사용됩니다. API에 대한 추가 사항은 여기에서 노란색으로 강조 표시됩니다.
FT.CREATE {index} ON {structure} [PREFIX {count} {prefix} [{prefix} ..] [FILTER {filter}] [LANGUAGE_FIELD {lang_field}] [LANGUAGE {lang}] [SCORE_FIELD {score_field}] [SCORE {score}] [PAYLOAD_FIELD {payload_field}] [TEMPORARY {seconds}] [MAXTEXTFIELDS] [NOOFFSETS] [NOHL] [NOFIELDS] [NOFREQS] [STOPWORDS {num} {stopword} ...] SCHEMA {field} [TEXT [NOSTEM] [WEIGHT {weight}] [PHONETIC {matcher}] | NUMERIC | GEO | TAG [SEPARATOR {sep}] ] [SORTABLE][NOINDEX] ...
몇 가지 세부정보를 살펴보겠습니다.
- ON {구조} 현재 HASH만 지원
- PREFIX {count} {prefix} 색인을 생성해야 하는 키를 색인에 알려줍니다. 색인에 여러 접두사를 추가할 수 있습니다. 인수는 선택 사항이므로 기본값은 * 입니다. (모든 키)
- 필터 {필터} 전체 RediSearch 집계 표현식 언어가 포함된 필터 표현식입니다. @__key를 사용하여 방금 추가/변경된 키에 액세스할 수 있습니다.
- 언어 및 SCORE 인덱싱된 모든 문서의 기본 언어 및 점수를 재정의할 수 있습니다.
- LANGUAGE_FIELD , SCORE_FIELD 및 PAYLOAD_FIELD 문서별 언어와 점수를 부여하고 페이로드를 문서 내 필드로 사용할 수 있습니다.
기타 제한 사항 및 변경 사항
RediSearch 2.0-M01 이정표는 몇 가지 다른 업데이트도 제공합니다.
- NOSAVE 더 이상 지원되지 않습니다.
- 해시 업데이트는 전체 문서가 인덱싱됨을 의미합니다(키스페이스 알림은 변경된 필드를 다루지 않음). 따라서 부분 업데이트가 느려집니다. 이러한 상황에서 성능을 개선하기 위한 옵션을 계속 조사하고 있습니다.
- 필드 이름은 이제 대소문자를 구분하므로 "FOO" 필드를 선언하고 "foo"로 인덱싱하면 작동하지 않습니다.
- FT.ADD 명령은 hset에 매핑됩니다. 여기에 표시된 대로:
FT.ADD idx doc1 1.0 LANGUAGE eng PAYLOAD payload FIELDS f1 v1 f2 v2
매핑됨
HSET doc1 __score 1.0 __language eng __payload payload f1 v1 f2 v2
즉, 매핑이 예상대로 작동하려면 인덱스의 점수, 언어 및 페이로드 필드가 그에 따라 __score, __language, __payload로 호출되어야 합니다.
- FT.ADDHASH 더 이상 지원되지 않습니다. HSET 사용 .
- FT.OPTIMIZE 더 이상 지원되지 않는 경우 RediSearch Garbage Collection 기능이 색인 최적화를 담당합니다.
결론
이제 이러한 문서를 조작할 때 애플리케이션 로직을 업데이트할 필요 없이 기존 Redis 데이터베이스에 RediSearch를 로드하고 해시에 있는 기존 데이터를 인덱싱할 수 있기 때문에 이러한 변경 사항에 대해 매우 기쁘게 생각합니다. GitHub에서 소스 코드를 가져오거나 1:99:1 RedisSarch 도커 이미지. 이 버전은 아직 프로덕션 준비가 되지 않았지만 피드백을 수집하기 위해 지금 공유하고 싶었습니다. GitHub 리포지토리 또는 Redis 커뮤니티 포럼에서 의견이나 문제를 공유해 주세요.