Atlas Search
이 페이지의 내용
개요
이 가이드에서는 Search
빌더를 사용하여 MongoDB .NET/C# 드라이버로 $search
집계 파이프라인 단계를 빌드하는 방법에 대해 설명합니다.
$search
파이프라인 단계에 대해 자세히 알아보려면 $search를 참조하세요.
참고
Atlas for MongoDB v4.2 이상에서만 사용 가능
$search
집계 파이프라인 연산자는 Atlas Search 인덱스가 적용되고 MongoDB v4.2 이상을 실행하는 MongoDB Atlas 클러스터에서 호스팅되는 컬렉션에만 사용할 수 있습니다. 이 연산자의 필수 설정 및 기능에 대한 자세한 내용은 Atlas Search 설명서를 참조하세요.
이 가이드의 예에서는 guitars
컬렉션의 다음 문서를 사용합니다.
{ "_id": 1, "make": "Fender", "description": "Classic guitars known for their versatility.", "establishedYear": 1946, "in_stock": true, "rating": 9 } { "_id": 2, "make": "Gibson", "description": "Classic guitars known for their rich, full tones.", "establishedYear": 1902, "in_stock": true, "rating": 8 } { "_id": 3, "make": "PRS", "description": "High-end guitars known for their quality.", "establishedYear": 1985, "in_stock": true, "rating": 9 } { "_id": 4, "make": "Kiesel", "description": "Quality guitars made only for custom orders.", "establishedYear": 2015, "in_stock": false } { "_id": 5, "make": "Ibanez", "description": "Well-crafted guitars used by many professional guitarists.", "establishedYear": 1957, "in_stock": true, "rating": 7 } { "_id": 6, "make": "Strandberg", "description": "Modern guitars known for their headless models.", "establishedYear": 1982, "in_stock": false }
다음 Guitar
클래스는 이 컬렉션의 문서를 모델링합니다.
public class Guitar { public int Id { get; set; } public string Make { get; set; } public List<string> Models { get; set; } public int EstablishedYear { get; set; } [ ] public bool InStock { get; set; } public int? Rating { get; set; } }
참고
guitars
컬렉션의 문서는 카멜 케이스 명명 규칙을 사용합니다. 이 가이드의 예시에서는 ConventionPack
사용하여 컬렉션의 필드를 파스칼식 대/소문자로 역직렬화하고 Guitar
클래스의 속성에 매핑합니다.
사용자 지정 직렬화에 대해 자세히 알아보려면 사용자 지정 직렬화를 참조하세요.
Atlas Search 인덱스 만들기
Atlas 컬렉션에서 검색을 수행하려면 먼저 컬렉션에 Atlas Search 인덱스를 만들어야 합니다. Atlas Search 인덱스는 데이터를 검색 가능한 형식으로 분류하는 데이터 구조입니다.
Atlas Search 인덱스를 만드는 방법에 대한 자세한 내용은 Atlas 가이드에서 Atlas Search 인덱스 만들기를 참조하세요.
Atlas Search 연산자
Search
클래스에는 $search
작업을 수행하는 데 사용할 수 있는 메서드가 포함되어 있습니다. 사용 가능한 $search
연산자의 전체 목록은 연산자 및 수집기 Atlas 가이드를 참조하세요.
자동 완성 기능
불완전한 입력 문자열에서 일련의 문자가 포함된 단어나 구문을 검색하려면 Autocomplete()
메서드를 사용합니다.
다음 예에서는 make
필드의 'Gib' 문자열을 사용하여 guitars
컬렉션에서 자동 완성 검색을 수행합니다.
var result = guitarsCollection.Aggregate() .Search(Builders<Guitar>.Search.Autocomplete(g => g.Make, "Gib"), indexName: "guitarmakes") .ToList();
참고
검색하려는 필드가 검색 인덱스로 인덱싱된 경우 인덱스 이름을 Autocomplete
호출에 전달해야 합니다. 검색 인덱스가 존재하지 않으면 기본값 인덱스가 사용됩니다.
이 검색을 수행하면 다음 문서가 반환됩니다.
{ "_id" : 2, "make" : "Gibson", "description" : "Classic guitars known for their rich, full tones.", "establishedYear" : 1902, "in_stock" : true, "rating" : 8 }
autocomplete
연산자에 대해 자세히 알아보려면 Atlas 가이드에서 autocomplete를 참조하세요.
복합
두 개 이상의 연산자를 하나의 검색으로 결합하려면 Compound()
메서드를 사용합니다.
다음 예에서는 guitars
컬렉션에서 아래의 기준과 모두 일치하는 문서를 검색합니다.
문서에
rating
필드가 있음in_stock
필드가false
가 아님establishedYear
필드의 값이 1940보다 큼
var result = guitarsCollection.Aggregate() .Search(Builders<Guitar>.Search.Compound() .Must(Builders<Guitar>.Search.Exists(g => g.Rating)) .MustNot(Builders<Guitar>.Search.Equals(g => g.InStock, false)) .Must(Builders<Guitar>.Search.Range(g => g.EstablishedYear, SearchRangeBuilder.Gt(1940)))) .ToList();
이 검색을 수행하면 다음 문서가 반환됩니다.
{ "_id" : 1, "make" : "Fender", "description" : "...", "establishedYear" : 1946, "in_stock" : true, "rating" : 9 } { "_id" : 3, "make" : "PRS", "description" : "...", "establishedYear" : 1985, "in_stock" : true, "rating" : 9 } { "_id" : 5, "make" : "Ibanez", "description" : "...", "establishedYear" : 1957, "in_stock" : true, "rating" : 7 }
compound
연산자에 대해 자세히 알아보려면 Atlas 가이드에서 compound를 참조하세요.
embeddedDocument
EmbeddedDocument()
방법을 사용하여 필드의 배열 값 내에 있는 문서에 대한 검색 작업을 수행합니다.
참고
내장된 문서에서 Atlas Search를 사용하려면 배열 필드에 embeddedDocument
인덱스를 생성해야 합니다.
embeddedDocument
인덱스를 정의하는 방법을 알아보려면 Atlas 설명서에서 embeddedDocument 유형에 대한 인덱스 정의를 참조하세요.
guitars
컬렉션의 일부 문서에 제품 세부 정보 객체 배열을 포함하는 productDetails
필드가 추가되었다고 가정해 보겠습니다.
{ "_id": 1, "make": "Fender", "description": "...", "establishedYear": 1946, "in_stock": true, "rating": 9, "productDetails": [{"product_id": 1234, "serial": "YZ5678"}] } { "_id": 2, "make": "Gibson", "description": "...", "establishedYear": 1902, "in_stock": true, "rating": 8 } { "_id": 3, "make": "PRS", "description": "...", "establishedYear": 1985, "in_stock": true, "rating": 9, "productDetails": [{"product_id": 9870, "serial": "AB5555"}] } { "_id": 4, "make": "Kiesel", "description": "...", "establishedYear": 2015, "in_stock": false } { "_id": 5, "make": "Ibanez", "description": "...", "establishedYear": 1957, "in_stock": true, "rating": 7, "productDetails": [{"product_id": 5432, "serial": "ZZ1234"}] } { "_id": 6, "make": "Strandberg", "description": "...", "establishedYear": 1982, "in_stock": false }
productDetails
필드에 embeddedDocument
인덱스를 생성한 후 해당 필드의 문서에 대해 Atlas Search 작업을 수행할 수 있습니다. 다음 예시에서는 productDetails
배열 필드에서 텍스트 검색을 수행하고 serial
필드 값이 "YZ5678"
인 문서를 반환합니다.
var result = guitarsCollection.Aggregate() .Search(Builders<Guitar>.Search.EmbeddedDocument( g => g.ProductDetails, Builders<ProductDetails>.Search.Text(p => p.Serial, "YZ5678") )).ToList(); return result;
이 검색을 수행하면 다음 문서가 반환됩니다.
{ "_id" : 1, "make" : "Fender", "description" : "Classic guitars known for their versatility.", "establishedYear" : 1946, "in_stock" : true, "rating" : 9, "productDetails" : [{ "product_id" : 1234, "serial" : "YZ5678" }] }
embeddedDocument
연산자에 대해 자세히 알아보려면 Atlas 가이드에서 embeddedDocument 를 참조하세요.
Equals
필드가 지정된 값과 일치하는지 확인하려면 Equals()
메서드를 사용합니다.
다음 예에서는 guitars
컬렉션에서 in_stock
필드 값이 true
인 모든 문서를 검색합니다.
var result = guitarsCollection.Aggregate() .Search(Builders<Guitar>.Search.Equals(g => g.InStock, true)) .ToList();
이 검색을 수행하면 다음 문서가 반환됩니다.
{ "_id" : 1, "make" : "Fender", "description" : "...", "establishedYear" : 1946, "in_stock" : true, "rating" : 9 } { "_id" : 2, "make" : "Gibson", "description" : "...", "establishedYear" : 1902, "in_stock" : true, "rating" : 8 } { "_id" : 3, "make" : "PRS", "description" : "...", "establishedYear" : 1985, "in_stock" : true, "rating" : 9 } { "_id" : 5, "make" : "Ibanez", "description" : "...", "establishedYear" : 1957, "in_stock" : true, "rating" : 7 }
equals
연산자에 대해 자세히 알아보려면 Atlas 가이드에서 equals를 참조하세요.
Exists
지정된 인덱스 필드 이름이 있는 문서를 검색하려면 Exists()
메서드를 사용합니다. 지정된 필드가 존재하지만 인덱스되지 않은 경우 문서는 결과 집합에 포함되지 않습니다.
다음 예에서는 guitars
컬렉션에서 rating
필드가 존재하는 문서를 검색합니다.
var result = guitarsCollection.Aggregate() .Search(Builders<Guitar>.Search.Exists(g => g.Rating)) .ToList();
이 검색을 수행하면 다음 문서가 반환됩니다.
{ "_id" : 1, "make" : "Fender", "description" : "...", "establishedYear" : 1946, "in_stock" : true, "rating" : 9 } { "_id" : 2, "make" : "Gibson", "description" : "...", "establishedYear" : 1902, "in_stock" : true, "rating" : 8 } { "_id" : 3, "make" : "PRS", "description" : "...", "establishedYear" : 1985, "in_stock" : true, "rating" : 9 } { "_id" : 5, "make" : "Ibanez", "description" : "...", "establishedYear" : 1957, "in_stock" : true, "rating" : 7 }
exists
연산자에 대해 자세히 알아보려면 Atlas 가이드에서 exists를 참조하세요.
GeoShape
특정 도형과 관련된 문서를 검색하려면 GeoShape()
메서드를 사용합니다. 검색할 좌표를 지정할 때에는 경도를 먼저 지정하고 위도를 지정해야 합니다. 경도 값 범위는 -180
~ 180
(두 값 모두 포함)입니다. 위도 값범위는 -90
~ 90
(두 값 모두 포함)입니다.
참고
Atlas Search에서는 다음을 지원하지 않습니다.
기본값이 좌표 기준계(CRS)
평면형 XY 좌표계(2차원)
좌표쌍 점 표기법(pointFieldName: [12, 34])
guitars
컬렉션의 일부 문서에 in_stock_location
필드가 추가되었다고 가정해 보겠습니다. 이제 컬렉션의 변경된 문서는 다음과 같습니다.
{ "_id": 1, "make": "Fender", "description": "...", "establishedYear": 1946, "in_stock": true, "in_stock_location": { "type": "Point", "coordinates": [ -73.93615, 40.69791 ]}, "rating": 9 } { "_id": 2, "make": "Gibson", "description": "...", "establishedYear": 1902, "in_stock": true, "in_stock_location": { "type": "Point", "coordinates": [ 47.6062, 122.321 ]}, "rating": 8 }
다음 예에서는 in_stock_location
필드의 좌표가 지정된 다각형과 교차하는 모든 문서를 검색합니다.
GeoJsonPolygon<GeoJson2DGeographicCoordinates> searchArea = new(new(new(new GeoJson2DGeographicCoordinates[] { new(-72.93615, 41.69791), new(-72.93615, 40.59791), new(-74.93615, 40.59791), new(-74.93615, 41.69791), new(-72.93615, 41.69791), }))); var result = guitarsCollection.Aggregate() .Search(Builders<Guitar>.Search.GeoShape(g => g.InStockLocation, GeoShapeRelation.Intersects, searchArea)) .ToList();
이 검색을 수행하면 다음 문서가 반환됩니다.
{ "_id" : 1, "make" : "Fender", "description" : "...", "establishedYear" : 1946, "in_stock" : true, "in_stock_location" : { "type" : "Point", "coordinates" : ["-73.93615", "40.69791"] }, "rating" : 9 }
geoShape
연산자에 대해 자세히 알아보려면 Atlas 가이드에서 geoShape을 참조하세요.
GeoWithin
GeoWithin()
메서드를 사용하여 지정된 GeoJSON 필드의 좌표가 지정된 도형 내에 속하는 문서를 검색합니다. 다음 범위 내에 있는 점을 검색할 수 있습니다.
원
경계 박스
다각형
검색할 좌표를 지정할 때에는 경도를 먼저 지정하고 위도를 지정해야 합니다. 경도 값 범위는 -180
~ 180
(두 값 모두 포함)입니다. 위도 값 범위는 -90
~ 90
(두 값 모두 포함)입니다.
참고
Atlas Search에서는 다음을 지원하지 않습니다.
기본값이 좌표 기준계(CRS)
평면형 XY 좌표계(2차원)
좌표쌍 점 표기법(pointFieldName: [12, 34])
guitars
컬렉션의 일부 문서에 in_stock_location
필드가 추가되었다고 가정해 보겠습니다. 이제 컬렉션의 변경된 문서는 다음과 같습니다.
{ "_id": 1, "make": "Fender", "description": "...", "establishedYear": 1946, "in_stock": true, "in_stock_location": { "type": "Point", "coordinates": [ -73.93615, 40.69791 ]}, "rating": 9 } { "_id": 2, "make": "Gibson", "description": "...", "establishedYear": 1902, "in_stock": true, "in_stock_location": { "type": "Point", "coordinates": [ 47.6062, 122.321 ]}, "rating": 8 }
다음 예에서는 in_stock_location
필드의 좌표가 지정된 다각형 내에 속하는 모든 문서를 검색합니다.
GeoJsonPolygon<GeoJson2DGeographicCoordinates> searchArea = new(new(new(new GeoJson2DGeographicCoordinates[] { new(-74.3994140625, 40.5305017757), new(-74.7290039063, 40.5805846641), new(-74.7729492188, 40.9467136651), new(-74.0698242188, 41.1290213475), new(-73.65234375, 40.9964840144), new(-72.6416015625, 40.9467136651), new(-72.3559570313, 40.7971774152), new(-74.3994140625, 40.5305017757), }))); var result = guitarsCollection.Aggregate() .Search(Builders<Guitar>.Search.GeoWithin(g => g.InStockLocation, searchArea)) .ToList();
이 검색을 수행하면 다음 문서가 반환됩니다.
{ "_id" : 1, "make" : "Fender", "description" : "Classic guitars known for their versatility.", "establishedYear" : 1946, "in_stock" : true, "in_stock_location" : { "type" : "Point", "coordinates" : ["-73.93615", "40.69791"] }, "rating" : 9 }
geoWithin
연산자에 대해 자세히 알아보려면 Atlas 가이드에서 geoWithin을 참조하세요.
인
지정된 값 목록과 일치하는 필드 값이 있는 문서를 검색 하려면 In()
메서드를 사용합니다.
다음 예시 에서는 guitars
컬렉션 에서 make
필드 값이 "Fender"
또는 "Gibson"
인 문서를 검색합니다.
var result = guitarsCollection.Aggregate() .Search(Builders<Guitar>.Search.In(g => g.Make, ["Fender", "Gibson"])) .ToList();
이 검색을 수행하면 다음 문서가 반환됩니다.
{ "_id": 1, "make": "Fender", "description": "...", "establishedYear": 1946, "in_stock": true, "rating": 9 } { "_id": 2, "make": "Gibson", "description": "...", "establishedYear": 1902, "in_stock": true, "rating": 8 }
유사한 콘텐츠 더 보기
입력 문서와 유사한 문서를 검색하려면 MoreLikeThis()
메서드를 사용합니다.
다음 예에서는 guitars
컬렉션에서 Description
필드의 값이 'high quality'인 객체와 유사한 문서를 검색합니다.
var searchDocument = new GuitarSearch() { Description = "high quality", }; var result = guitarsCollection.Aggregate() .Search(Builders<Guitar>.Search.MoreLikeThis(searchDocument)) .ToList();
이 검색을 수행하면 다음 문서가 반환됩니다.
{ "_id" : 3, "make" : "PRS", "description" : "High-end guitars known for their quality.", "establishedYear" : 1985, "in_stock" : true, "rating" : 9 } { "_id" : 4, "make" : "Kiesel", "description" : "Quality guitars made only for custom orders.", "establishedYear" : 2015, "in_stock" : false, "rating" : null }
moreLikeThis
연산자에 대해 자세히 알아보려면 Atlas 가이드에서 moreLikeThis를 참조하세요.
Near
지정된 필드가 지정된 값에 가까운 문서를 검색하려면 Near()
메서드를 사용합니다. 다음에서 검색을 수행할 수 있습니다.
숫자 필드
날짜 필드
지리적 점
다음 예에서는 guitars
컬렉션에서 rating
필드의 값이 9
에 가까운 문서를 검색합니다. 값이 숫자 9
에 얼마나 가까운지에 따라 문서가 순서대로 반환됩니다.
var result = guitarsCollection.Aggregate() .Search(Builders<Guitar>.Search.Near(g => g.Rating, 9, 1)) .ToList();
이 검색을 수행하면 다음 문서가 반환됩니다.
{ "_id" : 1, "make" : "Fender", "description" : "...", "establishedYear" : 1946, "in_stock" : true, "rating" : 9 } { "_id" : 3, "make" : "PRS", "description" : "...", "establishedYear" : 1985, "in_stock" : true, "rating" : 9 } { "_id" : 2, "make" : "Gibson", "description" : "...", "establishedYear" : 1902, "in_stock" : true, "rating" : 8 } { "_id" : 5, "make" : "Ibanez", "description" : "...", "establishedYear" : 1957, "in_stock" : true, "rating" : 7 }
near
연산자에 대해 자세히 알아보려면 Atlas 가이드에서 near를 참조하세요.
Phrase
지정된 필드에 입력 문자열이 포함된 문서를 검색하려면 Phrase()
메서드를 사용합니다.
다음 예에서는 guitars
컬렉션에서 description
필드에 'classic guitars'라는 구문이 포함된 문서를 검색합니다.
var result = guitarsCollection.Aggregate() .Search(Builders<Guitar>.Search.Phrase(g => g.Description, "classic guitars")) .ToList();
이 검색을 수행하면 다음 문서가 반환됩니다.
{ "_id" : 1, "make" : "Fender", "description" : "Classic guitars known for their versatility.", "establishedYear" : 1946, "in_stock" : true, "rating" : 9 } { "_id" : 2, "make" : "Gibson", "description" : "Classic guitars known for their rich, full tones.", "establishedYear" : 1902, "in_stock" : true, "rating" : 8 }
다음과 같이 컬렉션에서 여러 개의 별도 구문과 일치하는 문서를 검색할 수도 있습니다.
var result = guitarsCollection.Aggregate() .Search(Builders<Guitar>.Search.Phrase(g => g.Description, new List<string>() { "classic guitars", "quality guitars" })) .ToList();
이 검색을 수행하면 다음 문서가 반환됩니다.
{ "_id" : 1, "make" : "Fender", "description" : "Classic guitars known for their versatility.", "establishedYear" : 1946, "in_stock" : true, "rating" : 9 } { "_id" : 4, "make" : "Kiesel", "description" : "Quality guitars made only for custom orders.", "establishedYear" : 2015, "in_stock" : false, "rating" : null } { "_id" : 2, "make" : "Gibson", "description" : "Classic guitars known for their rich, full tones.", "establishedYear" : 1902, "in_stock" : true, "rating" : 8 }
phrase
연산자에 대해 자세히 알아보려면 Atlas 가이드에서 phrase를 참조하세요.
QueryString
다음 연산자 및 구분자와 함께 문자열을 사용하여 문서를 검색하려면 QueryString()
메서드를 사용합니다.
AND
OR
NOT
()
다음 예에서는 guitars
컬렉션에서 description
필드의 값이 다음 각 기준과 일치하는 문서를 검색합니다.
문자열 'classic' 또는 문자열 'quality' 포함
'custom' 문자열을 포함하지 않음
var result = guitarsCollection.Aggregate() .Search(Builders<Guitar>.Search.QueryString(g => g.Description, "(classic OR quality) AND NOT custom")) .ToList();
이 검색을 수행하면 다음 문서가 반환됩니다.
{ "_id" : 1, "make" : "Fender", "description" : "Classic guitars known for their versatility.", "establishedYear" : 1946, "in_stock" : true, "rating" : 9 } { "_id" : 3, "make" : "PRS", "description" : "High-end guitars known for their quality.", "establishedYear" : 1985, "in_stock" : true, "rating" : 9 } { "_id" : 2, "make" : "Gibson", "description" : "Classic guitars known for their rich, full tones.", "establishedYear" : 1902, "in_stock" : true, "rating" : 8 }
queryString
연산자에 대해 자세히 알아보려면 Atlas 가이드에서 queryString을 참조하세요.
범위
지정된 필드의 값이 지정된 숫자 또는 날짜 범위 내에 속하는 문서를 검색하려면 Range()
메서드를 사용합니다.
다음 예에서는 guitars
컬렉션에서 establishedYear
값이 1980보다 크고 2020보다 작은 모든 문서를 검색합니다.
var result = guitarsCollection.Aggregate() .Search(Builders<Guitar>.Search.Range(g => g.EstablishedYear, SearchRangeBuilder.Gt(1980).Lt(2020))) .ToList();
이 검색을 수행하면 다음 결과가 반환됩니다.
{ "_id" : 3, "make" : "PRS", "description" : "High-end guitars known for their quality.", "establishedYear" : 1985, "in_stock" : true, "rating" : 9 } { "_id" : 4, "make" : "Kiesel", "description" : "Quality guitars made only for custom orders.", "establishedYear" : 2015, "in_stock" : false, "rating" : null } { "_id" : 6, "make" : "Strandberg", "description" : "Modern guitars known for their headless models.", "establishedYear" : 1982, "in_stock" : false, "rating" : null }
range
연산자에 대해 자세히 알아보려면 Atlas 가이드에서 range를 참조하세요.
정규식
정규 표현식을 사용하여 문서를 검색하려면 Regex()
메서드를 사용합니다.
다음 예에서는 guitars
컬렉션에서 make
필드의 값에 정확히 6개의 문자가 포함된 문서를 검색합니다.
var regex = "[A-Za-z]{6}"; var result = guitarsCollection.Aggregate() .Search(Builders<Guitar>.Search.Regex(g => g.Make, regex)) .ToList();
이 검색을 수행하면 다음 결과가 반환됩니다.
{ "_id" : 1, "make" : "Fender", "description" : "Classic guitars known for their versatility.", "establishedYear" : 1946, "in_stock" : true, "rating" : 9 } { "_id" : 2, "make" : "Gibson", "description" : "Classic guitars known for their rich, full tones.", "establishedYear" : 1902, "in_stock" : true, "rating" : 8 } { "_id" : 4, "make" : "Kiesel", "description" : "Quality guitars made only for custom orders.", "establishedYear" : 2015, "in_stock" : false, "rating" : null } { "_id" : 5, "make" : "Ibanez", "description" : "Well-crafted guitars used by many professional guitarists.", "establishedYear" : 1957, "in_stock" : true, "rating" : 7 }
참고
기본적으로 regex
연산자는 분석된 필드에서 실행할 수 없습니다. 다음과 같이 allowAnalyzedField
옵션을 true로 설정하여 분석된 필드에서 실행되도록 할 수 있습니다.
var result = guitarsCollection.Aggregate() .Search(Builders<Guitar>.Search.Regex(g => g.Make, regex, true)) .ToList();
allowAnalyzedField
옵션을 true로 설정하면 예기치 않은 검색 결과가 나올 수 있습니다. 자세히 알아보려면 regex 동작을 참조하세요.
regex
연산자에 대해 자세히 알아보려면 Atlas 가이드에서 regex를 참조하세요.
Span
필드 리전 내에서 텍스트 검색 일치 항목을 검색하려면 Span()
메서드를 사용합니다. 이 메서드를 사용하면 지정된 정밀도까지 서로 가까이 있는 문자열을 찾을 수 있습니다.
참고
쿼리가 위치 정보를 추적해야 하기 때문에 span
연산자는 다른 연산자보다 계산 집약적입니다.
다음 예에서는 guitars
컬렉션에서 description
필드 값에 서로 한 단어 내에 'guitars' 및 'quality' 문자열이 포함된 문서를 검색합니다.
var searchTerms = new[] { Builders<Guitar>.SearchSpan.Term(g => g.Description, "guitars"), Builders<Guitar>.SearchSpan.Term(g => g.Description, "quality") }; var result = guitarsCollection.Aggregate() .Search(Builders<Guitar>.Search.Span(Builders<Guitar>.SearchSpan.Near(searchTerms, 1))) .ToList();
이 검색을 수행하면 다음 문서가 반환됩니다.
{ "_id" : 4, "make" : "Kiesel", "description" : "Quality guitars made only for custom orders.", "establishedYear" : 2015, "in_stock" : false, "rating" : null }
_id: 3
인 문서에 'guitars' 및 'quality'라는 문자열이 포함되어 있지만 이 문자열은 두 단어 이상으로 구분되어 있으므로 검색 결과에서 이 문서가 생략됩니다.
span
연산자에 대해 자세히 알아보려면 Atlas 가이드에서 span을 참조하세요.
Text
Text()
메서드를 사용하여 문서에서 지정된 문자열 또는 문자열 배열을 검색합니다. 한 문자열에 여러 개의 용어가 있는 경우 Atlas Search는 문자열의 각 용어에 대해 개별적으로 일치하는 항목을 찾습니다.
다음 예에서는 guitars
컬렉션에서 description
필드 값에 'used by professionals' 문자열이 포함된 문서를 검색합니다.
var result = guitarsCollection.Aggregate() .Search(Builders<Guitar>.Search.Text(g => g.Description, "used by professional")) .ToList();
이 검색을 수행하면 다음 문서가 반환됩니다.
{ "_id" : 5, "make" : "Ibanez", "description" : "Well-crafted guitars used by many professional guitarists.", "establishedYear" : 1957, "in_stock" : true, "rating" : 7 }
팁
검색 문자열에 여러 용어가 포함된 경우 이 메서드는 문자열에 있는 각 용어에 대해 개별적으로 일치하는 항목도 찾습니다.
text
연산자에 대해 자세히 알아보려면 Atlas 가이드에서 text를 참조하세요.
와일드카드
검색 문자열에서 모든 문자와 일치할 수 있는 특수 문자를 사용하여 문서를 검색하려면 Wildcard()
메서드를 사용합니다. 검색에 사용할 수 있는 문자는 다음과 같습니다.
캐릭터 | 설명 |
---|---|
| 모든 단일 문자와 일치 |
| 0개 이상의 문자와 일치 |
| 이스케이프 문자 |
다음 예에서는 make
필드의 값에 'Strand'라는 문자열과 그 뒤에 다른 문자가 포함되어 있는 문서를 검색합니다.
var result = guitarsCollection.Aggregate() .Search(Builders<Guitar>.Search.Wildcard(g => g.Make, "Strand*")) .ToList();
이 검색을 수행하면 다음 문서가 반환됩니다.
{ "_id" : 6, "make" : "Strandberg", "description" : "Modern guitars known for their headless models.", "establishedYear" : 1982, "in_stock" : false, "rating" : null }
참고
기본적으로 wildcard
연산자는 분석된 필드에서 실행할 수 없습니다. 다음과 같이 allowAnalyzedField
옵션을 true로 설정하여 분석된 필드에서 실행되도록 할 수 있습니다.
var result = guitarsCollection.Aggregate() .Search(Builders<Guitar>.Search.Wildcard(g => g.Make, "Strand*", true)) .ToList();
allowAnalyzedField
옵션을 true로 설정하면 예기치 않은 검색 결과가 나올 수 있습니다. 자세한 내용은 wildcard 동작을 참조하세요.
wildcard
연산자에 대해 자세히 알아보려면 Atlas 가이드에서 wildcard를 참조하세요.