From f89a51bb35b8201f20282ba8ce52cff4baee9ee5 Mon Sep 17 00:00:00 2001 From: Michael Morisi Date: Mon, 2 Jun 2025 14:33:54 -0400 Subject: [PATCH 01/10] DOCSP-49085: Port existing Vector Search page --- source/atlas-vector-search.txt | 250 ++++++++++++------ .../VectorSearchExamples.cs | 51 ++++ .../VectorSearchQueryExample.cs | 64 +++++ 3 files changed, 291 insertions(+), 74 deletions(-) create mode 100644 source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchExamples.cs create mode 100644 source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchQueryExample.cs diff --git a/source/atlas-vector-search.txt b/source/atlas-vector-search.txt index 73e37027..d043d8b6 100644 --- a/source/atlas-vector-search.txt +++ b/source/atlas-vector-search.txt @@ -1,15 +1,15 @@ .. _csharp-atlas-vector-search: =================== -Atlas Vector Search +{+vector-search+} =================== .. facet:: :name: genre :values: reference - + .. meta:: - :keywords: semantic + :keywords: .NET, search, semantic, AI, RAG .. contents:: On this page :local: @@ -17,83 +17,185 @@ Atlas Vector Search :depth: 2 :class: singlecol -Sample Class ------------- +Overview +-------- + +You can use {+vector-search+} to perform vector search on your data stored in +Atlas. Vector search allows you to query your data based on semantic meaning +rather than just keyword matches, which helps you retrieve more relevant search +results. It enables your AI-powered applications to support use cases such as +semantic search, hybrid search, and generative search, including +Retrieval-Augmented Generation (RAG). + +By using Atlas as a vector database, you can seamlessly index vector data along +with your other data in Atlas. This allows you to filter on fields in your +collection and perform vector search queries against vector data. You can also +combine vector search with full-text search queries to return the most relevant +results for your use case. You can integrate {+vector-search+} with popular AI +frameworks and services to easily implement vector search in your applications. + +To learn more about {+vector-search+}, see the :atlas:`{+vector-search+} +` guide in the MongoDB Atlas +documentation. + +.. _csharp-supported-vector-types: + +Supported Vector Embedding Types +-------------------------------- + +:atlas:`Vector embeddings +` +are vectors you use to represent your data. These embeddings +capture meaningful relationships in your data and enable tasks like semantic +search and retrieval. + +The {+driver-short+} supports vector embeddings of several types. The following +sections describe the supported vector embedding types. + +.. _csharp-vector-array-representation: + +Array Representations +~~~~~~~~~~~~~~~~~~~~~ -The code examples in this guide demonstrate how you can use builders to -create types to interact with documents in the sample collection ``plants.flowers``. -Documents in this collection are modeled by the following ``Flower`` class: +The {+driver-short+} supports the following representations of the array +type in vector embeddings: -.. literalinclude:: /includes/fundamentals/code-examples/builders.cs +- ``BsonArray`` +- ``Memory`` +- ``ReadOnlyMemory`` +- ``float[]`` and ``double[]`` + +The following example shows a class with properties of the preceding types: + +.. literalinclude:: /includes/fundamentals/code-examples/atlas-vector-search/VectorSearchExamples.cs :language: csharp - :dedent: - :start-after: start-model - :end-before: end-model + :start-after: start-bson-arrays + :end-before: end-bson-arrays + +.. tip:: + + To learn more about using the ``Memory`` and ``ReadOnlyMemory`` + types, see the :ref:`csharp-array-serialization` section of the + Serialization guide. -Each builder class takes a generic type parameter -``TDocument`` which represents the type of document that you are working -with. In this guide, the ``Flower`` class is the document type used in -each builder class example. +.. _csharp-binary-vector-representation: -Perform an Atlas Vector Search ------------------------------- +Binary Vector Representations +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -You can use builders to create a ``$vectorSearch`` aggregation pipeline stage to perform an -approximate nearest neighbor search on a vector in the specified field. Your collection *must* -have a defined Atlas Vector Search index before you can perform a vector search on your data. +The {+driver-short+} supports the following binary vector representations in +vector embeddings: + +- ``BinaryVectorFloat32`` (not supported on big-endian architectures) +- ``BinaryVectorInt8`` +- ``BinaryVectorPackedBit`` +- ``Memory``, ``Memory``, ``Memory`` +- ``ReadOnlyMemory``, ``ReadOnlyMemory``, ``ReadOnlyMemory`` +- ``float[]``, ``byte[]``, ``sbyte[]`` + +.. note:: + + You must use the ``BinaryVector`` attribute when specifying binary vector + representations of the ``Memory``, ``ReadOnlyMemory``, or array + types. + +The following example shows a class with properties of the preceding types: + +.. literalinclude:: /includes/fundamentals/code-examples/atlas-vector-search/VectorSearchExamples.cs + :language: csharp + :start-after: start-binary-vectors + :end-before: end-binary-vectors + +Binary Vector Data Serialization +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You can serialize ``Int8`` binary vector typed data as ``byte`` or ``sbyte``. +You can also serialize ``Float32`` binary vector typed data as ``float``. The +following example serializes ``Int8`` and ``Float32`` binary vector data: + +.. literalinclude:: /includes/fundamentals/code-examples/atlas-vector-search/VectorSearchExamples.cs + :language: csharp + :start-after: start-binary-int-float-serialize + :end-before: end-binary-int-float-serialize + +You can deserialize ``PackedBit`` vector data to a :ref:`binary vector +represented ` ``byte`` data type only if the +vector data has a padding value of ``0``. If the vector data has a padding value not +equal to ``0``, you can deserialize it only to a ``BsonVectorPackedBit``. + +Vector Search Query Example +--------------------------- + +You can perform a vector search query by calling the ``VectorSearch()`` method +in an :ref:`aggregation pipeline `. To perform a vector +search on a collection, you must first have a collection with a field that contains +vector data and a vector search index that covers that field. .. tip:: - To obtain the sample dataset used in the following example, see :ref:`csharp-get-started`. - To create the sample Atlas Vector Search index used in the following example, see - :atlas:`Create an Atlas Vector Search Index ` in the - Atlas manual. - -Consider the ``embedded_movies`` collection in the ``sample_mflix`` database. You -can use a ``$vectorSearch`` stage to perform a semantic search on the ``plot_embedding`` -field of the documents in the collection. - -The following example shows how to use builders to generate an aggregation pipeline to -perform the following operations: - -- Performs a vector search on the Atlas Vector Search index of the ``plot_embedding`` field using vector embeddings for the string ``"time travel"`` -- Fetches the ``Title`` and ``Plot`` fields from documents found in the vector search - -.. code-block:: csharp - - // Defines vector embeddings for the string "time travel" - var vector = new[] {-0.0016261312,-0.028070757,-0.011342932,-0.012775794,-0.0027440966,0.008683807,-0.02575152,-0.02020668,-0.010283281,-0.0041719596,0.021392956,0.028657231,-0.006634482,0.007490867,0.018593878,0.0038187427,0.029590257,-0.01451522,0.016061379,0.00008528442,-0.008943722,0.01627464,0.024311995,-0.025911469,0.00022596726,-0.008863748,0.008823762,-0.034921836,0.007910728,-0.01515501,0.035801545,-0.0035688248,-0.020299982,-0.03145631,-0.032256044,-0.028763862,-0.0071576433,-0.012769129,0.012322609,-0.006621153,0.010583182,0.024085402,-0.001623632,0.007864078,-0.021406285,0.002554159,0.012229307,-0.011762793,0.0051682983,0.0048484034,0.018087378,0.024325324,-0.037694257,-0.026537929,-0.008803768,-0.017767483,-0.012642504,-0.0062712682,0.0009771782,-0.010409906,0.017754154,-0.004671795,-0.030469967,0.008477209,-0.005218282,-0.0058480743,-0.020153364,-0.0032805866,0.004248601,0.0051449724,0.006791097,0.007650814,0.003458861,-0.0031223053,-0.01932697,-0.033615597,0.00745088,0.006321252,-0.0038154104,0.014555207,0.027697546,-0.02828402,0.0066711367,0.0077107945,0.01794076,0.011349596,-0.0052715978,0.014755142,-0.019753495,-0.011156326,0.011202978,0.022126047,0.00846388,0.030549942,-0.0041386373,0.018847128,-0.00033655585,0.024925126,-0.003555496,-0.019300312,0.010749794,0.0075308536,-0.018287312,-0.016567878,-0.012869096,-0.015528221,0.0078107617,-0.011156326,0.013522214,-0.020646535,-0.01211601,0.055928253,0.011596181,-0.017247654,0.0005939711,-0.026977783,-0.003942035,-0.009583511,-0.0055248477,-0.028737204,0.023179034,0.003995351,0.0219661,-0.008470545,0.023392297,0.010469886,-0.015874773,0.007890735,-0.009690142,-0.00024970944,0.012775794,0.0114762215,0.013422247,0.010429899,-0.03686786,-0.006717788,-0.027484283,0.011556195,-0.036068123,-0.013915418,-0.0016327957,0.0151016945,-0.020473259,0.004671795,-0.012555866,0.0209531,0.01982014,0.024485271,0.0105431955,-0.005178295,0.033162415,-0.013795458,0.007150979,0.010243294,0.005644808,0.017260984,-0.0045618312,0.0024725192,0.004305249,-0.008197301,0.0014203656,0.0018460588,0.005015015,-0.011142998,0.01439526,0.022965772,0.02552493,0.007757446,-0.0019726837,0.009503538,-0.032042783,0.008403899,-0.04609149,0.013808787,0.011749465,0.036388017,0.016314628,0.021939443,-0.0250051,-0.017354285,-0.012962398,0.00006107364,0.019113706,0.03081652,-0.018114036,-0.0084572155,0.009643491,-0.0034721901,0.0072642746,-0.0090636825,0.01642126,0.013428912,0.027724205,0.0071243206,-0.6858542,-0.031029783,-0.014595194,-0.011449563,0.017514233,0.01743426,0.009950057,0.0029706885,-0.015714826,-0.001806072,0.011856096,0.026444625,-0.0010663156,-0.006474535,0.0016161345,-0.020313311,0.0148351155,-0.0018393943,0.0057347785,0.018300641,-0.018647194,0.03345565,-0.008070676,0.0071443142,0.014301958,0.0044818576,0.003838736,-0.007350913,-0.024525259,-0.001142124,-0.018620536,0.017247654,0.007037683,0.010236629,0.06046009,0.0138887605,-0.012122675,0.037694257,0.0055081863,0.042492677,0.00021784494,-0.011656162,0.010276617,0.022325981,0.005984696,-0.009496873,0.013382261,-0.0010563189,0.0026507939,-0.041639622,0.008637156,0.026471283,-0.008403899,0.024858482,-0.00066686375,-0.0016252982,0.027590916,0.0051449724,0.0058647357,-0.008743787,-0.014968405,0.027724205,-0.011596181,0.0047650975,-0.015381602,0.0043718936,0.002159289,0.035908177,-0.008243952,-0.030443309,0.027564257,0.042625964,-0.0033688906,0.01843393,0.019087048,0.024578573,0.03268257,-0.015608194,-0.014128681,-0.0033538956,-0.0028757197,-0.004121976,-0.032389335,0.0034322033,0.058807302,0.010943064,-0.030523283,0.008903735,0.017500903,0.00871713,-0.0029406983,0.013995391,-0.03132302,-0.019660193,-0.00770413,-0.0038853872,0.0015894766,-0.0015294964,-0.006251275,-0.021099718,-0.010256623,-0.008863748,0.028550599,0.02020668,-0.0012962399,-0.003415542,-0.0022509254,0.0119360695,0.027590916,-0.046971202,-0.0015194997,-0.022405956,0.0016677842,-0.00018535563,-0.015421589,-0.031802863,0.03814744,0.0065411795,0.016567878,-0.015621523,0.022899127,-0.011076353,0.02841731,-0.002679118,-0.002342562,0.015341615,0.01804739,-0.020566562,-0.012989056,-0.002990682,0.01643459,0.00042527664,0.008243952,-0.013715484,-0.004835075,-0.009803439,0.03129636,-0.021432944,0.0012087687,-0.015741484,-0.0052016205,0.00080890034,-0.01755422,0.004811749,-0.017967418,-0.026684547,-0.014128681,0.0041386373,-0.013742141,-0.010056688,-0.013268964,-0.0110630235,-0.028337335,0.015981404,-0.00997005,-0.02424535,-0.013968734,-0.028310679,-0.027750863,-0.020699851,0.02235264,0.001057985,0.00081639783,-0.0099367285,0.013522214,-0.012016043,-0.00086471526,0.013568865,0.0019376953,-0.019020405,0.017460918,-0.023045745,0.008503866,0.0064678704,-0.011509543,0.018727167,-0.003372223,-0.0028690554,-0.0027024434,-0.011902748,-0.012182655,-0.015714826,-0.0098634185,0.00593138,0.018753825,0.0010146659,0.013029044,0.0003521757,-0.017620865,0.04102649,0.00552818,0.024485271,-0.009630162,-0.015608194,0.0006718621,-0.0008418062,0.012395918,0.0057980907,0.016221326,0.010616505,0.004838407,-0.012402583,0.019900113,-0.0034521967,0.000247002,-0.03153628,0.0011038032,-0.020819811,0.016234655,-0.00330058,-0.0032289368,0.00078973995,-0.021952773,-0.022459272,0.03118973,0.03673457,-0.021472929,0.0072109587,-0.015075036,0.004855068,-0.0008151483,0.0069643734,0.010023367,-0.010276617,-0.023019087,0.0068244194,-0.0012520878,-0.0015086699,0.022046074,-0.034148756,-0.0022192693,0.002427534,-0.0027124402,0.0060346797,0.015461575,0.0137554705,0.009230294,-0.009583511,0.032629255,0.015994733,-0.019167023,-0.009203636,0.03393549,-0.017274313,-0.012042701,-0.0009930064,0.026777849,-0.013582194,-0.0027590916,-0.017594207,-0.026804507,-0.0014236979,-0.022032745,0.0091236625,-0.0042419364,-0.00858384,-0.0033905501,-0.020739838,0.016821127,0.022539245,0.015381602,0.015141681,0.028817179,-0.019726837,-0.0051283115,-0.011489551,-0.013208984,-0.0047017853,-0.0072309524,0.01767418,0.0025658219,-0.010323267,0.012609182,-0.028097415,0.026871152,-0.010276617,0.021912785,0.0022542577,0.005124979,-0.0019710176,0.004518512,-0.040360045,0.010969722,-0.0031539614,-0.020366628,-0.025778178,-0.0110030435,-0.016221326,0.0036587953,0.016207997,0.003007343,-0.0032555948,0.0044052163,-0.022046074,-0.0008822095,-0.009363583,0.028230704,-0.024538586,0.0029840174,0.0016044717,-0.014181997,0.031349678,-0.014381931,-0.027750863,0.02613806,0.0004136138,-0.005748107,-0.01868718,-0.0010138329,0.0054348772,0.010703143,-0.003682121,0.0030856507,-0.004275259,-0.010403241,0.021113047,-0.022685863,-0.023032416,0.031429652,0.001792743,-0.005644808,-0.011842767,-0.04078657,-0.0026874484,0.06915057,-0.00056939584,-0.013995391,0.010703143,-0.013728813,-0.022939114,-0.015261642,-0.022485929,0.016807798,0.007964044,0.0144219175,0.016821127,0.0076241563,0.005461535,-0.013248971,0.015301628,0.0085171955,-0.004318578,0.011136333,-0.0059047225,-0.010249958,-0.018207338,0.024645219,0.021752838,0.0007614159,-0.013648839,0.01111634,-0.010503208,-0.0038487327,-0.008203966,-0.00397869,0.0029740208,0.008530525,0.005261601,0.01642126,-0.0038753906,-0.013222313,0.026537929,0.024671877,-0.043505676,0.014195326,0.024778508,0.0056914594,-0.025951454,0.017620865,-0.0021359634,0.008643821,0.021299653,0.0041686273,-0.009017031,0.04044002,0.024378639,-0.027777521,-0.014208655,0.0028623908,0.042119466,0.005801423,-0.028124074,-0.03129636,0.022139376,-0.022179363,-0.04067994,0.013688826,0.013328944,0.0046184794,-0.02828402,-0.0063412455,-0.0046184794,-0.011756129,-0.010383247,-0.0018543894,-0.0018593877,-0.00052024535,0.004815081,0.014781799,0.018007403,0.01306903,-0.020433271,0.009043689,0.033189073,-0.006844413,-0.019766824,-0.018767154,0.00533491,-0.0024575242,0.018727167,0.0058080875,-0.013835444,0.0040719924,0.004881726,0.012029372,0.005664801,0.03193615,0.0058047553,0.002695779,0.009290274,0.02361889,0.017834127,0.0049017193,-0.0036388019,0.010776452,-0.019793482,0.0067777685,-0.014208655,-0.024911797,0.002385881,0.0034988478,0.020899786,-0.0025858153,-0.011849431,0.033189073,-0.021312982,0.024965113,-0.014635181,0.014048708,-0.0035921505,-0.003347231,0.030869836,-0.0017161017,-0.0061346465,0.009203636,-0.025165047,0.0068510775,0.021499587,0.013782129,-0.0024475274,-0.0051149824,-0.024445284,0.006167969,0.0068844,-0.00076183246,0.030150073,-0.0055948244,-0.011162991,-0.02057989,-0.009703471,-0.020646535,0.008004031,0.0066378145,-0.019900113,-0.012169327,-0.01439526,0.0044252095,-0.004018677,0.014621852,-0.025085073,-0.013715484,-0.017980747,0.0071043274,0.011456228,-0.01010334,-0.0035321703,-0.03801415,-0.012036037,-0.0028990454,-0.05419549,-0.024058744,-0.024272008,0.015221654,0.027964126,0.03182952,-0.015354944,0.004855068,0.011522872,0.004771762,0.0027874154,0.023405626,0.0004242353,-0.03132302,0.007057676,0.008763781,-0.0027057757,0.023005757,-0.0071176565,-0.005238275,0.029110415,-0.010989714,0.013728813,-0.009630162,-0.029137073,-0.0049317093,-0.0008630492,-0.015248313,0.0043219104,-0.0055681667,-0.013175662,0.029723546,0.025098402,0.012849103,-0.0009996708,0.03118973,-0.0021709518,0.0260181,-0.020526575,0.028097415,-0.016141351,0.010509873,-0.022965772,0.002865723,0.0020493253,0.0020509914,-0.0041419696,-0.00039695262,0.017287642,0.0038987163,0.014795128,-0.014661839,-0.008950386,0.004431874,-0.009383577,0.0012604183,-0.023019087,0.0029273694,-0.033135757,0.009176978,-0.011023037,-0.002102641,0.02663123,-0.03849399,-0.0044152127,0.0004527676,-0.0026924468,0.02828402,0.017727496,0.035135098,0.02728435,-0.005348239,-0.001467017,-0.019766824,0.014715155,0.011982721,0.0045651635,0.023458943,-0.0010046692,-0.0031373003,-0.0006972704,0.0019043729,-0.018967088,-0.024311995,0.0011546199,0.007977373,-0.004755101,-0.010016702,-0.02780418,-0.004688456,0.013022379,-0.005484861,0.0017227661,-0.015394931,-0.028763862,-0.026684547,0.0030589928,-0.018513903,0.028363993,0.0044818576,-0.009270281,0.038920518,-0.016008062,0.0093902415,0.004815081,-0.021059733,0.01451522,-0.0051583014,0.023765508,-0.017874114,-0.016821127,-0.012522544,-0.0028390652,0.0040886537,0.020259995,-0.031216389,-0.014115352,-0.009176978,0.010303274,0.020313311,0.0064112223,-0.02235264,-0.022872468,0.0052449396,0.0005723116,0.0037321046,0.016807798,-0.018527232,-0.009303603,0.0024858483,-0.0012662497,-0.007110992,0.011976057,-0.007790768,-0.042999174,-0.006727785,-0.011829439,0.007024354,0.005278262,-0.017740825,-0.0041519664,0.0085905045,0.027750863,-0.038387362,0.024391968,0.00087721116,0.010509873,-0.00038508154,-0.006857742,0.0183273,-0.0037054466,0.015461575,0.0017394272,-0.0017944091,0.014181997,-0.0052682655,0.009023695,0.00719763,-0.013522214,0.0034422,0.014941746,-0.0016711164,-0.025298337,-0.017634194,0.0058714002,-0.005321581,0.017834127,0.0110630235,-0.03369557,0.029190388,-0.008943722,0.009363583,-0.0034222065,-0.026111402,-0.007037683,-0.006561173,0.02473852,-0.007084334,-0.010110005,-0.008577175,0.0030439978,-0.022712521,0.0054582027,-0.0012620845,-0.0011954397,-0.015741484,0.0129557345,-0.00042111133,0.00846388,0.008930393,0.016487904,0.010469886,-0.007917393,-0.011762793,-0.0214596,0.000917198,0.021672864,0.010269952,-0.007737452,-0.010243294,-0.0067244526,-0.015488233,-0.021552904,0.017127695,0.011109675,0.038067464,0.00871713,-0.0025591573,0.021312982,-0.006237946,0.034628596,-0.0045251767,0.008357248,0.020686522,0.0010696478,0.0076708077,0.03772091,-0.018700508,-0.0020676525,-0.008923728,-0.023298996,0.018233996,-0.010256623,0.0017860786,0.009796774,-0.00897038,-0.01269582,-0.018527232,0.009190307,-0.02372552,-0.042119466,0.008097334,-0.0066778013,-0.021046404,0.0019593548,0.011083017,-0.0016028056,0.012662497,-0.000059095124,0.0071043274,-0.014675168,0.024831824,-0.053582355,0.038387362,0.0005698124,0.015954746,0.021552904,0.031589597,-0.009230294,-0.0006147976,0.002625802,-0.011749465,-0.034362018,-0.0067844326,-0.018793812,0.011442899,-0.008743787,0.017474247,-0.021619547,0.01831397,-0.009037024,-0.0057247817,-0.02728435,0.010363255,0.034415334,-0.024032086,-0.0020126705,-0.0045518344,-0.019353628,-0.018340627,-0.03129636,-0.0034038792,-0.006321252,-0.0016161345,0.033642255,-0.000056075285,-0.005005019,0.004571828,-0.0024075406,-0.00010215386,0.0098634185,0.1980148,-0.003825407,-0.025191706,0.035161756,0.005358236,0.025111731,0.023485601,0.0023342315,-0.011882754,0.018287312,-0.0068910643,0.003912045,0.009243623,-0.001355387,-0.028603915,-0.012802451,-0.030150073,-0.014795128,-0.028630573,-0.0013487226,0.002667455,0.00985009,-0.0033972147,-0.021486258,0.009503538,-0.017847456,0.013062365,-0.014341944,0.005078328,0.025165047,-0.015594865,-0.025924796,-0.0018177348,0.010996379,-0.02993681,0.007324255,0.014475234,-0.028577257,0.005494857,0.00011725306,-0.013315615,0.015941417,0.009376912,0.0025158382,0.008743787,0.023832154,-0.008084005,-0.014195326,-0.008823762,0.0033455652,-0.032362677,-0.021552904,-0.0056081535,0.023298996,-0.025444955,0.0097301295,0.009736794,0.015274971,-0.0012937407,-0.018087378,-0.0039387033,0.008637156,-0.011189649,-0.00023846315,-0.011582852,0.0066411467,-0.018220667,0.0060846633,0.0376676,-0.002709108,0.0072776037,0.0034188742,-0.010249958,-0.0007747449,-0.00795738,-0.022192692,0.03910712,0.032122757,0.023898797,0.0076241563,-0.007397564,-0.003655463,0.011442899,-0.014115352,-0.00505167,-0.031163072,0.030336678,-0.006857742,-0.022259338,0.004048667,0.02072651,0.0030156737,-0.0042119464,0.00041861215,-0.005731446,0.011103011,0.013822115,0.021512916,0.009216965,-0.006537847,-0.027057758,-0.04054665,0.010403241,-0.0056281467,-0.005701456,-0.002709108,-0.00745088,-0.0024841821,0.009356919,-0.022659205,0.004061996,-0.013175662,0.017074378,-0.006141311,-0.014541878,0.02993681,-0.00028448965,-0.025271678,0.011689484,-0.014528549,0.004398552,-0.017274313,0.0045751603,0.012455898,0.004121976,-0.025458284,-0.006744446,0.011822774,-0.015035049,-0.03257594,0.014675168,-0.0039187097,0.019726837,-0.0047251107,0.0022825818,0.011829439,0.005391558,-0.016781142,-0.0058747325,0.010309938,-0.013049036,0.01186276,-0.0011246296,0.0062112883,0.0028190718,-0.021739509,0.009883412,-0.0073175905,-0.012715813,-0.017181009,-0.016607866,-0.042492677,-0.0014478565,-0.01794076,0.012302616,-0.015194997,-0.04433207,-0.020606548,0.009696807,0.010303274,-0.01694109,-0.004018677,0.019353628,-0.001991011,0.000058938927,0.010536531,-0.17274313,0.010143327,0.014235313,-0.024152048,0.025684876,-0.0012504216,0.036601283,-0.003698782,0.0007310093,0.004165295,-0.0029157067,0.017101036,-0.046891227,-0.017460918,0.022965772,0.020233337,-0.024072073,0.017220996,0.009370248,0.0010363255,0.0194336,-0.019606877,0.01818068,-0.020819811,0.007410893,0.0019326969,0.017887443,0.006651143,0.00067394477,-0.011889419,-0.025058415,-0.008543854,0.021579562,0.0047484366,0.014062037,0.0075508473,-0.009510202,-0.009143656,0.0046817916,0.013982063,-0.0027990784,0.011782787,0.014541878,-0.015701497,-0.029350337,0.021979429,0.01332228,-0.026244693,-0.0123492675,-0.003895384,0.0071576433,-0.035454992,-0.00046984528,0.0033522295,0.039347045,0.0005119148,0.00476843,-0.012995721,0.0024042083,-0.006931051,-0.014461905,-0.0127558,0.0034555288,-0.0074842023,-0.030256703,-0.007057676,-0.00807734,0.007804097,-0.006957709,0.017181009,-0.034575284,-0.008603834,-0.005008351,-0.015834786,0.02943031,0.016861115,-0.0050849924,0.014235313,0.0051449724,0.0025924798,-0.0025741523,0.04289254,-0.002104307,0.012969063,-0.008310596,0.00423194,0.0074975314,0.0018810473,-0.014248641,-0.024725191,0.0151016945,-0.017527562,0.0018727167,0.0002830318,0.015168339,0.0144219175,-0.004048667,-0.004358565,0.011836103,-0.010343261,-0.005911387,0.0022825818,0.0073175905,0.00403867,0.013188991,0.03334902,0.006111321,0.008597169,0.030123414,-0.015474904,0.0017877447,-0.024551915,0.013155668,0.023525586,-0.0255116,0.017220996,0.004358565,-0.00934359,0.0099967085,0.011162991,0.03092315,-0.021046404,-0.015514892,0.0011946067,-0.01816735,0.010876419,-0.10124666,-0.03550831,0.0056348112,0.013942076,0.005951374,0.020419942,-0.006857742,-0.020873128,-0.021259667,0.0137554705,0.0057880944,-0.029163731,-0.018767154,-0.021392956,0.030896494,-0.005494857,-0.0027307675,-0.006801094,-0.014821786,0.021392956,-0.0018110704,-0.0018843795,-0.012362596,-0.0072176233,-0.017194338,-0.018713837,-0.024272008,0.03801415,0.00015880188,0.0044951867,-0.028630573,-0.0014070367,-0.00916365,-0.026537929,-0.009576847,-0.013995391,-0.0077107945,0.0050016865,0.00578143,-0.04467862,0.008363913,0.010136662,-0.0006268769,-0.006591163,0.015341615,-0.027377652,-0.00093136,0.029243704,-0.020886457,-0.01041657,-0.02424535,0.005291591,-0.02980352,-0.009190307,0.019460259,-0.0041286405,0.004801752,0.0011787785,-0.001257086,-0.011216307,-0.013395589,0.00088137644,-0.0051616337,0.03876057,-0.0033455652,0.00075850025,-0.006951045,-0.0062112883,0.018140694,-0.006351242,-0.008263946,0.018154023,-0.012189319,0.0075508473,-0.044358727,-0.0040153447,0.0093302615,-0.010636497,0.032789204,-0.005264933,-0.014235313,-0.018393943,0.007297597,-0.016114693,0.015021721,0.020033404,0.0137688,0.0011046362,0.010616505,-0.0039453674,0.012109346,0.021099718,-0.0072842683,-0.019153694,-0.003768759,0.039320387,-0.006747778,-0.0016852784,0.018154023,0.0010963057,-0.015035049,-0.021033075,-0.04345236,0.017287642,0.016341286,-0.008610498,0.00236922,0.009290274,0.028950468,-0.014475234,-0.0035654926,0.015434918,-0.03372223,0.004501851,-0.012929076,-0.008483873,-0.0044685286,-0.0102233,0.01615468,0.0022792495,0.010876419,-0.0059647025,0.01895376,-0.0069976957,-0.0042952523,0.017207667,-0.00036133936,0.0085905045,0.008084005,0.03129636,-0.016994404,-0.014915089,0.020100048,-0.012009379,-0.006684466,0.01306903,0.00015765642,-0.00530492,0.0005277429,0.015421589,0.015528221,0.032202728,-0.003485519,-0.0014286962,0.033908837,0.001367883,0.010509873,0.025271678,-0.020993087,0.019846799,0.006897729,-0.010216636,-0.00725761,0.01818068,-0.028443968,-0.011242964,-0.014435247,-0.013688826,0.006101324,-0.0022509254,0.013848773,-0.0019077052,0.017181009,0.03422873,0.005324913,-0.0035188415,0.014128681,-0.004898387,0.005038341,0.0012320944,-0.005561502,-0.017847456,0.0008538855,-0.0047884234,0.011849431,0.015421589,-0.013942076,0.0029790192,-0.013702155,0.0001199605,-0.024431955,0.019926772,0.022179363,-0.016487904,-0.03964028,0.0050849924,0.017487574,0.022792496,0.0012504216,0.004048667,-0.00997005,0.0076041627,-0.014328616,-0.020259995,0.0005598157,-0.010469886,0.0016852784,0.01716768,-0.008990373,-0.001987679,0.026417969,0.023792166,0.0046917885,-0.0071909656,-0.00032051947,-0.023259008,-0.009170313,0.02071318,-0.03156294,-0.030869836,-0.006324584,0.013795458,-0.00047151142,0.016874444,0.00947688,0.00985009,-0.029883493,0.024205362,-0.013522214,-0.015075036,-0.030603256,0.029270362,0.010503208,0.021539574,0.01743426,-0.023898797,0.022019416,-0.0068777353,0.027857494,-0.021259667,0.0025758184,0.006197959,0.006447877,-0.00025200035,-0.004941706,-0.021246338,-0.005504854,-0.008390571,-0.0097301295,0.027244363,-0.04446536,0.05216949,0.010243294,-0.016008062,0.0122493,-0.0199401,0.009077012,0.019753495,0.006431216,-0.037960835,-0.027377652,0.016381273,-0.0038620618,0.022512587,-0.010996379,-0.0015211658,-0.0102233,0.007071005,0.008230623,-0.009490209,-0.010083347,0.024431955,0.002427534,0.02828402,0.0035721571,-0.022192692,-0.011882754,0.010056688,0.0011904413,-0.01426197,-0.017500903,-0.00010985966,0.005591492,-0.0077707744,-0.012049366,0.011869425,0.00858384,-0.024698535,-0.030283362,0.020140035,0.011949399,-0.013968734,0.042732596,-0.011649498,-0.011982721,-0.016967745,-0.0060913274,-0.007130985,-0.013109017,-0.009710136}; - - // Specifies that the vector search will consider the 150 nearest neighbors - // in the specified index - var options = new VectorSearchOptions() - { - IndexName = "vector_index", - NumberOfCandidates = 150 - }; - - // Builds aggregation pipeline and specifies that the $vectorSearch stage - // returns 10 results - var pipeline = new EmptyPipelineDefinition() - .VectorSearch(m => m.Embedding, vector, 10, options) - .Project(Builders.Projection - .Include(m => m.Title) - .Include(m => m.Plot)); - -The results of the preceding example contain the following documents: - -.. code-block:: json - - { "_id" : ObjectId("573a13a0f29313caabd04a4f"), "plot" : "A reporter, learning of time travelers visiting 20th century disasters, tries to change the history they know by averting upcoming disasters.", "title" : "Thrill Seekers" } - { "_id" : ObjectId("573a13d8f29313caabda6557"), "plot" : "At the age of 21, Tim discovers he can travel in time and change what happens and has happened in his own life. His decision to make his world a better place by getting a girlfriend turns out not to be as easy as you might think.", "title" : "About Time" } - { "_id" : ObjectId("573a13a5f29313caabd13b4b"), "plot" : "Hoping to alter the events of the past, a 19th century inventor instead travels 800,000 years into the future, where he finds humankind divided into two warring races.", "title" : "The Time Machine" } - { "_id" : ObjectId("573a13aef29313caabd2e2d7"), "plot" : "After using his mother's newly built time machine, Dolf gets stuck involuntary in the year 1212. He ends up in a children's crusade where he confronts his new friends with modern techniques...", "title" : "Crusade in Jeans" } - { "_id" : ObjectId("573a1399f29313caabceec0e"), "plot" : "An officer for a security agency that regulates time travel, must fend for his life against a shady politician who has a tie to his past.", "title" : "Timecop" } - { "_id" : ObjectId("573a1399f29313caabcee36f"), "plot" : "A time-travel experiment in which a robot probe is sent from the year 2073 to the year 1973 goes terribly wrong thrusting one of the project scientists, a man named Nicholas Sinclair into a...", "title" : "A.P.E.X." } - { "_id" : ObjectId("573a13c6f29313caabd715d3"), "plot" : "Agent J travels in time to M.I.B.'s early days in 1969 to stop an alien from assassinating his friend Agent K and changing history.", "title" : "Men in Black 3" } - { "_id" : ObjectId("573a13d4f29313caabd98c13"), "plot" : "Bound by a shared destiny, a teen bursting with scientific curiosity and a former boy-genius inventor embark on a mission to unearth the secrets of a place somewhere in time and space that exists in their collective memory.", "title" : "Tomorrowland" } - { "_id" : ObjectId("573a13b6f29313caabd477fa"), "plot" : "With the help of his uncle, a man travels to the future to try and bring his girlfriend back to life.", "title" : "Love Story 2050" } - { "_id" : ObjectId("573a13e5f29313caabdc40c9"), "plot" : "A dimension-traveling wizard gets stuck in the 21st century because cell-phone radiation interferes with his magic. With his home world on the brink of war, he seeks help from a jaded ...", "title" : "The Portal" } - -To learn more about Atlas Vector Search, see :atlas:`Atlas Vector Search Overview ` -in the Atlas manual. \ No newline at end of file + To learn more about configuring a collection for vector search, see the :atlas:`{+vector-search+} + ` guide in the MongoDB Atlas + documentation. + +You can convert ``BinaryVectorFloat32``, ``BinaryVectorInt8``, and +``BinaryVectorPackedBit`` data to the ``BsonBinaryData`` type to use in a vector +search query by using the ``ToQueryVector()`` method. The following example +converts ``BinaryVectorInt8`` into a ``BsonBinaryData`` object: + +.. literalinclude:: /includes/fundamentals/code-examples/atlas-vector-search/VectorSearchExamples.cs + :language: csharp + :start-after: start-to-query-vector + :end-before: end-to-query-vector + +You can specify your :ref:`array-represented +` vector data as an instance of the +``QueryVector`` class to use in a vector search query. The following example +creates an array of ``ReadOnlyMemory`` values as a ``QueryVector`` object +to use in a vector search query: + +.. literalinclude:: /includes/fundamentals/code-examples/atlas-vector-search/VectorSearchExamples.cs + :language: csharp + :start-after: start-array-query-vector + :end-before: end-array-query-vector + +Example +~~~~~~~ + +This example performs the following steps to run an {+vector-search+} query on a collection that +contains vector data and a vector search index on the ``PlotEmbedding`` field: + +1. Creates an array that contains the :ref:`array-represented + ` vector data to search for +#. Specifies a ``VectorSearchOptions`` object that contains the name of the index + and the number of nearest neighbors to use during the search +#. Creates an aggregation pipeline that uses the ``VectorSearch()`` stage to + perform the vector search query and a ``Project()`` stage to filter the + results +#. Prints the results of the query + +.. literalinclude:: /includes/fundamentals/code-examples/atlas-vector-search/VectorSearchQueryExample.cs + :language: csharp + :start-after: start-search-example + :end-before: end-search-example + :emphasize-lines: 11 + +Additional Information +---------------------- + +To learn more about {+vector-search+}, see the :atlas:`{+vector-search+} +` guide in the MongoDB Atlas +documentation. + +API Documentation +~~~~~~~~~~~~~~~~~ + +To learn more about any of the functions or types discussed in this +guide, see the following API Documentation: + +- `BinaryVectorFloat32 <{+new-api-root+}/MongoDB.Bson/MongoDB.Bson.BinaryVectorFloat32.html>`__ +- `BinaryVectorInt8 <{+new-api-root+}/MongoDB.Bson/MongoDB.Bson.BinaryVectorInt8.html>`__ +- `BinaryVectorFloat32 <{+new-api-root+}/MongoDB.Bson/MongoDB.Bson.BinaryVectorPackedBit.html>`__ +- `ToQueryVector() <{+new-api-root+}/MongoDB.Driver/MongoDB.Driver.BinaryVectorDriverExtensions.ToQueryVector.html>`__ +- `VectorSearch() <{+new-api-root+}/MongoDB.Driver/MongoDB.Driver.AggregateFluentBase-1.VectorSearch.html>`__ +- `Aggregate() + <{+new-api-root+}/MongoDB.Driver/MongoDB.Driver.IMongoCollectionExtensions.Aggregate.html>`__ \ No newline at end of file diff --git a/source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchExamples.cs b/source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchExamples.cs new file mode 100644 index 00000000..88e49dd3 --- /dev/null +++ b/source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchExamples.cs @@ -0,0 +1,51 @@ +// start-bson-arrays +public class BsonArrayVectors +{ + public BsonArray BsonArrayVector { get; set; } + + public Memory MemoryVector { get; set; } + + public ReadOnlyMemory ReadOnlyMemoryVector { get; set; } + + public float[] FloatArrayVector { get; set; } +} +// end-bson-arrays + +// start-binary-vectors +public class BinaryVectors +{ + public BinaryVectorInt8 ValuesInt8 { get; set; } + + public BinaryVectorPackedBit ValuesPackedBit { get; set; } + + public BinaryVectorFloat32 ValuesFloat { get; set; } + + [BinaryVector(BinaryVectorDataType.Int8)] + public Memory ValuesByte { get; set; } + + [BinaryVector(BinaryVectorDataType.Float32)] + public float[] ValuesFloat { get; set; } + +} +// end-binary-vectors + +// start-binary-int-float-serialize +[BinaryVector(BinaryVectorDataType.Int8)] +public Memory ValuesByte { get; set; } + +[BinaryVector(BinaryVectorDataType.Int8)] +public Memory ValuesSByte { get; set; } + +[BinaryVector(BinaryVectorDataType.Float32)] +public float[] ValuesFloat { get; set; } +// end-binary-int-float-serialize + + // start-to-query-vector +var binaryVector = new BinaryVectorInt8(new sbyte[] { 0, 1, 2, 3, 4 }); + +var queryVector = binaryVector.ToQueryVector(); +// end-to-query-vector + +// start-array-query-vector +QueryVector v = new QueryVector(new ReadOnlyMemory([1.2f, 2.3f])); +// end-array-query-vector \ No newline at end of file diff --git a/source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchQueryExample.cs b/source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchQueryExample.cs new file mode 100644 index 00000000..d04587e3 --- /dev/null +++ b/source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchQueryExample.cs @@ -0,0 +1,64 @@ +using MongoDB.Bson; +using MongoDB.Bson.Serialization.Attributes; +using MongoDB.Bson.Serialization.Conventions; +using MongoDB.Driver; + +namespace CsharpExamples.AtlasSearch; + +public class VectorSearchQuery +{ + + private static IMongoCollection collection; + private static string _mongoConnectionString = ""; + + public static void Main(string[] args) + { + Setup(); + + // start-search-example + QueryVector vector = new[] { -0.0016261312, -0.028070757, -0.011342932, -0.012775794, -0.0027440966, 0.008683807, -0.02575152, -0.02020668, -0.010283281, -0.0041719596, 0.021392956, 0.028657231, -0.006634482, 0.007490867, 0.018593878, 0.0038187427, 0.029590257, -0.01451522, 0.016061379, 0.00008528442, -0.008943722, 0.01627464, 0.024311995, -0.025911469, 0.00022596726, -0.008863748, 0.008823762, -0.034921836, 0.007910728, -0.01515501, 0.035801545, -0.0035688248, -0.020299982, -0.03145631, -0.032256044, -0.028763862, -0.0071576433, -0.012769129, 0.012322609, -0.006621153, 0.010583182, 0.024085402, -0.001623632, 0.007864078, -0.021406285, 0.002554159, 0.012229307, -0.011762793, 0.0051682983, 0.0048484034, 0.018087378, 0.024325324, -0.037694257, -0.026537929, -0.008803768, -0.017767483, -0.012642504, -0.0062712682, 0.0009771782, -0.010409906, 0.017754154, -0.004671795, -0.030469967, 0.008477209, -0.005218282, -0.0058480743, -0.020153364, -0.0032805866, 0.004248601, 0.0051449724, 0.006791097, 0.007650814, 0.003458861, -0.0031223053, -0.01932697, -0.033615597, 0.00745088, 0.006321252, -0.0038154104, 0.014555207, 0.027697546, -0.02828402, 0.0066711367, 0.0077107945, 0.01794076, 0.011349596, -0.0052715978, 0.014755142, -0.019753495, -0.011156326, 0.011202978, 0.022126047, 0.00846388, 0.030549942, -0.0041386373, 0.018847128, -0.00033655585, 0.024925126, -0.003555496, -0.019300312, 0.010749794, 0.0075308536, -0.018287312, -0.016567878, -0.012869096, -0.015528221, 0.0078107617, -0.011156326, 0.013522214, -0.020646535, -0.01211601, 0.055928253, 0.011596181, -0.017247654, 0.0005939711, -0.026977783, -0.003942035, -0.009583511, -0.0055248477, -0.028737204, 0.023179034, 0.003995351, 0.0219661, -0.008470545, 0.023392297, 0.010469886, -0.015874773, 0.007890735, -0.009690142, -0.00024970944, 0.012775794, 0.0114762215, 0.013422247, 0.010429899, -0.03686786, -0.006717788, -0.027484283, 0.011556195, -0.036068123, -0.013915418, -0.0016327957, 0.0151016945, -0.020473259, 0.004671795, -0.012555866, 0.0209531, 0.01982014, 0.024485271, 0.0105431955, -0.005178295, 0.033162415, -0.013795458, 0.007150979, 0.010243294, 0.005644808, 0.017260984, -0.0045618312, 0.0024725192, 0.004305249, -0.008197301, 0.0014203656, 0.0018460588, 0.005015015, -0.011142998, 0.01439526, 0.022965772, 0.02552493, 0.007757446, -0.0019726837, 0.009503538, -0.032042783, 0.008403899, -0.04609149, 0.013808787, 0.011749465, 0.036388017, 0.016314628, 0.021939443, -0.0250051, -0.017354285, -0.012962398, 0.00006107364, 0.019113706, 0.03081652, -0.018114036, -0.0084572155, 0.009643491, -0.0034721901, 0.0072642746, -0.0090636825, 0.01642126, 0.013428912, 0.027724205, 0.0071243206, -0.6858542, -0.031029783, -0.014595194, -0.011449563, 0.017514233, 0.01743426, 0.009950057, 0.0029706885, -0.015714826, -0.001806072, 0.011856096, 0.026444625, -0.0010663156, -0.006474535, 0.0016161345, -0.020313311, 0.0148351155, -0.0018393943, 0.0057347785, 0.018300641, -0.018647194, 0.03345565, -0.008070676, 0.0071443142, 0.014301958, 0.0044818576, 0.003838736, -0.007350913, -0.024525259, -0.001142124, -0.018620536, 0.017247654, 0.007037683, 0.010236629, 0.06046009, 0.0138887605, -0.012122675, 0.037694257, 0.0055081863, 0.042492677, 0.00021784494, -0.011656162, 0.010276617, 0.022325981, 0.005984696, -0.009496873, 0.013382261, -0.0010563189, 0.0026507939, -0.041639622, 0.008637156, 0.026471283, -0.008403899, 0.024858482, -0.00066686375, -0.0016252982, 0.027590916, 0.0051449724, 0.0058647357, -0.008743787, -0.014968405, 0.027724205, -0.011596181, 0.0047650975, -0.015381602, 0.0043718936, 0.002159289, 0.035908177, -0.008243952, -0.030443309, 0.027564257, 0.042625964, -0.0033688906, 0.01843393, 0.019087048, 0.024578573, 0.03268257, -0.015608194, -0.014128681, -0.0033538956, -0.0028757197, -0.004121976, -0.032389335, 0.0034322033, 0.058807302, 0.010943064, -0.030523283, 0.008903735, 0.017500903, 0.00871713, -0.0029406983, 0.013995391, -0.03132302, -0.019660193, -0.00770413, -0.0038853872, 0.0015894766, -0.0015294964, -0.006251275, -0.021099718, -0.010256623, -0.008863748, 0.028550599, 0.02020668, -0.0012962399, -0.003415542, -0.0022509254, 0.0119360695, 0.027590916, -0.046971202, -0.0015194997, -0.022405956, 0.0016677842, -0.00018535563, -0.015421589, -0.031802863, 0.03814744, 0.0065411795, 0.016567878, -0.015621523, 0.022899127, -0.011076353, 0.02841731, -0.002679118, -0.002342562, 0.015341615, 0.01804739, -0.020566562, -0.012989056, -0.002990682, 0.01643459, 0.00042527664, 0.008243952, -0.013715484, -0.004835075, -0.009803439, 0.03129636, -0.021432944, 0.0012087687, -0.015741484, -0.0052016205, 0.00080890034, -0.01755422, 0.004811749, -0.017967418, -0.026684547, -0.014128681, 0.0041386373, -0.013742141, -0.010056688, -0.013268964, -0.0110630235, -0.028337335, 0.015981404, -0.00997005, -0.02424535, -0.013968734, -0.028310679, -0.027750863, -0.020699851, 0.02235264, 0.001057985, 0.00081639783, -0.0099367285, 0.013522214, -0.012016043, -0.00086471526, 0.013568865, 0.0019376953, -0.019020405, 0.017460918, -0.023045745, 0.008503866, 0.0064678704, -0.011509543, 0.018727167, -0.003372223, -0.0028690554, -0.0027024434, -0.011902748, -0.012182655, -0.015714826, -0.0098634185, 0.00593138, 0.018753825, 0.0010146659, 0.013029044, 0.0003521757, -0.017620865, 0.04102649, 0.00552818, 0.024485271, -0.009630162, -0.015608194, 0.0006718621, -0.0008418062, 0.012395918, 0.0057980907, 0.016221326, 0.010616505, 0.004838407, -0.012402583, 0.019900113, -0.0034521967, 0.000247002, -0.03153628, 0.0011038032, -0.020819811, 0.016234655, -0.00330058, -0.0032289368, 0.00078973995, -0.021952773, -0.022459272, 0.03118973, 0.03673457, -0.021472929, 0.0072109587, -0.015075036, 0.004855068, -0.0008151483, 0.0069643734, 0.010023367, -0.010276617, -0.023019087, 0.0068244194, -0.0012520878, -0.0015086699, 0.022046074, -0.034148756, -0.0022192693, 0.002427534, -0.0027124402, 0.0060346797, 0.015461575, 0.0137554705, 0.009230294, -0.009583511, 0.032629255, 0.015994733, -0.019167023, -0.009203636, 0.03393549, -0.017274313, -0.012042701, -0.0009930064, 0.026777849, -0.013582194, -0.0027590916, -0.017594207, -0.026804507, -0.0014236979, -0.022032745, 0.0091236625, -0.0042419364, -0.00858384, -0.0033905501, -0.020739838, 0.016821127, 0.022539245, 0.015381602, 0.015141681, 0.028817179, -0.019726837, -0.0051283115, -0.011489551, -0.013208984, -0.0047017853, -0.0072309524, 0.01767418, 0.0025658219, -0.010323267, 0.012609182, -0.028097415, 0.026871152, -0.010276617, 0.021912785, 0.0022542577, 0.005124979, -0.0019710176, 0.004518512, -0.040360045, 0.010969722, -0.0031539614, -0.020366628, -0.025778178, -0.0110030435, -0.016221326, 0.0036587953, 0.016207997, 0.003007343, -0.0032555948, 0.0044052163, -0.022046074, -0.0008822095, -0.009363583, 0.028230704, -0.024538586, 0.0029840174, 0.0016044717, -0.014181997, 0.031349678, -0.014381931, -0.027750863, 0.02613806, 0.0004136138, -0.005748107, -0.01868718, -0.0010138329, 0.0054348772, 0.010703143, -0.003682121, 0.0030856507, -0.004275259, -0.010403241, 0.021113047, -0.022685863, -0.023032416, 0.031429652, 0.001792743, -0.005644808, -0.011842767, -0.04078657, -0.0026874484, 0.06915057, -0.00056939584, -0.013995391, 0.010703143, -0.013728813, -0.022939114, -0.015261642, -0.022485929, 0.016807798, 0.007964044, 0.0144219175, 0.016821127, 0.0076241563, 0.005461535, -0.013248971, 0.015301628, 0.0085171955, -0.004318578, 0.011136333, -0.0059047225, -0.010249958, -0.018207338, 0.024645219, 0.021752838, 0.0007614159, -0.013648839, 0.01111634, -0.010503208, -0.0038487327, -0.008203966, -0.00397869, 0.0029740208, 0.008530525, 0.005261601, 0.01642126, -0.0038753906, -0.013222313, 0.026537929, 0.024671877, -0.043505676, 0.014195326, 0.024778508, 0.0056914594, -0.025951454, 0.017620865, -0.0021359634, 0.008643821, 0.021299653, 0.0041686273, -0.009017031, 0.04044002, 0.024378639, -0.027777521, -0.014208655, 0.0028623908, 0.042119466, 0.005801423, -0.028124074, -0.03129636, 0.022139376, -0.022179363, -0.04067994, 0.013688826, 0.013328944, 0.0046184794, -0.02828402, -0.0063412455, -0.0046184794, -0.011756129, -0.010383247, -0.0018543894, -0.0018593877, -0.00052024535, 0.004815081, 0.014781799, 0.018007403, 0.01306903, -0.020433271, 0.009043689, 0.033189073, -0.006844413, -0.019766824, -0.018767154, 0.00533491, -0.0024575242, 0.018727167, 0.0058080875, -0.013835444, 0.0040719924, 0.004881726, 0.012029372, 0.005664801, 0.03193615, 0.0058047553, 0.002695779, 0.009290274, 0.02361889, 0.017834127, 0.0049017193, -0.0036388019, 0.010776452, -0.019793482, 0.0067777685, -0.014208655, -0.024911797, 0.002385881, 0.0034988478, 0.020899786, -0.0025858153, -0.011849431, 0.033189073, -0.021312982, 0.024965113, -0.014635181, 0.014048708, -0.0035921505, -0.003347231, 0.030869836, -0.0017161017, -0.0061346465, 0.009203636, -0.025165047, 0.0068510775, 0.021499587, 0.013782129, -0.0024475274, -0.0051149824, -0.024445284, 0.006167969, 0.0068844, -0.00076183246, 0.030150073, -0.0055948244, -0.011162991, -0.02057989, -0.009703471, -0.020646535, 0.008004031, 0.0066378145, -0.019900113, -0.012169327, -0.01439526, 0.0044252095, -0.004018677, 0.014621852, -0.025085073, -0.013715484, -0.017980747, 0.0071043274, 0.011456228, -0.01010334, -0.0035321703, -0.03801415, -0.012036037, -0.0028990454, -0.05419549, -0.024058744, -0.024272008, 0.015221654, 0.027964126, 0.03182952, -0.015354944, 0.004855068, 0.011522872, 0.004771762, 0.0027874154, 0.023405626, 0.0004242353, -0.03132302, 0.007057676, 0.008763781, -0.0027057757, 0.023005757, -0.0071176565, -0.005238275, 0.029110415, -0.010989714, 0.013728813, -0.009630162, -0.029137073, -0.0049317093, -0.0008630492, -0.015248313, 0.0043219104, -0.0055681667, -0.013175662, 0.029723546, 0.025098402, 0.012849103, -0.0009996708, 0.03118973, -0.0021709518, 0.0260181, -0.020526575, 0.028097415, -0.016141351, 0.010509873, -0.022965772, 0.002865723, 0.0020493253, 0.0020509914, -0.0041419696, -0.00039695262, 0.017287642, 0.0038987163, 0.014795128, -0.014661839, -0.008950386, 0.004431874, -0.009383577, 0.0012604183, -0.023019087, 0.0029273694, -0.033135757, 0.009176978, -0.011023037, -0.002102641, 0.02663123, -0.03849399, -0.0044152127, 0.0004527676, -0.0026924468, 0.02828402, 0.017727496, 0.035135098, 0.02728435, -0.005348239, -0.001467017, -0.019766824, 0.014715155, 0.011982721, 0.0045651635, 0.023458943, -0.0010046692, -0.0031373003, -0.0006972704, 0.0019043729, -0.018967088, -0.024311995, 0.0011546199, 0.007977373, -0.004755101, -0.010016702, -0.02780418, -0.004688456, 0.013022379, -0.005484861, 0.0017227661, -0.015394931, -0.028763862, -0.026684547, 0.0030589928, -0.018513903, 0.028363993, 0.0044818576, -0.009270281, 0.038920518, -0.016008062, 0.0093902415, 0.004815081, -0.021059733, 0.01451522, -0.0051583014, 0.023765508, -0.017874114, -0.016821127, -0.012522544, -0.0028390652, 0.0040886537, 0.020259995, -0.031216389, -0.014115352, -0.009176978, 0.010303274, 0.020313311, 0.0064112223, -0.02235264, -0.022872468, 0.0052449396, 0.0005723116, 0.0037321046, 0.016807798, -0.018527232, -0.009303603, 0.0024858483, -0.0012662497, -0.007110992, 0.011976057, -0.007790768, -0.042999174, -0.006727785, -0.011829439, 0.007024354, 0.005278262, -0.017740825, -0.0041519664, 0.0085905045, 0.027750863, -0.038387362, 0.024391968, 0.00087721116, 0.010509873, -0.00038508154, -0.006857742, 0.0183273, -0.0037054466, 0.015461575, 0.0017394272, -0.0017944091, 0.014181997, -0.0052682655, 0.009023695, 0.00719763, -0.013522214, 0.0034422, 0.014941746, -0.0016711164, -0.025298337, -0.017634194, 0.0058714002, -0.005321581, 0.017834127, 0.0110630235, -0.03369557, 0.029190388, -0.008943722, 0.009363583, -0.0034222065, -0.026111402, -0.007037683, -0.006561173, 0.02473852, -0.007084334, -0.010110005, -0.008577175, 0.0030439978, -0.022712521, 0.0054582027, -0.0012620845, -0.0011954397, -0.015741484, 0.0129557345, -0.00042111133, 0.00846388, 0.008930393, 0.016487904, 0.010469886, -0.007917393, -0.011762793, -0.0214596, 0.000917198, 0.021672864, 0.010269952, -0.007737452, -0.010243294, -0.0067244526, -0.015488233, -0.021552904, 0.017127695, 0.011109675, 0.038067464, 0.00871713, -0.0025591573, 0.021312982, -0.006237946, 0.034628596, -0.0045251767, 0.008357248, 0.020686522, 0.0010696478, 0.0076708077, 0.03772091, -0.018700508, -0.0020676525, -0.008923728, -0.023298996, 0.018233996, -0.010256623, 0.0017860786, 0.009796774, -0.00897038, -0.01269582, -0.018527232, 0.009190307, -0.02372552, -0.042119466, 0.008097334, -0.0066778013, -0.021046404, 0.0019593548, 0.011083017, -0.0016028056, 0.012662497, -0.000059095124, 0.0071043274, -0.014675168, 0.024831824, -0.053582355, 0.038387362, 0.0005698124, 0.015954746, 0.021552904, 0.031589597, -0.009230294, -0.0006147976, 0.002625802, -0.011749465, -0.034362018, -0.0067844326, -0.018793812, 0.011442899, -0.008743787, 0.017474247, -0.021619547, 0.01831397, -0.009037024, -0.0057247817, -0.02728435, 0.010363255, 0.034415334, -0.024032086, -0.0020126705, -0.0045518344, -0.019353628, -0.018340627, -0.03129636, -0.0034038792, -0.006321252, -0.0016161345, 0.033642255, -0.000056075285, -0.005005019, 0.004571828, -0.0024075406, -0.00010215386, 0.0098634185, 0.1980148, -0.003825407, -0.025191706, 0.035161756, 0.005358236, 0.025111731, 0.023485601, 0.0023342315, -0.011882754, 0.018287312, -0.0068910643, 0.003912045, 0.009243623, -0.001355387, -0.028603915, -0.012802451, -0.030150073, -0.014795128, -0.028630573, -0.0013487226, 0.002667455, 0.00985009, -0.0033972147, -0.021486258, 0.009503538, -0.017847456, 0.013062365, -0.014341944, 0.005078328, 0.025165047, -0.015594865, -0.025924796, -0.0018177348, 0.010996379, -0.02993681, 0.007324255, 0.014475234, -0.028577257, 0.005494857, 0.00011725306, -0.013315615, 0.015941417, 0.009376912, 0.0025158382, 0.008743787, 0.023832154, -0.008084005, -0.014195326, -0.008823762, 0.0033455652, -0.032362677, -0.021552904, -0.0056081535, 0.023298996, -0.025444955, 0.0097301295, 0.009736794, 0.015274971, -0.0012937407, -0.018087378, -0.0039387033, 0.008637156, -0.011189649, -0.00023846315, -0.011582852, 0.0066411467, -0.018220667, 0.0060846633, 0.0376676, -0.002709108, 0.0072776037, 0.0034188742, -0.010249958, -0.0007747449, -0.00795738, -0.022192692, 0.03910712, 0.032122757, 0.023898797, 0.0076241563, -0.007397564, -0.003655463, 0.011442899, -0.014115352, -0.00505167, -0.031163072, 0.030336678, -0.006857742, -0.022259338, 0.004048667, 0.02072651, 0.0030156737, -0.0042119464, 0.00041861215, -0.005731446, 0.011103011, 0.013822115, 0.021512916, 0.009216965, -0.006537847, -0.027057758, -0.04054665, 0.010403241, -0.0056281467, -0.005701456, -0.002709108, -0.00745088, -0.0024841821, 0.009356919, -0.022659205, 0.004061996, -0.013175662, 0.017074378, -0.006141311, -0.014541878, 0.02993681, -0.00028448965, -0.025271678, 0.011689484, -0.014528549, 0.004398552, -0.017274313, 0.0045751603, 0.012455898, 0.004121976, -0.025458284, -0.006744446, 0.011822774, -0.015035049, -0.03257594, 0.014675168, -0.0039187097, 0.019726837, -0.0047251107, 0.0022825818, 0.011829439, 0.005391558, -0.016781142, -0.0058747325, 0.010309938, -0.013049036, 0.01186276, -0.0011246296, 0.0062112883, 0.0028190718, -0.021739509, 0.009883412, -0.0073175905, -0.012715813, -0.017181009, -0.016607866, -0.042492677, -0.0014478565, -0.01794076, 0.012302616, -0.015194997, -0.04433207, -0.020606548, 0.009696807, 0.010303274, -0.01694109, -0.004018677, 0.019353628, -0.001991011, 0.000058938927, 0.010536531, -0.17274313, 0.010143327, 0.014235313, -0.024152048, 0.025684876, -0.0012504216, 0.036601283, -0.003698782, 0.0007310093, 0.004165295, -0.0029157067, 0.017101036, -0.046891227, -0.017460918, 0.022965772, 0.020233337, -0.024072073, 0.017220996, 0.009370248, 0.0010363255, 0.0194336, -0.019606877, 0.01818068, -0.020819811, 0.007410893, 0.0019326969, 0.017887443, 0.006651143, 0.00067394477, -0.011889419, -0.025058415, -0.008543854, 0.021579562, 0.0047484366, 0.014062037, 0.0075508473, -0.009510202, -0.009143656, 0.0046817916, 0.013982063, -0.0027990784, 0.011782787, 0.014541878, -0.015701497, -0.029350337, 0.021979429, 0.01332228, -0.026244693, -0.0123492675, -0.003895384, 0.0071576433, -0.035454992, -0.00046984528, 0.0033522295, 0.039347045, 0.0005119148, 0.00476843, -0.012995721, 0.0024042083, -0.006931051, -0.014461905, -0.0127558, 0.0034555288, -0.0074842023, -0.030256703, -0.007057676, -0.00807734, 0.007804097, -0.006957709, 0.017181009, -0.034575284, -0.008603834, -0.005008351, -0.015834786, 0.02943031, 0.016861115, -0.0050849924, 0.014235313, 0.0051449724, 0.0025924798, -0.0025741523, 0.04289254, -0.002104307, 0.012969063, -0.008310596, 0.00423194, 0.0074975314, 0.0018810473, -0.014248641, -0.024725191, 0.0151016945, -0.017527562, 0.0018727167, 0.0002830318, 0.015168339, 0.0144219175, -0.004048667, -0.004358565, 0.011836103, -0.010343261, -0.005911387, 0.0022825818, 0.0073175905, 0.00403867, 0.013188991, 0.03334902, 0.006111321, 0.008597169, 0.030123414, -0.015474904, 0.0017877447, -0.024551915, 0.013155668, 0.023525586, -0.0255116, 0.017220996, 0.004358565, -0.00934359, 0.0099967085, 0.011162991, 0.03092315, -0.021046404, -0.015514892, 0.0011946067, -0.01816735, 0.010876419, -0.10124666, -0.03550831, 0.0056348112, 0.013942076, 0.005951374, 0.020419942, -0.006857742, -0.020873128, -0.021259667, 0.0137554705, 0.0057880944, -0.029163731, -0.018767154, -0.021392956, 0.030896494, -0.005494857, -0.0027307675, -0.006801094, -0.014821786, 0.021392956, -0.0018110704, -0.0018843795, -0.012362596, -0.0072176233, -0.017194338, -0.018713837, -0.024272008, 0.03801415, 0.00015880188, 0.0044951867, -0.028630573, -0.0014070367, -0.00916365, -0.026537929, -0.009576847, -0.013995391, -0.0077107945, 0.0050016865, 0.00578143, -0.04467862, 0.008363913, 0.010136662, -0.0006268769, -0.006591163, 0.015341615, -0.027377652, -0.00093136, 0.029243704, -0.020886457, -0.01041657, -0.02424535, 0.005291591, -0.02980352, -0.009190307, 0.019460259, -0.0041286405, 0.004801752, 0.0011787785, -0.001257086, -0.011216307, -0.013395589, 0.00088137644, -0.0051616337, 0.03876057, -0.0033455652, 0.00075850025, -0.006951045, -0.0062112883, 0.018140694, -0.006351242, -0.008263946, 0.018154023, -0.012189319, 0.0075508473, -0.044358727, -0.0040153447, 0.0093302615, -0.010636497, 0.032789204, -0.005264933, -0.014235313, -0.018393943, 0.007297597, -0.016114693, 0.015021721, 0.020033404, 0.0137688, 0.0011046362, 0.010616505, -0.0039453674, 0.012109346, 0.021099718, -0.0072842683, -0.019153694, -0.003768759, 0.039320387, -0.006747778, -0.0016852784, 0.018154023, 0.0010963057, -0.015035049, -0.021033075, -0.04345236, 0.017287642, 0.016341286, -0.008610498, 0.00236922, 0.009290274, 0.028950468, -0.014475234, -0.0035654926, 0.015434918, -0.03372223, 0.004501851, -0.012929076, -0.008483873, -0.0044685286, -0.0102233, 0.01615468, 0.0022792495, 0.010876419, -0.0059647025, 0.01895376, -0.0069976957, -0.0042952523, 0.017207667, -0.00036133936, 0.0085905045, 0.008084005, 0.03129636, -0.016994404, -0.014915089, 0.020100048, -0.012009379, -0.006684466, 0.01306903, 0.00015765642, -0.00530492, 0.0005277429, 0.015421589, 0.015528221, 0.032202728, -0.003485519, -0.0014286962, 0.033908837, 0.001367883, 0.010509873, 0.025271678, -0.020993087, 0.019846799, 0.006897729, -0.010216636, -0.00725761, 0.01818068, -0.028443968, -0.011242964, -0.014435247, -0.013688826, 0.006101324, -0.0022509254, 0.013848773, -0.0019077052, 0.017181009, 0.03422873, 0.005324913, -0.0035188415, 0.014128681, -0.004898387, 0.005038341, 0.0012320944, -0.005561502, -0.017847456, 0.0008538855, -0.0047884234, 0.011849431, 0.015421589, -0.013942076, 0.0029790192, -0.013702155, 0.0001199605, -0.024431955, 0.019926772, 0.022179363, -0.016487904, -0.03964028, 0.0050849924, 0.017487574, 0.022792496, 0.0012504216, 0.004048667, -0.00997005, 0.0076041627, -0.014328616, -0.020259995, 0.0005598157, -0.010469886, 0.0016852784, 0.01716768, -0.008990373, -0.001987679, 0.026417969, 0.023792166, 0.0046917885, -0.0071909656, -0.00032051947, -0.023259008, -0.009170313, 0.02071318, -0.03156294, -0.030869836, -0.006324584, 0.013795458, -0.00047151142, 0.016874444, 0.00947688, 0.00985009, -0.029883493, 0.024205362, -0.013522214, -0.015075036, -0.030603256, 0.029270362, 0.010503208, 0.021539574, 0.01743426, -0.023898797, 0.022019416, -0.0068777353, 0.027857494, -0.021259667, 0.0025758184, 0.006197959, 0.006447877, -0.00025200035, -0.004941706, -0.021246338, -0.005504854, -0.008390571, -0.0097301295, 0.027244363, -0.04446536, 0.05216949, 0.010243294, -0.016008062, 0.0122493, -0.0199401, 0.009077012, 0.019753495, 0.006431216, -0.037960835, -0.027377652, 0.016381273, -0.0038620618, 0.022512587, -0.010996379, -0.0015211658, -0.0102233, 0.007071005, 0.008230623, -0.009490209, -0.010083347, 0.024431955, 0.002427534, 0.02828402, 0.0035721571, -0.022192692, -0.011882754, 0.010056688, 0.0011904413, -0.01426197, -0.017500903, -0.00010985966, 0.005591492, -0.0077707744, -0.012049366, 0.011869425, 0.00858384, -0.024698535, -0.030283362, 0.020140035, 0.011949399, -0.013968734, 0.042732596, -0.011649498, -0.011982721, -0.016967745, -0.0060913274, -0.007130985, -0.013109017, -0.009710136 }; + + var options = new VectorSearchOptions() + { + IndexName = "vector_index", + NumberOfCandidates = 150 + }; + + // run query + var results = collection.Aggregate() + .VectorSearch(movie => movie.PlotEmbedding, vector, 10, options) + .Project(Builders.Projection + .Include(movie => movie.Title) + .Include(movie => movie.Plot)) + .ToList(); + + // print results + foreach (var movie in results) + { + Console.WriteLine(movie.ToJson()); + } + // end-search-example + } + + private static void Setup() + { + // This allows automapping of the camelCase database fields to our models. + var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() }; + ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true); + + // Establish the connection to MongoDB and get the restaurants database + var mongoClient = new MongoClient(_mongoConnectionString); + var restaurantsDatabase = mongoClient.GetDatabase("sample_mflix"); + collection = restaurantsDatabase.GetCollection("embedded_movies"); + } +} + +[BsonIgnoreExtraElements] +public class Movie +{ + public ObjectId Id { get; set; } + public string Plot { get; set; } + public string Title { get; set; } + [BsonElement("plot_embedding")] + public float[] PlotEmbedding { get; set; } +} \ No newline at end of file From 74d1d84de8b5523c2361312f993fb4e1528e8baa Mon Sep 17 00:00:00 2001 From: Michael Morisi Date: Mon, 2 Jun 2025 14:42:09 -0400 Subject: [PATCH 02/10] Fixes --- snooty.toml | 1 + source/atlas-vector-search.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/snooty.toml b/snooty.toml index a97c0c42..c9881c0b 100644 --- a/snooty.toml +++ b/snooty.toml @@ -44,3 +44,4 @@ not-available = "N/A" analyzer = "MongoDB C# Analyzer" analyzer-short = "C# Analyzer" query-api = "MongoDB Query API" +vector-search = "Atlas Vector Search" diff --git a/source/atlas-vector-search.txt b/source/atlas-vector-search.txt index d043d8b6..4af15af7 100644 --- a/source/atlas-vector-search.txt +++ b/source/atlas-vector-search.txt @@ -175,6 +175,7 @@ contains vector data and a vector search index on the ``PlotEmbedding`` field: .. literalinclude:: /includes/fundamentals/code-examples/atlas-vector-search/VectorSearchQueryExample.cs :language: csharp + :dedent: :start-after: start-search-example :end-before: end-search-example :emphasize-lines: 11 From 6862c2eb72bbbe585065b433aab2754fe138a52b Mon Sep 17 00:00:00 2001 From: Michael Morisi Date: Mon, 2 Jun 2025 14:48:43 -0400 Subject: [PATCH 03/10] Fix --- .../code-examples/atlas-vector-search/VectorSearchExamples.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchExamples.cs b/source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchExamples.cs index 88e49dd3..b3ccce25 100644 --- a/source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchExamples.cs +++ b/source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchExamples.cs @@ -40,7 +40,7 @@ public class BinaryVectors public float[] ValuesFloat { get; set; } // end-binary-int-float-serialize - // start-to-query-vector +// start-to-query-vector var binaryVector = new BinaryVectorInt8(new sbyte[] { 0, 1, 2, 3, 4 }); var queryVector = binaryVector.ToQueryVector(); From 6e8e615c6ae23d0a15eeff3872b9bb65d37e0bd6 Mon Sep 17 00:00:00 2001 From: Michael Morisi Date: Mon, 2 Jun 2025 15:25:43 -0400 Subject: [PATCH 04/10] Additions --- source/atlas-vector-search.txt | 52 +++++++++++++++++-- .../VectorSearchQueryExample.cs | 4 +- 2 files changed, 51 insertions(+), 5 deletions(-) diff --git a/source/atlas-vector-search.txt b/source/atlas-vector-search.txt index 4af15af7..fa1b3c29 100644 --- a/source/atlas-vector-search.txt +++ b/source/atlas-vector-search.txt @@ -38,6 +38,21 @@ To learn more about {+vector-search+}, see the :atlas:`{+vector-search+} ` guide in the MongoDB Atlas documentation. +Sample Data +~~~~~~~~~~~ + +The examples in this guide use the ``sample_mflix.embedded_movies`` collection +in the ``sample_mflix`` database. To obtain the sample dataset for this collection, +see :ref:`csharp-get-started`. + +The examples in this guide uses the following sample class to model documents in the +``sample_mflix.embedded_movies`` collection: + +.. literalinclude:: /includes/fundamentals/code-examples/atlas-vector-search/VectorSearchQueryExample.cs + :language: csharp + :start-after: start-sample-class + :end-before: end-sample-class + .. _csharp-supported-vector-types: Supported Vector Embedding Types @@ -158,8 +173,8 @@ to use in a vector search query: :start-after: start-array-query-vector :end-before: end-array-query-vector -Example -~~~~~~~ +Aggregation Pipeline Example +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This example performs the following steps to run an {+vector-search+} query on a collection that contains vector data and a vector search index on the ``PlotEmbedding`` field: @@ -180,6 +195,33 @@ contains vector data and a vector search index on the ``PlotEmbedding`` field: :end-before: end-search-example :emphasize-lines: 11 +LINQ Example +~~~~~~~~~~~~ + +The following code sample performs the same vector search query as the preceding example, but uses +the LINQ syntax instead of the aggregation pipeline syntax: + +.. code-block:: csharp + + var results = collection.AsQueryable() + .VectorSearch(m => m.PlotEmbedding, vector, 10, options) + .Select(m => new { m.Title, m.Plot }); + +Builders Example +~~~~~~~~~~~~~~~~ + +The following code sample performs the same vector search query as the preceding example, +but uses builder classes to construct the aggregation pipeline stages: + +.. code-block:: csharp + + var pipeline = new EmptyPipelineDefinition() + .VectorSearch(m => m.PlotEmbedding, vector, 10, options) + .Project(Builders.Projection + .Include(m => m.Title) + .Include(m => m.Plot)); + + Additional Information ---------------------- @@ -196,7 +238,9 @@ guide, see the following API Documentation: - `BinaryVectorFloat32 <{+new-api-root+}/MongoDB.Bson/MongoDB.Bson.BinaryVectorFloat32.html>`__ - `BinaryVectorInt8 <{+new-api-root+}/MongoDB.Bson/MongoDB.Bson.BinaryVectorInt8.html>`__ - `BinaryVectorFloat32 <{+new-api-root+}/MongoDB.Bson/MongoDB.Bson.BinaryVectorPackedBit.html>`__ +- `QueryVector <{+new-api-root+}/MongoDB.Driver/MongoDB.Driver.QueryVector.html>`__ - `ToQueryVector() <{+new-api-root+}/MongoDB.Driver/MongoDB.Driver.BinaryVectorDriverExtensions.ToQueryVector.html>`__ -- `VectorSearch() <{+new-api-root+}/MongoDB.Driver/MongoDB.Driver.AggregateFluentBase-1.VectorSearch.html>`__ +- `IAggregateFluentExtensions.VectorSearch() <{+new-api-root+}/MongoDB.Driver/MongoDB.Driver.IAggregateFluentExtensions.VectorSearch.html>`__ - `Aggregate() - <{+new-api-root+}/MongoDB.Driver/MongoDB.Driver.IMongoCollectionExtensions.Aggregate.html>`__ \ No newline at end of file + <{+new-api-root+}/MongoDB.Driver/MongoDB.Driver.IMongoCollectionExtensions.Aggregate.html>`__ +- `MongoQueryable.VectorSearch() <{+new-api-root+}/MongoDB.Driver/MongoDB.Driver.Linq.MongoQueryable.VectorSearch.html>`__ \ No newline at end of file diff --git a/source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchQueryExample.cs b/source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchQueryExample.cs index d04587e3..a6e0071d 100644 --- a/source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchQueryExample.cs +++ b/source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchQueryExample.cs @@ -53,6 +53,7 @@ private static void Setup() } } +// start-sample-class [BsonIgnoreExtraElements] public class Movie { @@ -61,4 +62,5 @@ public class Movie public string Title { get; set; } [BsonElement("plot_embedding")] public float[] PlotEmbedding { get; set; } -} \ No newline at end of file +} +// end-sample-class \ No newline at end of file From 8386b7cb6d7a48ddd3341304ecbf9d1328d7877a Mon Sep 17 00:00:00 2001 From: Michael Morisi Date: Mon, 2 Jun 2025 15:26:38 -0400 Subject: [PATCH 05/10] Fix --- source/atlas-vector-search.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/atlas-vector-search.txt b/source/atlas-vector-search.txt index fa1b3c29..28d3139d 100644 --- a/source/atlas-vector-search.txt +++ b/source/atlas-vector-search.txt @@ -243,4 +243,6 @@ guide, see the following API Documentation: - `IAggregateFluentExtensions.VectorSearch() <{+new-api-root+}/MongoDB.Driver/MongoDB.Driver.IAggregateFluentExtensions.VectorSearch.html>`__ - `Aggregate() <{+new-api-root+}/MongoDB.Driver/MongoDB.Driver.IMongoCollectionExtensions.Aggregate.html>`__ -- `MongoQueryable.VectorSearch() <{+new-api-root+}/MongoDB.Driver/MongoDB.Driver.Linq.MongoQueryable.VectorSearch.html>`__ \ No newline at end of file +- `MongoQueryable.VectorSearch() <{+new-api-root+}/MongoDB.Driver/MongoDB.Driver.Linq.MongoQueryable.VectorSearch.html>`__ +- `PipelineStageDefinitionBuilder.VectorSearch() + <{+new-api-root+}/MongoDB.Driver/MongoDB.Driver.PipelineStageDefinitionBuilder.VectorSearch.html>`__ \ No newline at end of file From b1416e010a10dcae2d926d40269dde7b3dfbc970 Mon Sep 17 00:00:00 2001 From: Michael Morisi Date: Mon, 2 Jun 2025 15:35:14 -0400 Subject: [PATCH 06/10] Fix --- source/atlas-vector-search.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/atlas-vector-search.txt b/source/atlas-vector-search.txt index 28d3139d..fa0993f8 100644 --- a/source/atlas-vector-search.txt +++ b/source/atlas-vector-search.txt @@ -45,7 +45,7 @@ The examples in this guide use the ``sample_mflix.embedded_movies`` collection in the ``sample_mflix`` database. To obtain the sample dataset for this collection, see :ref:`csharp-get-started`. -The examples in this guide uses the following sample class to model documents in the +The examples in this guide use the following sample class to model documents in the ``sample_mflix.embedded_movies`` collection: .. literalinclude:: /includes/fundamentals/code-examples/atlas-vector-search/VectorSearchQueryExample.cs @@ -202,6 +202,7 @@ The following code sample performs the same vector search query as the preceding the LINQ syntax instead of the aggregation pipeline syntax: .. code-block:: csharp + :emphasize-lines: 2 var results = collection.AsQueryable() .VectorSearch(m => m.PlotEmbedding, vector, 10, options) @@ -214,6 +215,7 @@ The following code sample performs the same vector search query as the preceding but uses builder classes to construct the aggregation pipeline stages: .. code-block:: csharp + :emphasize-lines: 2 var pipeline = new EmptyPipelineDefinition() .VectorSearch(m => m.PlotEmbedding, vector, 10, options) From ef6bc544b3325ecc1c9469329415a53b23f99d7a Mon Sep 17 00:00:00 2001 From: Michael Morisi Date: Tue, 3 Jun 2025 10:18:25 -0400 Subject: [PATCH 07/10] SA feedback --- snooty.toml | 2 +- source/atlas-vector-search.txt | 43 ++++++------ .../VectorSearchQueryExample.cs | 24 ++++++- source/indexes.txt | 2 +- source/serialization.txt | 65 +++++++++++++++++++ 5 files changed, 109 insertions(+), 27 deletions(-) diff --git a/snooty.toml b/snooty.toml index c9881c0b..7d9b7198 100644 --- a/snooty.toml +++ b/snooty.toml @@ -44,4 +44,4 @@ not-available = "N/A" analyzer = "MongoDB C# Analyzer" analyzer-short = "C# Analyzer" query-api = "MongoDB Query API" -vector-search = "Atlas Vector Search" +avs = "Atlas Vector Search" diff --git a/source/atlas-vector-search.txt b/source/atlas-vector-search.txt index fa0993f8..0e77f7d2 100644 --- a/source/atlas-vector-search.txt +++ b/source/atlas-vector-search.txt @@ -1,8 +1,8 @@ .. _csharp-atlas-vector-search: -=================== -{+vector-search+} -=================== +================================ +Run an Atlas Vector Search Query +================================ .. facet:: :name: genre @@ -20,7 +20,7 @@ Overview -------- -You can use {+vector-search+} to perform vector search on your data stored in +You can use {+avs+} to perform vector search on your data stored in Atlas. Vector search allows you to query your data based on semantic meaning rather than just keyword matches, which helps you retrieve more relevant search results. It enables your AI-powered applications to support use cases such as @@ -31,10 +31,10 @@ By using Atlas as a vector database, you can seamlessly index vector data along with your other data in Atlas. This allows you to filter on fields in your collection and perform vector search queries against vector data. You can also combine vector search with full-text search queries to return the most relevant -results for your use case. You can integrate {+vector-search+} with popular AI +results for your use case. You can integrate {+avs+} with popular AI frameworks and services to easily implement vector search in your applications. -To learn more about {+vector-search+}, see the :atlas:`{+vector-search+} +To learn more about {+avs+}, see the :atlas:`{+avs+} ` guide in the MongoDB Atlas documentation. @@ -148,7 +148,7 @@ vector data and a vector search index that covers that field. .. tip:: - To learn more about configuring a collection for vector search, see the :atlas:`{+vector-search+} + To learn more about configuring a collection for vector search, see the :atlas:`{+avs+} ` guide in the MongoDB Atlas documentation. @@ -176,7 +176,7 @@ to use in a vector search query: Aggregation Pipeline Example ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -This example performs the following steps to run an {+vector-search+} query on a collection that +This example performs the following steps to run an {+avs+} query on a collection that contains vector data and a vector search index on the ``PlotEmbedding`` field: 1. Creates an array that contains the :ref:`array-represented @@ -201,33 +201,30 @@ LINQ Example The following code sample performs the same vector search query as the preceding example, but uses the LINQ syntax instead of the aggregation pipeline syntax: -.. code-block:: csharp +.. literalinclude:: /includes/fundamentals/code-examples/atlas-vector-search/VectorSearchQueryExample.cs + :language: csharp + :start-after: start-linq-example + :end-before: end-linq-example + :dedent: :emphasize-lines: 2 - var results = collection.AsQueryable() - .VectorSearch(m => m.PlotEmbedding, vector, 10, options) - .Select(m => new { m.Title, m.Plot }); - Builders Example ~~~~~~~~~~~~~~~~ The following code sample performs the same vector search query as the preceding example, but uses builder classes to construct the aggregation pipeline stages: -.. code-block:: csharp +.. literalinclude:: /includes/fundamentals/code-examples/atlas-vector-search/VectorSearchQueryExample.cs + :language: csharp + :start-after: start-builders-example + :end-before: end-builders-example + :dedent: :emphasize-lines: 2 - var pipeline = new EmptyPipelineDefinition() - .VectorSearch(m => m.PlotEmbedding, vector, 10, options) - .Project(Builders.Projection - .Include(m => m.Title) - .Include(m => m.Plot)); - - Additional Information ---------------------- -To learn more about {+vector-search+}, see the :atlas:`{+vector-search+} +To learn more about {+avs+}, see the :atlas:`{+avs+} ` guide in the MongoDB Atlas documentation. @@ -239,7 +236,7 @@ guide, see the following API Documentation: - `BinaryVectorFloat32 <{+new-api-root+}/MongoDB.Bson/MongoDB.Bson.BinaryVectorFloat32.html>`__ - `BinaryVectorInt8 <{+new-api-root+}/MongoDB.Bson/MongoDB.Bson.BinaryVectorInt8.html>`__ -- `BinaryVectorFloat32 <{+new-api-root+}/MongoDB.Bson/MongoDB.Bson.BinaryVectorPackedBit.html>`__ +- `BinaryVectorPackedBit <{+new-api-root+}/MongoDB.Bson/MongoDB.Bson.BinaryVectorPackedBit.html>`__ - `QueryVector <{+new-api-root+}/MongoDB.Driver/MongoDB.Driver.QueryVector.html>`__ - `ToQueryVector() <{+new-api-root+}/MongoDB.Driver/MongoDB.Driver.BinaryVectorDriverExtensions.ToQueryVector.html>`__ - `IAggregateFluentExtensions.VectorSearch() <{+new-api-root+}/MongoDB.Driver/MongoDB.Driver.IAggregateFluentExtensions.VectorSearch.html>`__ diff --git a/source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchQueryExample.cs b/source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchQueryExample.cs index a6e0071d..9e84ea2f 100644 --- a/source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchQueryExample.cs +++ b/source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchQueryExample.cs @@ -24,7 +24,7 @@ public static void Main(string[] args) NumberOfCandidates = 150 }; - // run query + // Run vector search query var results = collection.Aggregate() .VectorSearch(movie => movie.PlotEmbedding, vector, 10, options) .Project(Builders.Projection @@ -32,7 +32,7 @@ public static void Main(string[] args) .Include(movie => movie.Plot)) .ToList(); - // print results + // Print the results foreach (var movie in results) { Console.WriteLine(movie.ToJson()); @@ -51,6 +51,26 @@ private static void Setup() var restaurantsDatabase = mongoClient.GetDatabase("sample_mflix"); collection = restaurantsDatabase.GetCollection("embedded_movies"); } + + private static void BuilderExample() + { + // start-builder-example + var pipeline = new EmptyPipelineDefinition() + .VectorSearch(m => m.PlotEmbedding, vector, 10, options) + .Project(Builders.Projection + .Include(m => m.Title) + .Include(m => m.Plot)); + // end-builder-example + } + + private static void LinqExample() + { + // start-linq-example + var results = collection.AsQueryable() + .VectorSearch(m => m.PlotEmbedding, vector, 10, options) + .Select(m => new { m.Title, m.Plot }); + // end-linq-example + } } // start-sample-class diff --git a/source/indexes.txt b/source/indexes.txt index dbc2f98c..57825581 100644 --- a/source/indexes.txt +++ b/source/indexes.txt @@ -86,7 +86,7 @@ and provide sample code for creating each index type. .. note:: - These example uses the ``sample_mflix.movies`` and ``sample_mflix.theaters`` collections + The examples on this page use the ``sample_mflix.movies`` and ``sample_mflix.theaters`` collections from the :atlas:`Atlas sample datasets `. To learn how to create a free MongoDB Atlas cluster and load the sample datasets, see :ref:`csharp-get-started`. diff --git a/source/serialization.txt b/source/serialization.txt index f652628c..a1cce584 100644 --- a/source/serialization.txt +++ b/source/serialization.txt @@ -184,6 +184,71 @@ Implementing the `IBsonArraySerializer interface enables the driver to access serialization information for individual items in an array. +.. _csharp-array-serialization:Add commentMore actions + +Improve Array Serialization Performance +--------------------------------------- + +You can improve your application's performance by representing +arrays of primitives as `Memory `__ +and `ReadOnlyMemory `__ +structs instead of by using types such as standard {+language+} arrays or +``BsonArray`` objects. The driver implements fast serialization and +deserialization paths for ``Memory`` and ``ReadOnlyMemory``, which +enhances speed and reduces memory usage. + +.. note:: + + Truncation and overflow checks are not supported for ``Memory`` or + ``ReadOnlyMemory``, but these checks are implemented for standard + arrays. + +You can effect these performance improvements by storing the following +primitive types in ``Memory`` or ``ReadOnlyMemory`` structs: + +- ``bool`` +- ``sbyte`` +- ``byte`` +- ``char`` +- ``short`` +- ``ushort`` +- ``int`` +- ``uint`` +- ``long`` +- ``ulong`` +- ``float`` +- ``double`` +- ``decimal`` + +The following example defines a ``Line`` POCO that contains array fields +modeled by ``Memory`` and ``ReadOnlyMemory`` structs: + +.. literalinclude:: /includes/fundamentals/code-examples/MemorySerialization.cs + :start-after: start-line-class + :end-before: end-line-class + :language: csharp + :dedent: + +The following document represents how a sample ``Line`` object is +represented in MongoDB: + +.. code-block:: json + + { + "_id": ..., + "X": [ 1, 2, 3, 4, 5 ], + "Y": [ 1, 1.409999966621399, 1.7300000190734863, 2, 2.240000009536743 ] + } + +.. tip:: Model Vectors + + :ref:`csharp-atlas-vector-search` involves creating and querying + large numerical arrays. If your application uses + {+vector-search+}, you might benefit from the performance + improvements from using ``Memory`` and ``ReadOnlyMemory`` to store + array representations of embeddings and query vectors. To learn more, + see :ref:`csharp-supported-vector-types` in the {+vector-search+} guide. + Additional Information ---------------------- From 49c37505300d83e9b75ab146091e9fa62ff0b355 Mon Sep 17 00:00:00 2001 From: Michael Morisi Date: Tue, 3 Jun 2025 10:25:13 -0400 Subject: [PATCH 08/10] Fix --- .../atlas-vector-search/VectorSearchQueryExample.cs | 6 +++--- source/serialization.txt | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchQueryExample.cs b/source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchQueryExample.cs index 9e84ea2f..8a805fc3 100644 --- a/source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchQueryExample.cs +++ b/source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchQueryExample.cs @@ -52,15 +52,15 @@ private static void Setup() collection = restaurantsDatabase.GetCollection("embedded_movies"); } - private static void BuilderExample() + private static void BuildersExample() { - // start-builder-example + // start-builders-example var pipeline = new EmptyPipelineDefinition() .VectorSearch(m => m.PlotEmbedding, vector, 10, options) .Project(Builders.Projection .Include(m => m.Title) .Include(m => m.Plot)); - // end-builder-example + // end-builders-example } private static void LinqExample() diff --git a/source/serialization.txt b/source/serialization.txt index a1cce584..89a443b1 100644 --- a/source/serialization.txt +++ b/source/serialization.txt @@ -184,7 +184,7 @@ Implementing the `IBsonArraySerializer interface enables the driver to access serialization information for individual items in an array. -.. _csharp-array-serialization:Add commentMore actions +.. _csharp-array-serialization: Improve Array Serialization Performance --------------------------------------- From 9ff16d8c448e87118a1ab4aaddfe804322f347f2 Mon Sep 17 00:00:00 2001 From: Michael Morisi Date: Tue, 3 Jun 2025 13:49:09 -0400 Subject: [PATCH 09/10] Fixes --- .../code-examples/MemorySerialization.cs | 37 +++++++++++++++++++ source/serialization.txt | 4 +- 2 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 source/includes/fundamentals/code-examples/MemorySerialization.cs diff --git a/source/includes/fundamentals/code-examples/MemorySerialization.cs b/source/includes/fundamentals/code-examples/MemorySerialization.cs new file mode 100644 index 00000000..00231843 --- /dev/null +++ b/source/includes/fundamentals/code-examples/MemorySerialization.cs @@ -0,0 +1,37 @@ +using MongoDB.Bson;Add commentMore actions +using MongoDB.Bson.Serialization.Conventions; +using MongoDB.Driver; + +public class Program +{ + public static void Main(string[] args) + { + // Replace with your connection string + const string uri = ""; + + var mongoClient = new MongoClient(uri); + var database = mongoClient.GetDatabase("db"); + var _collection = database.GetCollection("lines"); + + var line = new Line + { + X = new Memory(new[] { 1, 2, 3, 4, 5 }), + Y = new ReadOnlyMemory(new[] { 1f, 1.41f, 1.73f, 2f, 2.24f }) + }; + + var filter = Builders.Filter.Empty; + + var result = _collection.Find(filter).FirstOrDefault().ToJson(); + Console.WriteLine(result); + } + +} + +// start-line-class +public class Line +{ + public ObjectId Id { get; set; } + public Memory X { get; set; } + public ReadOnlyMemory Y { get; set; } +} +// end-line-class \ No newline at end of file diff --git a/source/serialization.txt b/source/serialization.txt index 89a443b1..101c4ac3 100644 --- a/source/serialization.txt +++ b/source/serialization.txt @@ -244,10 +244,10 @@ represented in MongoDB: :ref:`csharp-atlas-vector-search` involves creating and querying large numerical arrays. If your application uses - {+vector-search+}, you might benefit from the performance + {+avs+}, you might benefit from the performance improvements from using ``Memory`` and ``ReadOnlyMemory`` to store array representations of embeddings and query vectors. To learn more, - see :ref:`csharp-supported-vector-types` in the {+vector-search+} guide. + see :ref:`csharp-supported-vector-types` in the {+avs+} guide. Additional Information ---------------------- From ac4efac03061ee2c8f9156d92e38efff5535c3b9 Mon Sep 17 00:00:00 2001 From: Michael Morisi Date: Wed, 4 Jun 2025 10:40:10 -0400 Subject: [PATCH 10/10] Fix --- .../atlas-vector-search/VectorSearchQueryExample.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchQueryExample.cs b/source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchQueryExample.cs index 8a805fc3..badf8283 100644 --- a/source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchQueryExample.cs +++ b/source/includes/fundamentals/code-examples/atlas-vector-search/VectorSearchQueryExample.cs @@ -46,10 +46,10 @@ private static void Setup() var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() }; ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true); - // Establish the connection to MongoDB and get the restaurants database + // Establish the connection to MongoDB and get the embedded_movies database var mongoClient = new MongoClient(_mongoConnectionString); - var restaurantsDatabase = mongoClient.GetDatabase("sample_mflix"); - collection = restaurantsDatabase.GetCollection("embedded_movies"); + var movieDatabase = mongoClient.GetDatabase("sample_mflix"); + collection = movieDatabase.GetCollection("embedded_movies"); } private static void BuildersExample()