{"id":4412,"date":"2024-12-25T01:00:40","date_gmt":"2024-12-25T09:00:40","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\/"},"modified":"2024-12-25T01:00:40","modified_gmt":"2024-12-25T09:00:40","slug":"single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\/","title":{"rendered":"Single Platform, Multi-Purpose Couchbase: Vector Search, Geospatial, SQL++, and More"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><span>There are use cases that are best served by multiple types of data access, including SQL, vector search, geospatial queries, and key-value access. One approach is to combine\/chain together multiple data systems for each access method. However, the <\/span><a href=\"https:\/\/cloud.couchbase.com\/sign-up\"><span>Couchbase approach<\/span><\/a><span> makes it possible to combine these different types of queries to solve real-world problems.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>This article walks through aspects of the demo application &#8220;What is This Thing?&#8221; (aka &#8220;WITT&#8221;). For more context and background, check out:<\/span><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/mgroves\/WhatIsThisThing\"><span>GitHub Repository for &#8220;What is This Thing?&#8221;<\/span><\/a><\/li>\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=sYy0ob2GqUo\"><span>Short overview video of &#8220;What is This Thing?&#8221;<\/span><\/a><\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><i><span>This blog post is part of the <\/span><\/i><a href=\"https:\/\/csadvent.christmas\/\"><i><span>2024 C# Advent<\/span><\/i><\/a><i><span>. However, you don\u2019t need to understand C# to read this post: the concepts are applicable to any of the <\/span><\/i><a href=\"https:\/\/docs.couchbase.com\/home\/sdk.html\"><i><span>many SDKs available for Couchbase<\/span><\/i><\/a><i><span>.<\/span><\/i><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Vector Search: The Basics<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><span>Vector search is useful for applications that need to find similar items. For example, embeddings created by AI models can be indexed and searched. Each item in WITT is modeled like this:<\/span><\/p>\n\n\n<p>[crayon nums=&#8221;false&#8221; lang=&#8221;yaml&#8221; decode=&#8221;true&#8221;]{<br \/>\n\u00a0 &#8220;name&#8221;: &#8220;Reticulated Splines&#8221;,<br \/>\n\u00a0 &#8220;desc&#8221;: &#8220;Specialized grooves used in advanced machinery for precise alignment.&#8221;,<br \/>\n\u00a0 &#8220;price&#8221;: 19.99,<br \/>\n\u00a0 &#8220;image&#8221;: &#8220;data:image\/png;base64,&#8230;&#8221;,<br \/>\n\u00a0 &#8220;rating&#8221;: 5,<br \/>\n\u00a0 &#8220;imageVector&#8221;: [ -4.5390625, 0.32543945, &#8230; ]<br \/>\n}[\/crayon]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><i><span>Note: The <\/span><\/i><i><span>image<\/span><\/i><i><span> of the item is stored as a base64-encoded string. In a production project, I\u2019d recommend using file storage, S3, etc, rather than storing it in the database.<\/span><\/i><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span><code>imageVector<\/code><\/span><span> is retrieved by uploading the image to an AI image model, like <\/span><a href=\"https:\/\/azure.microsoft.com\/en-us\/products\/ai-services\/ai-vision\/\"><span>Azure Computer Vision<\/span><\/a><span>.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.couchbase.com\/wp-content\/uploads\/sites\/5\/2026\/05\/image1-3-4.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-16721\" src=\"https:\/\/www.couchbase.com\/wp-content\/uploads\/sites\/5\/2026\/05\/image1-3-4.png\" alt=\"\" width=\"916\" height=\"663\"><\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><i><span>Note: One of the features of the just-announced <\/span><\/i><a href=\"https:\/\/www.couchbase.com\/products\/ai-services\/\"><i><span>Capella AI services<\/span><\/i><\/a><i><span> is model hosting, which will reduce the latency of this step, and also increase privacy and flexibility, and potentially reduce costs.<\/span><\/i><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Image Embeddings and Nearest Neighbor Search<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><span>With a vector search index on the <\/span><span>imageVector<\/span><span> field, Couchbase can perform nearest neighbor searches. In this case, that search would find items that are visually similar (according to the AI model). So, if a user has an image, and they want to find an item in Couchbase that is most similar to that image, a vector search index can do this:<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.couchbase.com\/wp-content\/uploads\/sites\/5\/2026\/05\/image2-2-5.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-16722\" src=\"https:\/\/www.couchbase.com\/wp-content\/uploads\/sites\/5\/2026\/05\/image2-2-5.png\" alt=\"\" width=\"747\" height=\"703\"><\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>Here\u2019s the code in WITT that, for a given image, <\/span><a href=\"https:\/\/github.com\/mgroves\/WhatIsThisThing\/blob\/main\/WhatIsThisThing.Core\/Services\/AzureEmbeddingService.cs\"><span>requests a vector embedding<\/span><\/a><span> from Azure Computer Vision:<\/span><\/p>\n\n\n<p>[crayon nums=&#8221;false&#8221; lang=&#8221;c#&#8221; decode=&#8221;true&#8221;]\/\/ Free tier: 20 Calls per minute, 5K Calls per month<br \/>\n\/\/ Standard tier: 10 Calls per second, starting $1.00 USD\/1000 calls (Estimated)<br \/>\npublic async Task&lt;float[]&gt; GetImageEmbedding(string base64Image)<br \/>\n{<br \/>\n\u00a0 \u00a0 var endpoint = _settings.Value.Endpoint;<br \/>\n\u00a0 \u00a0 var subscriptionKey = _settings.Value.SubscriptionKey;<\/p>\n<p>\u00a0 \u00a0 using (HttpClient client = new HttpClient())<br \/>\n\u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \/\/ Set the subscription key and endpoint<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 client.DefaultRequestHeaders.Add(&#8220;Ocp-Apim-Subscription-Key&#8221;, subscriptionKey);<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \/\/ Endpoint URL<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 string url = $&#8221;{endpoint}\/retrieval:vectorizeImage?overload=stream&amp;api-version=2023-04-01-preview&#8221;;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 byte[] imageBytes = Base64PngToByteArray(base64Image);<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 using (ByteArrayContent content = new ByteArrayContent(imageBytes))<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 content.Headers.ContentType = new MediaTypeHeaderValue(&#8220;application\/octet-stream&#8221;);<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 HttpResponseMessage response = await client.PostAsync(url, content);<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 string jsonResponse = await response.Content.ReadAsStringAsync();<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (response.IsSuccessStatusCode)<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ Parse the JSON response to extract the vector embeddings<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 JObject json = JObject.Parse(jsonResponse);<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 JToken vectorEmbeddings = json[&#8220;vector&#8221;];<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return vectorEmbeddings.ToObject&lt;float[]&gt;();<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 throw new Exception(&#8220;Unable to retrieve vector embeddings for image.&#8221;);<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 }<br \/>\n\u00a0 \u00a0 }<br \/>\n}[\/crayon]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>There are probably frameworks that can handle this call too, but for this simple demo, that only requires a single REST call, I found this to be sufficient. If you want to use something other than Azure with this demo, you need to implement <\/span><span><code>IEmbeddingService<\/code><\/span><span>.<\/span><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Multi-Purpose Queries with SQL++<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><span>Many databases with vector search can perform a very similar operation. What Couchbase enables you to do is to perform multiple types of data operations with a single platform, a single pool of data. For instance, given a geospatial location (which can be retrieved through a web browser), you can not only query to find a similar item by image, but also combine that with a geospatial search, all through a single SQL++ query:<\/span><\/p>\n\n\n<p>[crayon nums=&#8221;false&#8221; lang=&#8221;default&#8221; decode=&#8221;true&#8221;]WITH closestStores AS (\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<br \/>\n\u00a0 \u00a0 \/* CTE to get closest stores based on user&#8217;s location *\/<br \/>\n\u00a0 \u00a0 SELECT x.name, META(x).id AS id<br \/>\n\u00a0 \u00a0 FROM whatisthis._default.Stores x<br \/>\n\u00a0 \u00a0 WHERE SEARCH(x, {<br \/>\n\u00a0 \u00a0 \u00a0 &#8220;fields&#8221;: [&#8220;*&#8221;],<br \/>\n\u00a0 \u00a0 \u00a0 &#8220;query&#8221; : {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 &#8220;location&#8221; : {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;lat&#8221; : 39.8787,<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;lon&#8221; : -83.0805<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 },<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 &#8220;distance&#8221; : &#8220;15mi&#8221;,<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 &#8220;field&#8221; : &#8220;geo&#8221;<br \/>\n\u00a0 \u00a0 \u00a0 } . . .<br \/>\n\u00a0 })<\/p>\n<p>\u00a0 LIMIT 3<br \/>\n)<br \/>\n\/* SELECT items with nearby stock *\/<br \/>\nSELECT allItems.name, allItems.`desc`, allItems.image, allItems.price, allItems.rating, SEARCH_SCORE(allItems) AS score,<\/p>\n<p>\u00a0 \u00a0 \/* subquery to get stock from nearby locations *\/<br \/>\n\u00a0 \u00a0 (SELECT . . . ) AS stock<\/p>\n<p>FROM whatisthis._default.Items AS allItems<\/p>\n<p>\/* vector search using image embedding *\/<br \/>\nWHERE SEARCH(allItems,<br \/>\n\u00a0 {<br \/>\n\u00a0 \u00a0 &#8220;fields&#8221;: [&#8220;*&#8221;],<br \/>\n\u00a0 \u00a0 &#8220;query&#8221;: { &#8220;match_none&#8221;: {} },<br \/>\n\u00a0 \u00a0 &#8220;knn&#8221;: [<br \/>\n\u00a0 \u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 &#8220;k&#8221;: 4,<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 &#8220;field&#8221;: &#8220;imageVector&#8221;,<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 &#8220;vector&#8221;: [ -0.9135742,1.1552734, &#8230; ]<br \/>\n\u00a0 \u00a0 \u00a0 }<br \/>\n\u00a0 \u00a0 ]<br \/>\n\u00a0 }<br \/>\n)<br \/>\nORDER BY score DESC[\/crayon]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><i><span>Note: this query was edited for brevity\u2019s sake. Check out <\/span><\/i><a href=\"https:\/\/github.com\/mgroves\/WhatIsThisThing\/blob\/main\/WhatIsThisThing.Core\/Services\/DataLayer.cs\"><i><span>DataLayer.cs<\/span><\/i><\/a><i><span> for a more complete view of the queries.<\/span><\/i><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>The result of this query is a &#8220;most likely match&#8221; for a given image. For example, here is the top result when uploading a picture of a pen:<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.couchbase.com\/wp-content\/uploads\/sites\/5\/2026\/05\/image3-1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-16723\" src=\"https:\/\/www.couchbase.com\/wp-content\/uploads\/sites\/5\/2026\/05\/image3-1.jpg\" alt=\"\" width=\"469\" height=\"743\"><\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>The quality of matches will depend on:<\/span><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span>The quality of the AI model<\/span><\/li>\n\n\n<li><span>The quality\/quantity of the images for a given item<\/span><\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><span>In my limited testing, I\u2019ve found the Azure Computer Vision model to be very good for matching relevant images.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>The result also will contain nearby stores, where the item is available for purchase.<\/span><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Beyond Vector Search and Geospatial<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><span>This query showed Couchbase\u2019s ability to combine vector search AND geospatial search into a single operation. It also contained a CTE, JOINs, and a subquery.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>Within a single query, you can also perform:<\/span><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/docs.couchbase.com\/cloud\/search\/search.html\"><span>Full Text Search<\/span><\/a><span>, including scoring, facets, boosting, etc.<\/span><\/li>\n\n\n<li><a href=\"https:\/\/docs.couchbase.com\/cloud\/n1ql\/n1ql-language-reference\/time-series.html\"><span>Time series<\/span><\/a><span> operations<\/span><\/li>\n\n\n<li><a href=\"https:\/\/docs.couchbase.com\/cloud\/n1ql\/n1ql-language-reference\/userfun.html\"><span>User-defined functions (UDFs)<\/span><\/a><span> for adding custom code (JavaScript or SQL)<\/span><\/li>\n\n\n<li><a href=\"https:\/\/docs.couchbase.com\/cloud\/n1ql\/query.html\"><span>Full SQL capabilities<\/span><\/a><span>: window functions, CTEs, JOINs, aggregation, and more<\/span><\/li>\n\n\n<li><span>Read from real-time analytics data via <\/span><a href=\"https:\/\/docs.couchbase.com\/columnar\/sqlpp\/5_dml_copy_to_kv.html\"><span>write-back<\/span><\/a><\/li>\n\n\n<li><span>Query data that\u2019s automatically synced from <\/span><a href=\"https:\/\/docs.couchbase.com\/home\/mobile.html\"><span>mobile\/edge devices<\/span><\/a><\/li>\n\n\n<li><span>Automatic <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/current\/learn\/buckets-memory-and-storage\/memory-and-storage.html\"><span>caching<\/span><\/a><span> (built-in)<\/span><\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><i><span>Here\u2019s the marketing section<\/span><\/i><span>: Some databases may only be able to perform a subset of these operations, and require you to bring in other tools when you need additional functionality. This increases your costs, latency, and complexity. With Couchbase, you can keep your application simpler, faster, and cheaper. <\/span><i><span>Marketing section over.<\/span><\/i><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Technical Highlights<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><span>The WITT demo application referenced is built with:<\/span><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span>React UI frontend<\/span><\/li>\n\n\n<li><span>ASP.NET Core backend<\/span><\/li>\n\n\n<li><span>Azure Computer Vision<\/span><\/li>\n\n\n<li><span>Couchbase .NET SDK<\/span><\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><span>You can also check out <\/span><a href=\"https:\/\/whatisthisthing.azurewebsites.net\/\"><span>What is This Thing?<\/span><\/a><span> as a public demo. (<\/span><i><span>Keep in mind that it is all built with free-tier hosting (Azure and <\/span><\/i><a href=\"https:\/\/cloud.couchbase.com\/sign-up\"><i><span>Capella Free Tier<\/span><\/i><\/a><i><span>), and that it is still actively being developed. If you notice some slowness or downtime, that could be because of too much traffic, sorry!<\/span><\/i><span>)<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><iframe loading=\"lazy\" title=\"Couchbase Capella vector and hybrid search demo: &quot;What is this thing?&quot;\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/sYy0ob2GqUo?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>There are use cases that are best served by multiple types of data access, including SQL, vector search, geospatial queries, and key-value access. One approach is to combine\/chain together multiple data systems for each access method. However, the Couchbase approach makes it possible to combine these different types of queries to solve real-world problems. This [&hellip;]<\/p>\n","protected":false},"author":71,"featured_media":4411,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"_acf":"","footnotes":""},"categories":[33,598,67,324,458,18,715],"tags":[796,837,588],"ppma_author":[186],"class_list":["post-4412","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-artificial-intelligence-ai","category-c-sharp","category-full-text-search","category-geospatial","category-n1ql-query","category-vector-search","tag-embeddings","tag-hybrid-search","tag-multimodel"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.6 (Yoast SEO v27.6) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Single Platform, Multi-Purpose Couchbase: Vector Search, Geospatial, SQL++, and More - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"See how Couchbase unites SQL, vector search, and geospatial queries in the &#039;What is This Thing?&#039; demo for seamless AI-driven data access.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Single Platform, Multi-Purpose Couchbase: Vector Search, Geospatial, SQL++, and More\" \/>\n<meta property=\"og:description\" content=\"See how Couchbase unites SQL, vector search, and geospatial queries in the &#039;What is This Thing?&#039; demo for seamless AI-driven data access.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-12-25T09:00:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/blog-couchbase-vector-and-more-.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2400\" \/>\n\t<meta property=\"og:image:height\" content=\"1256\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Matthew Groves\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mgroves\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthew Groves\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\\\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"Single Platform, Multi-Purpose Couchbase: Vector Search, Geospatial, SQL++, and More\",\"datePublished\":\"2024-12-25T09:00:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\\\/\"},\"wordCount\":1075,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/blog-couchbase-vector-and-more-.png\",\"keywords\":[\"embeddings\",\"hybrid search\",\"multimodel\"],\"articleSection\":[\".NET\",\"Artificial Intelligence (AI)\",\"C#\",\"Full-Text Search\",\"Geospatial\",\"SQL++ \\\/ N1QL Query\",\"Vector Search\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\\\/\",\"name\":\"Single Platform, Multi-Purpose Couchbase: Vector Search, Geospatial, SQL++, and More - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/blog-couchbase-vector-and-more-.png\",\"datePublished\":\"2024-12-25T09:00:40+00:00\",\"description\":\"See how Couchbase unites SQL, vector search, and geospatial queries in the 'What is This Thing?' demo for seamless AI-driven data access.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/blog-couchbase-vector-and-more-.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/blog-couchbase-vector-and-more-.png\",\"width\":2400,\"height\":1256},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Single Platform, Multi-Purpose Couchbase: Vector Search, Geospatial, SQL++, and More\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/06\\\/logo.svg\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/06\\\/logo.svg\",\"width\":\"1024\",\"height\":\"1024\",\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/3929663e372020321b0152dc4fa65a58\",\"name\":\"Matthew Groves\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=gba51e6aacc53995c323a634e4502ef54\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"caption\":\"Matthew Groves\"},\"description\":\"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.\",\"sameAs\":[\"https:\\\/\\\/crosscuttingconcerns.com\",\"https:\\\/\\\/x.com\\\/mgroves\"],\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/author\\\/matthew-groves\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Single Platform, Multi-Purpose Couchbase: Vector Search, Geospatial, SQL++, and More - The Couchbase Blog","description":"See how Couchbase unites SQL, vector search, and geospatial queries in the 'What is This Thing?' demo for seamless AI-driven data access.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\/","og_locale":"en_US","og_type":"article","og_title":"Single Platform, Multi-Purpose Couchbase: Vector Search, Geospatial, SQL++, and More","og_description":"See how Couchbase unites SQL, vector search, and geospatial queries in the 'What is This Thing?' demo for seamless AI-driven data access.","og_url":"https:\/\/www.couchbase.com\/blog\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\/","og_site_name":"The Couchbase Blog","article_published_time":"2024-12-25T09:00:40+00:00","og_image":[{"width":2400,"height":1256,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/blog-couchbase-vector-and-more-.png","type":"image\/png"}],"author":"Matthew Groves","twitter_card":"summary_large_image","twitter_creator":"@mgroves","twitter_misc":{"Written by":"Matthew Groves","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"Single Platform, Multi-Purpose Couchbase: Vector Search, Geospatial, SQL++, and More","datePublished":"2024-12-25T09:00:40+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\/"},"wordCount":1075,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/blog-couchbase-vector-and-more-.png","keywords":["embeddings","hybrid search","multimodel"],"articleSection":[".NET","Artificial Intelligence (AI)","C#","Full-Text Search","Geospatial","SQL++ \/ N1QL Query","Vector Search"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\/","url":"https:\/\/www.couchbase.com\/blog\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\/","name":"Single Platform, Multi-Purpose Couchbase: Vector Search, Geospatial, SQL++, and More - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/blog-couchbase-vector-and-more-.png","datePublished":"2024-12-25T09:00:40+00:00","description":"See how Couchbase unites SQL, vector search, and geospatial queries in the 'What is This Thing?' demo for seamless AI-driven data access.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/blog-couchbase-vector-and-more-.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/blog-couchbase-vector-and-more-.png","width":2400,"height":1256},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/single-platform-multi-purpose-couchbase-vector-search-geospatial-sql-more\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Single Platform, Multi-Purpose Couchbase: Vector Search, Geospatial, SQL++, and More"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"The Couchbase Blog","description":"Couchbase, the NoSQL Database","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/06\/logo.svg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/06\/logo.svg","width":"1024","height":"1024","caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58","name":"Matthew Groves","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=gba51e6aacc53995c323a634e4502ef54","url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","caption":"Matthew Groves"},"description":"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/author\/matthew-groves\/"}]}},"acf":[],"authors":[{"term_id":186,"user_id":71,"is_guest":0,"slug":"matthew-groves","display_name":"Matthew Groves","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g","author_category":"","first_name":"Matthew","last_name":"Groves","user_url":"","job_title":"","description":"Matthew D. Groves is a guy who loves to code.  It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything.  He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s.  He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community.  He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/4412","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=4412"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/4412\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/4411"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=4412"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=4412"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=4412"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=4412"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}