Firebase Data Connect는 PostgreSQL 기반의 전체 텍스트 검색을 지원합니다. 전체 텍스트 검색을 사용하면 한 번에 여러 열에서 키워드와 구문을 검색하여 대규모 데이터 세트 내에서 정보를 빠르고 효율적으로 찾을 수 있습니다.
서비스에 전체 텍스트 검색을 추가할 수 있습니다. 먼저 검색할 스키마의 String
에 @searchable
지시어를 추가합니다. 예를 들면 다음과 같습니다.
type Movie
@table {
# The fields you want to search over
title: String! @searchable
genre: String @searchable
description: String @searchable
tags: [String]
# Some other fields that we won't search over
rating: Float
imageUrl: String!
releaseYear: Int
}
이 지시어를 추가하면 쿼리에 <pluralType>_search
필드를 추가하여 전체 텍스트 검색을 실행할 수 있습니다. 이 경우 movies_search
가 됩니다.
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query) {
id
title
imageUrl
releaseYear
genre
rating
tags
description
}
}
전체 텍스트 검색 결과 미세 조정
@searchable
지시문과 _search
필드에 인수를 추가하여 전체 텍스트 검색 결과를 미세 조정할 수 있습니다.
공유 인수
기본 목록 필드 <pluralType>
에 사용되는 것과 동일한 인수를 사용하여 검색 결과를 제어할 수 있습니다.
order
을 사용하면 결과의 순서를 변경할 수 있습니다. 생략하면 결과가 관련성 내림차순으로 정렬됩니다.where
를 사용하면 검색에 추가 필터를 추가할 수 있습니다 (예: 특정 장르의 영화만 검색).limit
를 사용하면 쿼리에서 상위 X개의 결과만 반환합니다.offset
를 사용하면 쿼리가 처음 X개의 결과를 건너뜁니다.distinct
는 생성된 SQL에 DISTINCT 연산자를 추가합니다.
언어 선택
기본적으로 전체 텍스트 검색은 문서를 영어로 파싱합니다. @searchable
지시문의 language 인수를 사용하여 이를 변경할 수 있습니다.
type Movie
@table {
title: String! @searchable(language: "french")
...
}
올바른 언어를 지정하면 PostgreSQL에서 정확한 어근 추출을 실행할 수 있으며 검색에서 관련 결과를 놓치지 않도록 할 수 있습니다. 여러 열을 검색하는 경우 모든 열이 동일한 언어로 설정되어야 합니다.
언어 | ||
---|---|---|
|
|
|
psql
를 사용하면 다음 쿼리로 전체 목록을 가져올 수 있습니다.
SELECT cfgname FROM pg_ts_config;
쿼리 형식
기본적으로 전체 텍스트 검색은 쿼리에 웹 시맨틱을 사용합니다 (Google 검색과 유사). <pluralType>_search
필드의 queryFormat
인수를 사용하여 이 동작을 변경할 수 있습니다.
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query, queryFormat: PHRASE) {
...
}
}
쿼리 형식에는 다음 네 가지 옵션이 있습니다.
- QUERY는 웹 검색 엔진에 익숙한 시맨틱스를 제공합니다 (예: 따옴표로 묶인 문자열, AND, OR). 기본값입니다.
- PLAIN은 모든 단어와 일치하지만 반드시 함께 일치하지는 않습니다('갈색 개'는 '갈색과 흰색 개' 또는 '흰색과 갈색 개'와 일치함).
- PHRASE는 정확한 구문과 일치합니다 ( '갈색 개'는 '흰색과 갈색 개'와 일치하지만 '갈색과 흰색 개'와는 일치하지 않음).
- 고급을 사용하면 tsquery 연산자 전체 집합을 사용하여 복잡한 쿼리를 만들 수 있습니다.
관련성 기준
관련성 기준점을 설정하면 특정 관련성 값 이상의 결과만 검색에 반환됩니다. 대부분의 경우 이를 설정할 필요가 없습니다. 관련성이 0보다 큰 결과는 모두 관련 결과입니다.
하지만 검색 결과에 관련성이 없는 결과가 표시되는 경우 관련성 기준점을 사용하면 이러한 결과를 필터링할 수 있습니다.
관련성 기준의 적절한 값을 파악하려면 몇 가지 테스트 검색을 실행하고 _metadata.relevance
을 확인해야 합니다.
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query) {
id
title
_metadata {
relevance
}
...
}
}
관련성이 없다고 생각되는 결과를 제외하는 기준을 선택합니다. 방법은 다음과 같습니다.
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query, relevanceThreshold: 0.05) {
id
title
...
}
}
전체 텍스트 검색, 벡터 유사성 검색, 문자열 패턴 필터 중에서 선택
Data Connect는 데이터베이스를 검색하는 몇 가지 방법을 제공합니다.
이 표를 사용하여 사용 사례에 적합한 옵션을 선택하세요.
전체 텍스트 검색 | 벡터 유사성 검색 | 문자열 패턴 필터 |
---|---|---|
일반 검색 기능을 구현하는 데 적합 | 의미적으로 유사한 행 (예: 추천 또는 '이와 유사한 항목')을 찾는 데 적합합니다. | 정확한 텍스트 일치 또는 정규 표현식 검색에 적합 |
동일한 단어의 다양한 형태나 시제를 일치시키는 데 도움이 되는 어휘 스테밍을 실행합니다. | Vertex AI 필요 | 색인이나 생성된 열이 필요하지 않으므로 메모리와 디스크 공간을 가장 적게 사용합니다. |
표의 여러 열에 대해 실행할 수 있습니다. | 한 번에 하나의 열에만 적용됩니다. | OR 필터를 사용하여 표의 여러 열에 대해 실행할 수 있습니다. |
대규모 문서에서 성능이 우수함 | 대규모 문서에서 성능이 우수함 | 큰 문서를 검색할 때 성능이 떨어짐 |
생성된 열과 각 검색의 색인을 저장하기 위해 메모리 및 스토리지 오버헤드를 추가합니다. |