MongoDB.local SF, Jan 15: See the speaker lineup & ship your AI vision faster. Use WEB50 to save 50%
Find out more >
Docs Menu
Docs Home
/

엔터프라이즈 서버를 사용한 고급 검색

MongoDB 자체 관리형 인프라에서 엔터프라이즈 수준의 검색 역량을 갖춘 AI 기반 애플리케이션을 지원합니다.

사용 사례: 인공 지능, 지능형 검색

산업: 소매

제품: Enterprise Server를 사용한 MongoDB Search, Enterprise Server를 사용한 MongoDB Vector Search, MongoDB 엔터프라이즈 Server

클라우드 채택이 가속화되고 있음에도 불구하고, 특히 규제가 심한 산업에서 많은 고객이 자체 관리형 인프라와 온프레미스 배포서버를 선택합니다. 인스턴스, 이 설문조사에 따르면 정부 기관의 93%가 온프레미스 배포서버를 사용하고, IT 업계의 조직 중 91%, 금융 업계의 90%가 그 뒤를 이습니다. 또한, 소규모 소매업체나 지역별 식료품 체인과 같은 많은 SMEs는 클라우드 아키텍처를 채택하는 데 드는 높은 비용이 재정적 장벽이라는 이유로 온프레미스 배포서버를 사용합니다.

자체 관리형 인프라는 유연성, 컴플라이언스 제어 및 데이터 주권을 제공하지만 AI 기반 솔루션을 구현 하려는 조직에는 어려움이 따릅니다. 이러한 과제에는 다음이 포함됩니다.

  • 아키텍처의 복잡성: 회사에서는 벡터 검색 과 같은 고급 검색 기능을 구현하기 위해 별도의 검색 엔진과 벡터 데이터베이스를 결합하는 경우가 많습니다.

  • 운영상의 압박: 팀은 별도의 기술을 동기화하고, 다양한 리소스를 관리하며, 여러 시스템에서 일관적인 워크플로우를 유지하는 데 어려움을 겪을 수 있습니다.

이러한 장애물을 주소 위해 MongoDB MongoDB 엔터프라이즈 Server를 통한 검색 및 벡터 검색을 도입했습니다. 이러한 검색 기능을 활성화 .

  • 모든 인프라에 다음 세대 AI 앱 빌드: 아키텍처의 복잡성을 줄여 AI 기반 솔루션을 더 쉽게 개발할 수 있고 여러 개의 단일 목적 기술이 필요하지 않습니다.

  • 어디에서나 일관적인 경험을 누리세요: 애플리케이션이 연결된 위치에 관계없이 동일한 MQL API를 사용하세요. 이를 통해 프로덕션 환경과 개발 환경 간에 이동할 때 마찰이 줄어들고 유연성이 제공됩니다.

이 솔루션은 MongoDB Search 및 Vector Search를 사용하여 사용자가 전체 텍스트 검색 또는 벡터 임베딩을 기반 시맨틱 검색 사용하여 식료품 저장 에서 제품을 검색할 수 있도록 도와주는 데모를 제공합니다. 여기에는 MongoDB Enterprise 서버 및 검색 노드가 있는 환경에서 데모를 실행하기 위한 전제 조건, 아키텍처 요구 사항, 단계별 지침이 포함되어 있습니다.

검색하는 역량이 있는 식료품 저장 의 랜딩 페이지

그림 1. 데모의 랜딩 페이지

Enterprise Server에서 고급 검색 기능을 사용하려면 Kubernetes 클러스터 에 MongoDB Search 및 벡터 검색 노드를 배포 해야 합니다. 이를 통해 벡터 임베딩을 기반 전체 텍스트 및 시맨틱 검색 가능하여 사용자가 설명이나 의미론적 유사성을 기반으로 항목을 찾을 수 있습니다.

기존 데이터베이스 마이그레이션 할 필요가 없습니다. MongoDB 8.0.10 에서 MongoDB Enterprise Edition을 사용하세요 버전 이상( Kubernetes 클러스터 내부 또는 외부) Kubernetes 연산자 이러한 검색 노드를 관리하고 배포서버 위치 에 관계없이 데이터베이스 클러스터 에 안전하게 연결합니다.

요약하면 다음과 같은 접근 방식을 사용하여 MongoDB Search 및 Vector Search를 Enterprise Server와 통합할 수 있습니다.

  1. Kubernetes 내에 배포된 MongoDB Enterprise Edition

  2. Kubernetes 외부에 배포된 MongoDB Enterprise Edition

두 배포서버 아키텍처 모두 Kubernetes 내에 배포된 MongoDB 검색하다 및 벡터 검색 노드가 필요합니다. 다음 섹션에서는 각 접근 방식에 대해 설명합니다.

이 배포서버 옵션은 데모에서 사용된 대로 MongoDB Enterprise 서버 인스턴스와 함께 Kubernetes 클러스터 내에서 직접 MongoDB 검색 및 벡터 검색 노드를 설정합니다. 이 배포서버 작업을 보장하고 모든 구성 요소를 동일한 환경에서 유지 관리하여 관리 간소화합니다. 아래 이미지는 이러한 배포서버 보여줍니다.

MongoDB 및 Voyage AI 사용한 저장 연관 앱 의 시스템 다이어그램

그림 2. Kubernetes 내부의 MongoDB Enterprise 서버

이 솔루션에서 Kubernetes 클러스터 엔터프라이즈 서버, 검색 노드 및 인벤토리 애플리케이션 호스팅합니다. 이 아키텍처는 관리 간소화하고 구성 요소 간의 효율적인 데이터 교환을 보장합니다.

내부 엔터프라이즈 서버 구성으로 검색 노드를 설정하는 방법에 대한 단계별 지침은 MongoDB Enterprise Edition으로 검색 설치 및 사용을 참조하세요.

이 배포서버 옵션은 Kubernetes 클러스터 외부에 배포된 Enterprise Server 복제본 세트 에 연결되는 Kubernetes 내부의 MongoDB Search 및 Vector Search 노드를 구성합니다. Kubernetes 외부의 인프라 요구 사항이나 운영 환경 설정이 있는 경우 이 접근 방식을 사용할 수 있습니다. 아래 이미지는 이러한 배포서버 보여줍니다.

MongoDB 및 Voyage AI 사용한 저장 연관 앱 의 시스템 다이어그램

그림 3. Kubernetes 외부의 MongoDB Enterprise 서버

이 구성을 사용하면 기존 엔터프라이즈 서버 인프라를 변경하지 않고도 고급 검색하다 기능을 통합할 수 있습니다.

외부 MongoDB Enterprise Edition구성을 사용하여 MongoDB 검색 및 벡터 검색 노드를 설치하는 방법에 대한 단계별 지침은 외부 MongoDB Enterprise Edition과 함께 MongoDB 검색 및 벡터 검색 설치 및 사용을 참조하세요.

아래 단계에 따라 솔루션을 설정하다 하고 실행 .

1

MongoDB Enterprise Edition 설치 및 검색하다 사용 튜토리얼 의 단계를 따라 MongoDB 검색하다 및 벡터 검색 노드를 배포하세요.

2

필요한 데이터 덤프 및 애플리케이션 구성을 위해 데모 리포지토리다운로드.

git clone https://github.com/mongodb-industry-solutions/retail-unified-commerce

덤프 파일 디렉토리 로 고 (Go) .

cd ./retail-unified-commerce/docs/setup
3

샘플 식료품 저장 데이터를 MongoDB deployment 로 가져옵니다.

다음 명령을 실행하여 연결 문자열 조회 . <SECRET_NAME> 을 배포서버 중에 생성된 적절한 Kubernetes 시크릿 이름으로 바꿉니다.

kubectl get secret -n ${MDB_NS} <SECRET_NAME> -o yaml

이 명령은 시크릿 메타데이터 와 인코딩된 콘텐츠를 출력합니다. connectionStringStandard 값을 복사하고 다음 명령을 실행하여 연결 문자열 가져옵니다.

echo "<Base64EncodedConnectionString>" | base64 --decode

다음 명령을 실행하여 collections 덤프 폴더에서 데이터베이스 복원 .

mongorestore --uri "<CONNECTION_STRING>" ./collections
4

연결 문자열 로 mongosh 를 열어 클러스터 에 연결합니다.

mongosh "<CONNECTION_STRING>"
use retail-unified-commerce

다음 명령을 실행하여 MongoDB 검색 인덱스를 생성합니다.

db.products.createSearchIndex("product_atlas_search", {
"mappings": {
"dynamic": false,
"fields": {
"brand": {
"type": "string"
},
"category": {
"type": "string"
},
"inventorySummary": {
"fields": {
"storeObjectId": {
"type": "objectId"
}
},
"type": "document"
},
"productName": {
"type": "string"
},
"subCategory": {
"type": "string"
}
}
}
})

다음 명령을 실행하여 MongoDB 벡터 검색 인덱스 생성합니다.

db.products.createSearchIndex({
name: "product_text_vector_index",
type: "vectorSearch",
definition: {
fields: [
{
type: "vector",
path: "textEmbeddingVector",
numDimensions: 1024,
similarity: "cosine"
},
{
type: "filter",
path: "inventorySummary.storeObjectId"
},
{
type: "filter",
path: "inventorySummary.inStock"
}
]
}
})

다음 명령을 실행하여 두 인덱스들이 모두 올바르게 생성되었는지 확인합니다. 성공적인 하면 명령은 product_atlas_searchproduct_text_vector_index 에 대한 메타데이터 반환합니다.

JSON.stringify(db.runCommand({listSearchIndexes: "products"}), null, 2)

다음 쿼리 사용하여 인덱스를 테스트합니다.

db.products.aggregate([
{
"$search": {
"index": "product_atlas_search",
"compound": {
"should": [
{
"text": {
"query": "Chicken Masala",
"path": ["productName", "brand", "category", "subCategory"],
"fuzzy": { "maxEdits": 2 },
}
}
]
},
}
},
{
$project: {
productName: 1,
score: { $meta: "searchScore" }
}
},
{
$limit: 2
}
])

쿼리 제품 이름과 해당 검색 점수 목록을 반환합니다.

[
{
_id: ObjectId("685bfe2d3d832cf7e1614edc"),
productName: "Chicken Masala",
score: 8.192384719848633,
},
{
_id: ObjectId("685bfe2e3d832cf7e16159fe"),
productName: "Shahi Chicken Masala",
score: 7.7956156730651855,
},
];
5

backend/advanced-search-ms 디렉토리 에 .env 파일 만들고 frontend 디렉토리 에 다른 파일을 만듭니다. 이 디렉토리에서 .env.template 파일 찾을 수 있습니다. 이전에 검색한 연결 문자열 로 자리 표시자를 업데이트합니다.

추가 컨텍스트 및 선택 사항 설정 구성은 GitHub 리포지토리의 README 을(를) 참조하세요.

데모를 로컬로 배포하거나 Kubernetes 에 배포 할 수 있습니다.

다음 코드를 실행합니다.

make build

로컬 호스트에서 선호하는 방법을 사용하여 프론트엔드 및 백엔드 서비스에 액세스할 수 있는지 확인합니다. 그런 다음 http://localhost:3000/product-inventory에서 브라우저를 엽니다.

데모용으로 빌드된 Docker 이미지를 사용하여 Kubernetes 클러스터 내에서 백엔드 와 프론트엔드 실행합니다. 다음 단계를 따르세요.

1. Docker 이미지 빌드 및 푸시

다음 명령을 실행하여 백엔드 및 프론트엔드 이미지를 빌드하고 컨테이너 레지스트리에 푸시합니다.

#Backend
docker build --platform linux/amd64 -t retail-backend:latest ./backend/advanced-search-ms
docker tag retail-backend:latest <YOUR_REGISTRY>/retail-backend:latest
docker push <YOUR_REGISTRY>/retail-backend:latest
#Frontend
docker build --platform linux/amd64 -t retail-frontend:latest ./frontend
docker tag retail-frontend:latest <YOUR_REGISTRY>/retail-frontend:latest
docker push <YOUR_REGISTRY>/retail-frontend:latest

시스템 아키텍처에 따라 --platform linux/amd64 플래그가 필요할 수 있습니다.

2. Kubernetes 시크릿 만들기

retail-unified-commerce/k8s 폴더 내의 retail-secrets.yaml 이라는 이름의 Kubernetes 시크릿 파일 에 민감한 값을 저장합니다. 소스 제어에 실제 자격 증명 커밋 하지 마세요. 다음은 예시 예시입니다.

# retail-unified-commerce/k8s/retail-secrets.yaml
apiVersion: v1
kind: Secret
metadata:
name: retail-secrets
namespace: default
type: Opaque
data:
NEXT_PUBLIC_GOOGLE_MAPS_API_KEY:
VOYAGE_API_KEY:
stringData:
MONGODB_URI: <YOUR_CONNECTION_STRING>
DB_NAME: "retail-unified-commerce"
NEXT_PUBLIC_COLLECTION_PRODUCTS: "products"
NEXT_PUBLIC_COLLECTION_INVENTORY: "inventory"
NEXT_PUBLIC_COLLECTION_STORES: "stores"
SEARCH_INDEX: "product_atlas_search"
NEXT_PUBLIC_BACKEND_ENDPOINT: "<YOUR_BACKEND_ENDPOINT>"
NEXT_PUBLIC_ENABLE_ATLAS_SEARCH: "true"
NEXT_PUBLIC_ENABLE_VECTOR_SEARCH: "true"
NEXT_PUBLIC_ENABLE_HYBRID_SEARCH: "true"
NEXT_PUBLIC_ENABLE_FULLTEXT_SEARCH: "true"
MONGODB_DATABASE: "retail-unified-commerce"
PRODUCTS_COLLECTION: "products"
SEARCH_TEXT_INDEX: "product_atlas_search"
SEARCH_VECTOR_INDEX: "product_text_vector_index"
NEXT_PUBLIC_SEARCH_META_INDEX: "product_atlas_search_meta"
EMBEDDING_FIELD_NAME: "textEmbeddingVector"
VOYAGE_API_URL: "https://api.voyageai.com/v1"
VOYAGE_MODEL: "voyage-3-large"

클러스터 에 시크릿을 적용합니다.

kubectl apply -f k8s/retail-secrets.yaml

3. 백엔드 및 프론트엔드 배포

backend-deployment.yaml 템플릿을 /k8s 디렉토리 에 배치합니다.

# retail-unified-commerce/k8s/backend-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: retail-backend
spec:
replicas: 2
selector:
matchLabels:
app: retail-backend
template:
metadata:
labels:
app: retail-backend
spec:
containers:
- name: backend
image: <YOUR_REGISTRY>/retail-backend:latest
ports:
- containerPort: 8000
envFrom:
- secretRef:
name: retail-secrets
---
apiVersion: v1
kind: Service
metadata:
name: retail-backend-service
spec:
type: LoadBalancer
selector:
app: retail-backend
ports:
- port: 80
targetPort: 8000

frontend-deployment.yaml 템플릿을 /k8s 디렉토리 에 배치합니다.

# retail-unified-commerce/k8s/frontend-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: retail-frontend
spec:
replicas: 2
selector:
matchLabels:
app: retail-frontend
template:
metadata:
labels:
app: retail-frontend
spec:
containers:
- name: frontend
image: <YOUR_REGISTRY>/retail-frontend:latest
ports:
- containerPort: 3000
envFrom:
- secretRef:
name: retail-secrets
---
apiVersion: v1
kind: Service
metadata:
name: retail-frontend-service
spec:
type: LoadBalancer
selector:
app: retail-frontend
ports:
- port: 80
targetPort: 3000

Kubernetes 배포서버를 적용합니다.

kubectl apply -f k8s/backend-deployment.yaml
kubectl apply -f k8s/frontend-deployment.yaml

배포서버를 확인합니다:

kubectl get pods -o wide
kubectl get svc -o wide

프론트엔드 및 백엔드 서비스에 EXTERNAL-IP 이(가) 할당될 때까지 기다립니다.

4. 데모 액세스

프론트엔드 서비스에 대한 외부 IP 표시되면 다음 링크를 사용하여 엽니다: http://<EXTERNAL-IP>/product-inventory.

6

MongoDB 검색 옵션을 선택하고 제품 이름과 정확히 일치하지 않는 쿼리를 입력합니다. 예시 들어,'greentea face 마스크'와 같은 텀 나 'cukie'와 같은 오타를 사용합니다. 이러한 쿼리는 입력이 정확하지 않을 때 관련 결과를 반환하는 시스템 기능 보여줍니다.

검색 역량에 대한 결과

그림 4. 그린티 마스크에 대한 검색 결과입니다.

의미론적 이해를 경험하려면 MongoDB 벡터 검색 옵션으로 전환하세요. 10대 소녀를 위한 선물이나 고단백 향이 나는 음식과 같이 설명적 또는 의도 기반 쿼리를 사용합니다. 시스템은 사용된 단어뿐만 아니라 쿼리 의 의미에 맞는 결과를 표시합니다.

10대 소녀를 위한 선물에 대한 벡터 검색 결과

그림 5. 10대 소녀를 위한 선물에 대한 벡터 검색 결과

두 결과 모두 각 제품 카드의 왼쪽 상단에 표시된 검색 점수를 볼 수 있습니다. 이 점수는 쿼리 에 대한 결과의 관련성을 나타냅니다.

  • 온프레미스 채택은 전략적으로 중요합니다: 온프레미스 배포서버는 데이터 주권과 제어를 우선시하는 산업 및 조직에서 여전히 중요합니다. 이 공개 미리 보기를 통해 조직은 온프레미스 환경에 AI 도입하여 경쟁력을 유지하고 컴플라이언스 요구 사항을 충족할 수 있습니다.

  • 간소화된 기술 스택 AI 채택을 가속화합니다: 엔터프라이즈 서버가 포함된 MongoDB Search 및 Vector Search는 다양한 기술을 통합하고 아키텍처 복잡성을 줄이며 운영 데이터를 마이그레이션하지 않고도 스마트 검색 쿼리를 허용함으로써 강력한 AI 애플리케이션을 활성화.

  • 고급 검색 기능으로 사용자 경험 향상: 전체 텍스트 검색 과 벡터 검색 사용자가 정보를 탐색하고 액세스 방식을 개선하여 다양한 산업 분야에서 더욱 직관적인 경험을 제공합니다.

  • Angie Guemes Estrada, MongoDB

  • 로드리고 릴, MongoDB

  • Prashant Juttukonda, MongoDB

돌아가기

통합 상거래

이 페이지의 내용