FST 인덱스

FST 인덱스 (FST Index)

FST(Finite State Transducer) 인덱스는 사전 값을 기반으로 구축해 STRING 컬럼의 정규식 쿼리를 가속화해요. 전체 사전을 스캔하는 것과 비교해 디스크 인덱스 크기를 4-6배 줄여줘요.

출처: 문서

본문

언제 사용하나 (When to use)

문자열 컬럼에서 쿼리가 LIKE나 REGEXP_LIKE 조건자를 사용할 때 FST 인덱스를 사용하세요. 특히 접두사 매칭 패턴에 효과적이에요. 토큰화가 있는 전체 텍스트 검색에는 text index를 대신 사용하세요.

지원 컬럼 유형

  • STRING 컬럼만
  • 단일 값이어야 함
  • 사전 값이 사용 가능해야 함. 이는 사전 인코딩된 forward index에서 오거나, RAW forward index와 짝지어진 독립형 사전에서 올 수 있어요.

제한 사항

  • 정규식 쿼리(LIKE와 REGEXP_LIKE 조건자)만 지원.
  • 저장되었거나 완료된 세그먼트만 지원(실시간 테이블의 소비 세그먼트는 아님).
  • 사전 값을 사용할 수 있는 컬럼만 지원.
  • 접두사 쿼리에 가장 잘 동작함. 접미사 전용 또는 중위(infix) 전용 패턴은 그만큼 혜택을 받지 못할 수 있음.

Lucene FST는 대소문자를 구분해요. 쿼리에서 FST 인덱스를 사용할 때 패턴이 데이터에 저장된 대소문자와 일치하는지 확인하세요. 예를 들어 WHERE colA LIKE '%Value%'는 "Value"와 일치하지만 "value"와는 일치하지 않아요. 대소문자 무시 매칭에는 IFST index를 대신 사용하세요.

FST 구축에 대한 자세한 내용은 Lucene FST documentation을 참조하세요.

구성 (Configuration)

컬럼에서 FST 인덱스를 활성화하려면:

{
  "fieldConfigList": [
    {
      "name": "text_col_1",
      "encodingType": "DICTIONARY",
      "indexType": "FST"
    }
  ]
}

FST 인덱스는 인덱스 파일 하나(.lucene.fst)를 생성해요. forward index를 RAW로 유지하려면 컬럼에 사전을 선언해 Pinot가 사전 값에서 FST를 구축할 수 있게 하세요.

{
  "fieldConfigList": [
    {
      "name": "text_col_1",
      "encodingType": "RAW",
      "indexTypes": ["FST"],
      "indexes": {
        "dictionary": {}
      }
    }
  ]
}

FST나 IFST를 활성화할 때 컬럼을 레거시 tableIndexConfig.noDictionaryColumns나 tableIndexConfig.noDictionaryConfig에 두지 마세요. 그 설정들은 사전을 비활성화하고 Pinot가 테이블 구성을 거부해요. 컬럼에 inverted index도 활성화되어 있으면 FST는 더 빠른 조회를 위해 그것을 활용할 수 있어요.

쿼리 예시

접두사 매칭:

SELECT productName
FROM products
WHERE productName LIKE 'iPhone%'

정규식 매칭:

SELECT email
FROM users
WHERE REGEXP_LIKE(email, '^admin.*@example\\.com$')

중위(infix) 매칭:

SELECT description
FROM products
WHERE description LIKE '%wireless%'

대소문자 무시 FST 인덱스 (IFST)

대소문자 무시 FST 인덱스(IFST)는 표준 FST 인덱스와 동일한 기능을 대소문자 무시 매칭으로 제공해요. 쿼리에서 대소문자 민감도를 수동으로 처리할 필요가 없어요.

  • 대소문자 무시 정규식 쿼리 지원.
  • 저장되었거나 완료된 세그먼트만 지원(소비 세그먼트는 아님).
  • 사전 값을 사용할 수 있는 STRING 컬럼만 지원.
  • 대소문자 무시 매칭이 있는 접두사 쿼리에 가장 잘 동작.

구성

{
  "fieldConfigList": [
    {
      "name": "notes",
      "encodingType": "DICTIONARY",
      "indexes": {
        "ifst": {
          "enabled": true
        }
      }
    }
  ]
}

대소문자 무시 FST 인덱스는 인덱스 파일 하나(.lucene.ifst)를 생성해요.

인덱스 활성화에 대한 자세한 내용은 enabling indexes를 참조하세요.

더 알아보기 (Learn more)