네이티브 텍스트 인덱스
네이티브 텍스트 인덱스 (Native Text Index)
Apache Pinot의 네이티브 텍스트 인덱스와 해당 검색 기능에 대해 설명해요.
출처: 문서
본문
제거됨(Removed)
네이티브 텍스트 인덱스는 Pinot 1.3.0에서 더 이상 사용되지 않으며 Pinot 1.5.0부터 제거되었어요. Lucene 기반 Text Index로 마이그레이션하세요.
네이티브 텍스트 인덱스
Pinot는 Lucene 인덱스를 기본 Pinot 세그먼트의 사이드카로 구축해 텍스트 인덱싱과 검색을 지원해요. 이는 훌륭한 기법이지만 본질적으로 Pinot 특정 텍스트 검색 사용 사례에 대해 할 수 있는 최적화의 방향을 제한해요.
Pinot는 어떻게 다른가?
Pinot는 다른 데이터베이스/OLAP 엔진과 마찬가지로 ElasticSearch, Solr 같은 전체 텍스트 검색(FTS) 엔진이 전통적으로 사용하는 전체 텍스트 검색 도메인 특정 언어(DSL) 전체를 준수할 필요가 없어요. 전통적인 SQL 텍스트 검색 사용 사례에서 대부분의 텍스트 검색은 세 가지 패턴 중 하나에 속해요: 접두사 와일드카드 쿼리(pino*처럼), 접미사 또는 접미사 와일드카드 쿼리(*inot처럼), 용어 쿼리(pinot처럼).
Pinot의 네이티브 텍스트 인덱스
Pinot에서 네이티브 텍스트 인덱스는 처음부터 구축돼요. Pinot의 강력한 inverted index와 결합된 사용자 지정 텍스트-인덱싱 엔진을 사용해 빠른 텍스트 검색 경험을 제공해요.
장점은 위에서 언급한 텍스트 검색 사용 사례에 대해 네이티브 텍스트 인덱스가 Lucene 기반 인덱스보다 80-120% 더 빠르다는 것이에요. 디스크에서도 40% 더 작아요.
네이티브 텍스트 인덱스는 실시간 텍스트 검색을 지원해요. REALTIME 테이블의 경우 네이티브 텍스트 인덱스는 텍스트 인덱스에 데이터를 인-메모리로 인덱싱하면서 동시에 같은 인덱스에 대한 텍스트 검색을 지원할 수 있게 해요.
역사적으로 대부분의 텍스트 인덱스는 인-메모리 텍스트 인덱스가 먼저 쓰여지고 봉인(sealed)된 후에야 검색이 가능했어요. 이는 검색의 신선도를 기껏해야 거의 실시간(near-real-time)으로 제한해요.
네이티브 텍스트 인덱스는 실시간 인덱싱과 검색을 허용하는 사용자 지정 인-메모리 텍스트 인덱스와 함께 제공돼요.
네이티브 텍스트 인덱스 검색
TEXT_CONTAINS 함수가 네이티브 텍스트 인덱스에 대한 텍스트 검색을 지원해요.
SELECT COUNT(*) FROM Foo WHERE TEXT_CONTAINS (<column_name>, <search_expression>)
예시:
SELECT COUNT(*) FROM Foo WHERE TEXT_CONTAINS (<column_name>, "foo.*")
SELECT COUNT(*) FROM Foo WHERE TEXT_CONTAINS (<column_name>, ".*bar")
SELECT COUNT(*) FROM Foo WHERE TEXT_CONTAINS (<column_name>, "foo")
TEXT_CONTAINS는 표준 불리언 연산자를 사용해 결합될 수 있어요.
SELECT COUNT(*) FROM Foo WHERE TEXT_CONTAINS ("col1", "foo") AND TEXT_CONTAINS ("col2", "bar")
참고: TEXT_CONTAINS는 정규식 및 용어 쿼리를 지원하며 네이티브 인덱스에서만 동작해요. TEXT_CONTAINS는 표준 정규식 패턴(SQL 표준의 LIKE처럼 사용됨)을 지원하므로 Lucene 쿼리와 약간의 문법 차이가 있을 수 있어요.
네이티브 텍스트 인덱스 생성
네이티브 텍스트 인덱스는 필드 구성을 사용해 생성돼요. 인덱스 유형이 네이티브임을 나타내려면 필드 구성의 properties로 지정하세요.
"fieldConfigList":[
{
"name":"text_col_1",
"encodingType":"RAW",
"indexTypes": ["TEXT"],
"properties":{"fstType":"native"}
}
]
지원 컬럼 유형
네이티브 텍스트 인덱스는 STRING 컬럼에서만 지원돼요.
마이그레이션
네이티브 텍스트 인덱스가 Pinot 1.5.0에서 제거되었으므로 다음으로 표준 text index로 마이그레이션하세요.
"indexType": "NATIVE_TEXT"를fieldConfigList의 동등한 텍스트 인덱스 구성으로 대체.- 쿼리에서 이전처럼
TEXT_MATCH또는TEXT_CONTAINS함수 사용. - 세그먼트를 리로드해 인덱스를 재구축.
표준 텍스트 인덱스는 Lucene을 사용하며 동일한 모든 쿼리 패턴과 더불어 퍼지 매칭, 범위 쿼리, 사용자 지정 분석기 같은 추가 연산자를 지원해요.