본문으로 건너뛰기
최종 수정: 에

전문 검색 및 쿼리 가속 연산자

이 문서에서는 Apache Doris 역색인에서 지원하는 쿼리 연산자를 두 가지 범주로 나누어 소개합니다.

  • 전문 검색 연산자: 텍스트 필드에서 키워드, 구문, 접두사, 정규식 등의 퍼지 매칭에 사용합니다.
  • 역색인 쿼리 가속: 구조화된 필드에서 동등 비교, 범위, 집합, 배열 등의 조건으로 정확하게 필터링하는 데 사용합니다.

전문 검색 연산자​

다음 테이블은 모든 전문 검색 연산자와 대표적인 사용 사례를 보여 줍니다.

연산자대표적인 사용 사례매칭 규칙
MATCH_ANY키워드 "OR" 검색키워드 중 하나라도 일치하면 매칭
MATCH_ALL키워드 "AND" 검색모든 키워드가 일치해야 매칭
MATCH_PHRASE엄격한 구문 검색검색어가 서로 인접하고 순서도 같아야 함
MATCH_PHRASE (slop 사용)오차를 허용하는 구문 검색검색어 사이에 간격 허용
MATCH_PHRASE (엄격한 순서)검색어 순서가 고정된 구문 검색허용된 간격 범위 내에서 검색어 순서가 고정됨
MATCH_PHRASE_PREFIX입력 제안 / 접두사 자동 완성마지막 검색어를 접두사로 매칭
MATCH_REGEXP검색어 단위 정규식 매칭토큰화 결과에 정규식 적용
MATCH_PHRASE_EDGE양 끝부분 퍼지 매칭첫 검색어는 접미사 매칭 + 중간 검색어는 정확한 매칭 + 마지막 검색어는 접두사 매칭

키워드 검색: MATCH_ANY / MATCH_ALL​

여러 키워드가 주어졌을 때 해당 단어가 포함된 문서를 찾는 경우에 적합합니다.

  • MATCH_ANY: 키워드 중 하나라도 포함된 행을 매칭합니다.

    SELECT * FROM table_name WHERE content MATCH_ANY 'keyword1 keyword2';
  • MATCH_ALL: 모든 키워드가 동시에 포함된 행을 매칭합니다.

    SELECT * FROM table_name WHERE content MATCH_ALL 'keyword1 keyword2';

구문 검색: MATCH_PHRASE 계열​

키워드가 서로 인접하거나 검색어 순서를 유지해야 하는 정확한 구문 매칭에 적합합니다.

엄격한 구문 매칭​

검색어가 서로 인접하고 순서도 같아야 합니다. 인덱스 가속을 활성화하려면 인덱스 속성에 "support_phrase" = "true"를 설정합니다.

SELECT * FROM table_name WHERE content MATCH_PHRASE 'keyword1 keyword2';

Slop을 사용한 구문 매칭​

키워드 사이에 최대 slop개의 단어를 허용하며, 검색어 순서는 달라도 됩니다.

-- Allow up to 3 words between keyword1 and keyword2
SELECT * FROM table_name WHERE content MATCH_PHRASE 'keyword1 keyword2 ~3';

엄격한 순서의 구문 매칭​

+를 slop과 함께 사용하면 검색어 순서가 고정되어야 합니다.

SELECT * FROM table_name WHERE content MATCH_PHRASE 'keyword1 keyword2 ~3+';

접두사 및 끝부분 매칭​

입력 제안이나 접두사/접미사 퍼지 매칭 등에 적합합니다.

MATCH_PHRASE_PREFIX​

마지막 단어를 접두사로 매칭하는 구문 매칭입니다. 단어가 하나만 주어지면 해당 단어의 접두사 매칭으로 동작합니다.

-- The last word matches by prefix
SELECT * FROM table_name WHERE content MATCH_PHRASE_PREFIX 'keyword1 key';

-- A single word degenerates into a prefix match
SELECT * FROM table_name WHERE content MATCH_PHRASE_PREFIX 'keyword1';

MATCH_PHRASE_EDGE​

구문의 양 끝부분을 매칭하며, 다음 규칙을 따릅니다.

  • 첫 번째 단어는 접미사로 매칭합니다.
  • 중간 단어는 정확한 매칭을 사용합니다.
  • 마지막 단어는 접두사로 매칭합니다.
  • 검색어는 서로 인접해야 합니다.
SELECT * FROM table_name WHERE content MATCH_PHRASE_EDGE 'search engine optim';

정규식 매칭: MATCH_REGEXP​

토큰화된 검색어에 정규식 매칭을 수행합니다.

SELECT * FROM table_name WHERE content MATCH_REGEXP '^key_word.*';

USING ANALYZER로 분석기 지정​

하나의 컬럼에 서로 다른 분석기를 사용하는 역색인이 여러 개 생성되어 있으면, USING ANALYZER 절로 쿼리 시 사용할 분석기를 지정할 수 있습니다.

구문​

SELECT * FROM table_name WHERE column MATCH 'keywords' USING ANALYZER analyzer_name;

지원하는 연산자​

모든 MATCH 연산자는 USING ANALYZER 절을 지원합니다.

  • MATCH / MATCH_ANY
  • MATCH_ALL
  • MATCH_PHRASE
  • MATCH_PHRASE_PREFIX
  • MATCH_PHRASE_EDGE
  • MATCH_REGEXP

내장 분석기​

이름설명
none토큰화 없이 정확한 매칭 수행
standard표준 토큰화
chinese중국어 토큰화

사용 예시​

-- Use the standard analyzer (tokenizes the text)
SELECT * FROM articles WHERE content MATCH 'hello world' USING ANALYZER std_analyzer;

-- Use the keyword analyzer (exact match, no tokenization)
SELECT * FROM articles WHERE content MATCH 'hello world' USING ANALYZER kw_analyzer;

-- Combined with MATCH_PHRASE
SELECT * FROM articles WHERE content MATCH_PHRASE 'hello world' USING ANALYZER std_analyzer;

-- Use built-in analyzers
SELECT * FROM articles WHERE content MATCH 'hello' USING ANALYZER standard;
SELECT * FROM articles WHERE content MATCH 'hello' USING ANALYZER none;

참고 사항​

  • 지정한 분석기의 인덱스가 아직 구축되지 않았다면 쿼리는 자동으로 인덱스를 사용하지 않는 실행 경로로 전환됩니다. 결과는 정확하지만 성능은 느려집니다.
  • 분석기를 지정하지 않으면 시스템은 사용 가능한 인덱스 중 하나를 사용합니다.

역색인 쿼리 가속​

역색인은 전문 검색뿐 아니라 구조화된 필드의 정확한 필터링도 가속할 수 있습니다. 지원하는 연산자와 함수는 다음과 같습니다.

범주연산자 / 함수
동등 비교 및 집합=, !=, IN, NOT IN
범위>, >=, <, <=, BETWEEN
NULL 검사IS NULL, IS NOT NULL
배열array_contains, array_overlaps

사용 예시:

-- Range query
SELECT * FROM t WHERE price >= 100 AND price < 200;

-- Set query
SELECT * FROM t WHERE tags IN ('a', 'b', 'c');

-- Array query
SELECT * FROM t WHERE array_contains(attributes, 'color');