FT.SEARCH

FT.SEARCH는 제공된 쿼리로 색인을 검색하고 지정된 값을 반환합니다.

쿼리 구문에 대한 자세한 내용은 쿼리 구문을 참조하세요.

구문

FT.SEARCH index query
  [NOCONTENT]
  [TIMEOUT timeout]
  [PARAMS nargs name value [ name value ...]]
  [LIMIT offset num]
  DIALECT 2
  • index(필수): 쿼리하려는 색인입니다.
  • query(필수): 쿼리입니다. 쿼리 구문에 대한 자세한 내용은 쿼리 구문을 참조하세요.
  • NOCONTENT(선택사항): 문서 ID만 반환하고 콘텐츠를 제외합니다.
  • TIMEOUT(선택사항): 검색 명령어의 제한 시간 값을 설정할 수 있습니다.
  • PARAMS(선택사항): 키 값 쌍 개수에 2를 곱한 값입니다.
  • [LIMIT offset num](선택사항): 오프셋과 숫자를 사용하여 페이지로 나누기를 선택할 수 있습니다. 이 매개변수를 사용하지 않는 경우 기본값은 키를 최대 10개까지 반환하는 LIMIT 0 10입니다.
  • DIALECT 2(선택사항): 언어를 지정합니다. 지원되는 유일한 언어는 언어 2입니다.

명령어 반환

  • 이 명령어는 배열이나 오류 메시지를 반환합니다. 반환된 배열의 요소는 가장 일치하는 쿼리 결과를 나타냅니다. 각 배열 요소에는 다음이 포함됩니다.

  • 항목 해시 키

  • 다음의 배열입니다.

    • 키 값: [$score_as ] score_value
    • 거리 값
    • 속성 이름
    • 벡터 값

    NOCONTENT를 사용하면 배열 요소는 문서 ID로만 구성됩니다.

이 예시에서는 해시 필드 Vec에 HNSW 색인을 만들었다고 가정합니다. 다음 필드 이름이 포함된 일부 해시 항목을 이미 추가했고 지정된 입력 벡터와 가장 일치하는 벡터를 찾으려고 한다고 가정해 보겠습니다.

해시 필드 이름:

  • Vec - 실제 벡터가 포함된 필드 값입니다.
  • some_hash_key - 일부 연결된 벡터 메타데이터입니다.

검색을 실행하려면 FT.SEARCH 명령어를 사용합니다.

FT.SEARCH idx "*=>[KNN 3 @vec $BLOB EF_RUNTIME 40 AS score]" PARAMS 2 BLOB
"\x12\xa9\xf5\x6c" DIALECT 2

배열 반환:

[3, b'key_192', [b'__embedding_score', b'0.061539709568', b'embedding', b'd\xdeA?\xb7\\xbb>!\xb3\xd8>0\x94n?\xbd\xbco=WX\xe4>kN\x9e>\x1aV0>Z\x92*?\rD\x04>', b'some_hash_key', b'some_hash_key_value_192'], b'key_209', [b'__embedding_score', b'0.0803312063217', b'embedding', b's\xe1W?\xa4\x1d\xad>\xb8\x99Q?\xa9u ?6\xc8\xb2>=j5?!\x13\x96>~\x13\xb9=\xebcX?\x92\x86\xb8>', b'some_hash_key', b'some_hash_key_value_209'], b'key_821', [b'__embedding_score', b'0.0615693926811', b'embedding', b')\x1e\x03?\xa6\x10\xe0>^-\xa1\x00\x87>\x18u\xa2=\x06\xa2;>,\xeb=?\x0e%\xa4>', b'some_hash_key', b'some_hash_key_value_821']]

Nodejs 예시

const Redis = require("ioredis");
const redis = new Redis();
const searchResult = await redis.call("FT.SEARCH", "idx", "*=>[KNN 3 @vector $BLOB EF_RUNTIME 40 AS score]", "PARAMS", "2", "BLOB", "\x00\x00\x00\x00", "DIALECT", "2");
console.log(searchResult);