NoSQL용 Azure Cosmos DB의 전체 텍스트 검색

이제 NoSQL용 Azure Cosmos DB는 강력한 전체 텍스트 검색 기능을 제공합니다. 기본 전체 텍스트 검색을 위해 외부 검색 서비스가 필요 없이 앱의 네이티브 검색 기능을 향상하도록 설계되었습니다.

전체 텍스트 인덱싱 및 검색에는 형태소 분석, 단어 제거 중지 및 토큰화와 같은 고급 텍스트 처리 기술이 포함되어 있으므로 특수 텍스트 인덱스를 통해 효율적이고 효과적인 텍스트 검색을 사용할 수 있습니다. 전체 텍스트 검색에는 지정된 검색 쿼리에 대한 문서의 관련성을 평가하는 함수가 포함된 전체 텍스트 점수 매기 기도 포함됩니다. BM25 또는 최적 일치 25는 용어 빈도, 역 문서 빈도 및 문서 길이와 같은 요소를 고려하여 문서의 점수를 매기고 순위를 지정합니다. 이렇게 하면 가장 관련성이 높은 문서가 검색 결과 상단에 표시되어 텍스트 검색의 정확도와 유용성이 개선됩니다.

전체 텍스트 검색은 다음을 비롯한 다양한 시나리오에 적합합니다.

  • 전자상거래: 설명, 검토 및 기타 텍스트 특성을 기반으로 제품을 빠르게 찾을 수 있습니다.
  • 콘텐츠 관리: 문서, 블로그, 문서를 효율적으로 검색합니다.
  • 고객 지원: 관련 지원 티켓, FAQ, 기술 자료 문서를 검색합니다.
  • 사용자 콘텐츠: 게시물, 메모 등 사용자가 생성한 콘텐츠를 분석하고 검색합니다.
  • 챗봇용 RAG: 방대한 텍스트 자료에서 관련 정보를 검색하여 챗봇 답변을 개선하고 답변의 정확도와 관련성을 개선합니다.
  • 다중 에이전트 AI 앱: 여러 AI 에이전트가 방대한 양의 텍스트 데이터를 공동으로 검색하고 분석하여 포괄적이고 미묘한 인사이트를 제공할 수 있습니다.
  1. 전체 텍스트 정책 및 전체 텍스트 인덱스로 컨테이너를 구성합니다.
  2. 텍스트 속성을 사용하여 데이터를 삽입합니다.
  3. 전체 텍스트 검색 시스템 함수를 사용하여 데이터에 대해 쿼리를 실행합니다.

전체 텍스트 검색 기능을 사용하려면 먼저 두 가지 정책을 정의해야 합니다.

  • 새 전체 텍스트 쿼리 시스템 함수에 대한 텍스트가 포함된 경로를 정의하는 컨테이너 수준 전체 텍스트 정책입니다.
  • 효율적인 검색을 가능하게 하는 인덱싱 정책에 추가된 전체 텍스트 인덱스입니다.

이러한 정책 없이는 전체 텍스트 검색 쿼리를 실행할 수 있지만 전체 텍스트 인덱스를 활용하지 않으며 RU(요청 단위)를 더 많이 사용하고 실행 시간이 길어질 수 있습니다. 전체 텍스트 컨테이너 및 인덱스 정책을 정의하는 것이 좋습니다.

전체 텍스트 정책

전체 텍스트 검색을 위해 구성하려는 모든 텍스트 속성에 대해, 속성의 path와 텍스트의 language를 모두 선언해야 합니다. 간단한 전체 텍스트 정책은 다음과 같습니다.

{
   "defaultLanguage": "en-US",
   "fullTextPaths": [
       {
           "path": "/text",
           "language": "en-US"
       }
   ]
}

여러 텍스트 경로를 정의하려면 fullTextPaths 배열에 다른 요소를 추가하면 됩니다.

{
   "defaultLanguage": "en-US",
   "fullTextPaths": [
       {
           "path": "/text1",
           "language": "en-US"
       },
       {
           "path": "/text2",
           "language": "en-US"
       }
   ]
}

Important

와일드카드 문자(*, [])는 현재 전체 텍스트 정책 또는 전체 텍스트 인덱스에서 지원되지 않습니다.

다 언어 지원(미리 보기)

다중 언어 지원을 사용하면 영어 이외의 언어로 텍스트를 인덱싱하고 검색할 수 있습니다. 보다 정확한 검색 결과를 위해 언어별 토큰화, 형태소 분석 및 중지 단어 제거를 적용합니다.

Important

다중 언어 지원은 초기 미리 보기 상태이며 모든 Azure 지역에서는 사용할 수 없습니다.

비고

검색 성능과 품질은 영어로 된 전체 텍스트 검색과 다를 수 있습니다. 예를 들어 중지 단어 제거는 현재 영어(en-us)에만 사용할 수 있습니다. 기능은 미리 보기의 진화를 통해 변경될 수 있습니다. 이를 시도하려면 Azure Portal에서 Azure Cosmos DB 리소스의 기능 섹션을 통해 전체 텍스트 검색 기능에 대한 새 기능에 등록해야 합니다.

현재 지원되는 언어는 다음과 같습니다.

  • en-US (영어)
  • de-DE (독일어)
  • es-ES (스페인어)
  • fr-FR (프랑스어)
  • it-IT (이탈리아어)
  • pt-PT (포르투갈어)
  • pt-BR (브라질 포르투갈어)

전체 텍스트 인덱스

모든 전체 텍스트 검색 작업은 전체 텍스트 인덱스를 사용해야 합니다. 전체 텍스트 인덱스는 다음 예제에 따라 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 수 있습니다.

각 함수가 사용된 몇 가지 예는 다음과 같습니다.

전체텍스트포함

이 예제에서는 구 빨간색 자전거 가 속성 c.text에 포함된 처음 10개의 결과를 가져오려고 합니다.

SELECT TOP 10 *
FROM c
WHERE FullTextContains(c.text, "red bicycle")

전체 텍스트 모두 포함

예를 들어, 속성 에 키워드 빨간색c.text가 포함되어 있는 처음 10개의 결과를 얻으려고 합니다. 이때, 두 키워드가 반드시 함께 포함될 필요는 없습니다.

SELECT TOP 10 *
FROM c
WHERE FullTextContainsAll(c.text, "red", "bicycle")

FullTextContainsAny

이 예제에서는 키워드가 빨간색 이고 자전거 또는 스케이트보드 가 속성 c.text에 포함된 처음 10개의 결과를 가져오려고 합니다.

SELECT TOP 10 *
FROM c
WHERE FullTextContains(c.text, "red") AND FullTextContainsAny(c.text, "bicycle", "skateboard")

전체 텍스트 점수

이 예제에서는 자전거 가 포함되고 관련성 순서에 따라 정렬되는 처음 10개의 결과를 가져오려고 합니다. 즉, 해당 용어가 자주 등장하는 문서일수록 목록 상단에 나타나야 합니다.

SELECT TOP 10 *
FROM c
ORDER BY RANK FullTextScore(c.text, "bicycle", "mountain")

Important

FullTextScore는 ORDER BY RANK 절에서만 사용할 수 있으며 SELECT 문이나 WHERE 절에 프로젝션할 수 없습니다.

퍼지 검색은 오타 및 텍스트 변형에 대한 복원력을 향상시킬 수 있습니다. 검색 용어와 문서 텍스트 사이에 허용되는 거리 (편집 횟수)를 지정하여 가까운 일치 항목이 적중으로 간주되도록 할 수 있습니다. 지정할 수 있는 최대 거리는 2(2회 편집)입니다.

비고

유사 항목 검색은 초기 미리 보기 단계에 있습니다. 성능, 품질 및 기능은 미리 보기의 진화를 통해 변경될 수 있습니다. 이를 시도하려면 Azure Portal에서 Azure Cosmos DB 리소스의 기능 섹션을 통해 전체 텍스트 검색 기능에 대한 새 기능에 등록해야 합니다.

다음 예제 쿼리는 텍스트에 빨간색 과 유사한 단어(편집 1개 이내) 및 바이사이클 (편집 2개 이내)이 포함된 문서를 검색합니다.

SELECT TOP 10 *
FROM c
WHERE FullTextContains(c.text, {"term": "red", "distance":1}) AND FullTextContains(c.text, {"term": "bycycle", "distance":2})