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를 참조하세요.