NoSQL용 Azure Cosmos DB의 전체 텍스트 검색(미리 보기)
NoSQL용 Azure Cosmos DB는 이제 애플리케이션의 검색 기능을 향상시키기 위해 설계된 강력한 전체 텍스트 검색 기능을 미리 보기로 제공합니다.
참고 항목
전체 텍스트 및 하이브리드 검색은 초기 미리 보기로 제공되며 현재 모든 지역에서 사용할 수 없습니다.
전체 텍스트 검색이란?
이제 NoSQL용 Azure Cosmos DB는 데이터 쿼리 기능을 향상하도록 설계된 강력한 전체 텍스트 검색 기능을 미리 보기로 제공합니다. 이 기능에는 형태소 분석, 단어 제거 중지 및 토큰화와 같은 고급 텍스트 처리 기술이 포함되어 있으므로 특수 텍스트 인덱스를 통해 효율적이고 효과적인 텍스트 검색이 가능합니다. 전체 텍스트 검색에는 지정된 검색 쿼리에 대한 문서의 관련성을 평가하는 함수가 포함된 전체 텍스트 점수 매기기도 포함됩니다. BM25 또는 최적 일치 25는 용어 빈도, 역 문서 빈도 및 문서 길이와 같은 요소를 고려하여 문서의 점수를 매기고 순위를 지정합니다. 이렇게 하면 가장 관련성이 높은 문서가 검색 결과의 맨 위에 표시되어 텍스트 검색의 정확도와 유용성이 향상됩니다.
전체 텍스트 검색은 다음을 비롯한 다양한 시나리오에 적합합니다.
- 전자상거래: 설명, 리뷰 및 기타 텍스트 특성에 따라 제품을 빠르게 찾을 수 있습니다.
- 콘텐츠 관리: 문서, 블로그 및 문서를 효율적으로 검색합니다.
- 고객 지원: 관련 지원 티켓, FAQ 및 기술 자료 문서를 검색합니다.
- 사용자 콘텐츠: 게시물 및 댓글과 같이 사용자가 생성한 콘텐츠를 분석하고 검색합니다.
- 챗봇용 RAG: 큰 텍스트 모음에서 관련 정보를 검색하여 챗봇 응답을 향상시키고 답변의 정확도와 관련성을 향상시킵니다.
- 다중 에이전트 AI 앱: 여러 AI 에이전트가 방대한 양의 텍스트 데이터를 공동으로 검색하고 분석하여 포괄적이고 미묘한 인사이트를 제공할 수 있습니다.
전체 텍스트 검색을 사용하는 방법
참고 항목
전체 텍스트 및 하이브리드 검색(미리 보기)은 현재 모든 지역에서 사용할 수 없습니다.
- "NoSQL에 대한 전체 텍스트 및 하이브리드 검색" 미리 보기 기능을 사용하도록 설정합니다.
- 전체 텍스트 정책 및 전체 텍스트 인덱스로 컨테이너를 구성합니다.
- 텍스트 속성을 사용하여 데이터를 삽입합니다.
- 데이터에 대해 하이브리드 쿼리를 실행합니다.
NoSQL 미리 보기 기능에 대한 전체 텍스트 및 하이브리드 검색 사용
전체 텍스트 검색, 전체 텍스트 점수 매기기 및 하이브리드 검색을 사용하려면 사용하기 전에 Azure Cosmos DB for NoSQL 계정에서 미리 보기 기능을 사용하도록 설정해야 합니다. 등록하려면 아래 단계를 따릅니다.
- Azure Cosmos DB for NoSQL 리소스 페이지로 이동합니다.
- "설정" 메뉴 항목 아래에서 "기능" 창을 선택합니다.
- "NoSQL API에 대한 전체 텍스트 및 하이브리드 검색(미리 보기)" 기능을 선택합니다.
- 기능에 대한 설명을 읽어 사용하도록 설정할지 확인합니다.
- "사용"을 선택하여 벡터 인덱싱 및 검색 기능을 켭니다.
하이브리드 검색을 위한 컨테이너 정책 및 인덱스 구성
전체 텍스트 검색 기능을 사용하려면 먼저 두 가지 정책을 정의해야 합니다.
- 새 전체 텍스트 쿼리 시스템 함수에 대한 텍스트를 포함할 경로를 정의하는 컨테이너 수준 전체 텍스트 정책입니다.
- 효율적인 검색을 가능하게 하는 인덱싱 정책에 추가된 전체 텍스트 인덱스입니다.
전체 텍스트 정책
전체 텍스트 검색을 위해 구성하려는 모든 텍스트 속성에 대해 텍스트와 language
텍스트가 있는 속성 모두를 선언 path
해야 합니다. 간단한 전체 텍스트 정책은 다음과 같습니다.
{
"defaultLanguage": "en-US",
"fullTextPaths": [
{
"path": "/text",
"language": "en-US"
}
]
}
배열에 다른 요소를 추가하여 여러 텍스트 경로를 쉽게 정의할 수 fullTextPolicy
있습니다.
{
"defaultLanguage": "en-US",
"fullTextPaths": [
{
"path": "/text1",
"language": "en-US"
},
{
"path": "/text2",
"language": "en-US"
}
]
}
참고 항목
영어(언어로서의 "en-us")는 현재 유일하게 지원되는 언어입니다.
Important
와일드카드 문자(*, [])는 현재 전체 텍스트 정책 또는 전체 텍스트 인덱스에서 지원되지 않습니다.
전체 텍스트 인덱스
모든 전체 텍스트 검색 작업은 전체 텍스트 인덱스를 사용해야 합니다. 전체 텍스트 인덱스는 아래 예제에 따라 NoSQL용 Azure Cosmos DB 인덱스 정책에서 쉽게 정의할 수 있습니다.
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/\"_etag\"/?"
},
],
"fullTextIndexes": [
{
"path": "/text"
}
]
}
전체 텍스트 정책과 마찬가지로 전체 텍스트 인덱스를 여러 경로에 정의할 수 있습니다.
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/\"_etag\"/?"
},
],
"fullTextIndexes": [
{
"path": "/text"
},
{
"path": "/text2"
}
]
}
전체 텍스트 검색 쿼리
전체 텍스트 검색 및 점수 매기기 작업은 NoSQL용 Azure Cosmos DB 쿼리 언어에서 다음 시스템 함수를 사용하여 수행됩니다.
FullTextContains
: 지정된 문자열이 문서의 지정된 속성에 포함되어 있는지를 반환true
합니다. 쿼리에서 반환된WHERE
문서에 특정 키 단어가 포함되도록 하려는 경우 절에 유용합니다.FullTextContainsAll
: 지정된 문자열이 모두 문서의 지정된 속성에 포함되어 있는지를 반환true
합니다. 쿼리에서 반환된WHERE
문서에 여러 키 단어가 포함되도록 하려는 경우 절에 유용합니다.FullTextContainsAny
: 지정된 문자열이 문서의 지정된 속성에 포함되어 있는지를 반환true
합니다. 쿼리에서 반환된WHERE
문서에 키 단어 중 하나 이상이 포함되어 있는지 확인하려는 경우 절에 유용합니다.FullTextScore
: 점수를 반환합니다. 이는 반환된 문서가 전체 텍스트 점수의 순위에 따라 정렬되고, 가장 관련성이 높은(가장 높은 점수 매기기) 문서가 맨 위에 있고, 맨 아래에는 관련성이 가장 낮은(가장 낮은 점수 매기기) 문서가 있는 절에서만 사용할ORDER BY RANK
수 있습니다.
다음은 사용 중인 각 함수의 몇 가지 예입니다.
FullTextContains
이 예제에서는 "bike" 키워드가 속성 c.text
에 포함된 처음 10개의 결과를 가져오려고 합니다.
SELECT TOP 10 *
FROM c
WHERE FullTextContains(c.text, "bicycle")
FullTextContainsAll
이 예제에서는 "red" 및 "bike" 키워드가 속성 c.text
에 포함된 처음 10개의 결과를 가져오려고 합니다.
SELECT TOP 10 *
FROM c
WHERE FullTextContainsAll(c.text, "red", "bicycle")
FullTextContainsAny
이 예제에서는 키워드 "red"와 "bike" 또는 "skateboard"가 속성 c.text
에 포함된 처음 10개의 결과를 가져오려고 합니다.
SELECT TOP 10 *
FROM c
WHERE FullTextContains(c.text, "red") AND FullTextContainsAny(c.text, "bicycle", "skateboard")
FullTextScore
이 예제에서는 "mountain" 및 "bike"가 포함되고 관련성 순서에 따라 정렬되는 처음 10개의 결과를 가져오려고 합니다. 즉, 이러한 용어가 더 자주 있는 문서는 목록에 더 많이 표시되어야 합니다.
SELECT TOP 10 *
FROM c
ORDER BY RANK FullTextScore(c.text, ["bicycle", "mountain"])
Important
FullTextScore는 절에서 ORDER BY RANK
만 사용할 수 있으며 문이나 절에는 SELECT
WHERE
프로젝토리되지 않습니다.