{"id":17532,"date":"2025-09-04T13:01:40","date_gmt":"2025-09-04T20:01:40","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=17532"},"modified":"2025-09-04T13:01:40","modified_gmt":"2025-09-04T20:01:40","slug":"building-smarter-agents-with-vector-search","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/building-smarter-agents-with-vector-search\/","title":{"rendered":"Creaci\u00f3n de agentes m\u00e1s inteligentes: C\u00f3mo la b\u00fasqueda vectorial impulsa la inteligencia sem\u00e1ntica"},"content":{"rendered":"<p>The way we search and interact with information has shifted dramatically over the past decade. Traditional keyword-based search engines once served us well in finding documents or answers, but today\u2019s business challenges demand much more than exact keyword matches. Modern users \u2014 whether consumers or enterprises \u2014 expect systems that <i>comprender<\/i> intent, <i>interpretar<\/i> context, and <i>deliver<\/i> the most relevant insights instantly.<\/p>\n<p>Aqu\u00ed es donde <b>b\u00fasqueda vectorial<\/b> comes in. By transforming data into high-dimensional mathematical representations (embeddings), vector search allows systems to capture semantic meaning rather than just lexical overlap. The implications extend far beyond search engines. <b>Agentic applications<\/b> \u2014 systems that can perceive, reason, and act autonomously \u2014 rely heavily on vector search as their knowledge backbone. Without it, AI agents risk being shallow responders rather than context-aware problem solvers.<\/p>\n<p>In this blog, we\u2019ll explore why vector search has become essential, the business domains it is reshaping, and how Couchbase is enabling this transformation with Full Text Search (FTS) and Eventing. We\u2019ll dive into a real-world case study in the telecom industry, and set the stage for hands-on guidance.<\/p>\n<hr \/>\n<h2 style=\"font-weight: 400;\">Why vector search matters<\/h2>\n<p>At the heart of vector search are <b>incrustaciones<\/b> \u2014 numerical representations of words, documents, or even multimedia files. Unlike keywords, embeddings encode <i>semantic relationships<\/i>. For example, \u201cnetwork outage\u201d and \u201cdropped calls\u201d may not share many keywords, but semantically they point to similar issues. With vector embeddings, both queries and data are projected into the same multidimensional space, where similarity is determined by distance metrics (cosine similarity, dot product, etc.).<\/p>\n<p>This shift has profound implications:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>From literal to contextual<\/b>: Search systems no longer match just words; they grasp meaning.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>From static to dynamic<\/b>: Vector spaces adapt as data grows and contexts evolve.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>From search to reasoning<\/b>: Agentic applications rely on embeddings not just to retrieve data, but to interpret intent and make decisions.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Put simply, vector search is not a feature upgrade to keyword search \u2014 it is a <b>paradigm shift<\/b> enabling the next generation of intelligent, autonomous systems.<\/p>\n<hr \/>\n<h2 style=\"font-weight: 400;\">Business use cases driving vector search adoption<\/h2>\n<h3 style=\"font-weight: 400;\">Telecom (PCAP analysis)<\/h3>\n<p>Telecom networks generate enormous volumes of packet capture (PCAP) data. Traditional analysis involves keyword filters, regex searches, and manual correlation across gigabytes of logs \u2014 often too slow for real-time troubleshooting. Vector search changes this game. By embedding PCAP traces, anomalies and patterns can be semantically clustered and retrieved, allowing engineers to identify issues (like call quality degradation or packet loss) instantly.<\/p>\n<h3 style=\"font-weight: 400;\">Customer support copilots<\/h3>\n<p>Contact centers are moving from scripted FAQ bots to intelligent copilots that assist human agents. Vector search ensures that user queries map to the right knowledge base answers, even if phrased differently. For example, \u201cMy phone keeps dropping calls\u201d can map to documentation on \u201cnetwork congestion issues\u201d \u2014 something keyword search would likely miss.<\/p>\n<h3 style=\"font-weight: 400;\">Fraud detection in Finance<\/h3>\n<p>Financial fraud is subtle \u2014 patterns don\u2019t always follow keywords. With embeddings, transactional behavior can be represented in vectors, enabling systems to detect outliers that deviate from \u201cnormal\u201d patterns. This allows institutions to flag unusual but keyword-invisible anomalies.<\/p>\n<h3 style=\"font-weight: 400;\">Sanidad<\/h3>\n<p>Medical research and patient records contain diverse terminologies. Vector search can connect \u201cchest pain\u201d with \u201cangina\u201d or \u201ccardiac discomfort,\u201d making clinical decision support systems more effective. It accelerates research, diagnosis, and drug discovery.<\/p>\n<h3 style=\"font-weight: 400;\">Retail &amp; recommendation engines<\/h3>\n<p>Recommendation systems thrive on semantic similarity. Vector search allows \u201cpeople who bought this also liked that\u201d recommendations to work on a deeper level \u2014 not just matching product tags, but aligning intent, style, or user behavior patterns.<\/p>\n<h3 style=\"font-weight: 400;\">Enterprise knowledge management<\/h3>\n<p>Organizations suffer from data silos. Employees waste hours searching for relevant insights across multiple systems. Vector search powers unified knowledge systems that surface the most contextually relevant information, regardless of format or phrasing.<\/p>\n<hr \/>\n<h2 style=\"font-weight: 400;\">Case study: PCAP analysis in Telecom with vector search<\/h2>\n<h3 style=\"font-weight: 400;\">The challenge<\/h3>\n<p>Telecom operators capture billions of packets daily. Traditional packet analysis involves manual filtering, string searches, or static rules to detect anomalies. These approaches:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Fail to capture semantic similarity (e.g., different manifestations of the same root issue)<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Struggle at scale due to sheer data volume<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Lead to slow troubleshooting and frustrated customers<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3 style=\"font-weight: 400;\">The vector search advantage<\/h3>\n<p>By embedding PCAP data into vectors:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Anomalies cluster naturally<\/b> in vector space (e.g., all dropped-call traces sit close together).<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Semantic queries<\/b> become possible (search for \u201clatency spikes\u201d and uncover logs with packet jitter or retransmissions).<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Root-cause analysis accelerates<\/b>, since related issues can be surfaced automatically rather than manually pieced together.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3 style=\"font-weight: 400;\">The outcome<\/h3>\n<p>Telecom engineers move from reactive log parsing to proactive anomaly detection. Customer issues are identified in real-time, improving satisfaction and reducing churn. What once took hours of manual analysis can be accomplished in minutes.<\/p>\n<hr \/>\n<h2 style=\"font-weight: 400;\">How Couchbase enables vector search for semantic &amp; agentic apps<\/h2>\n<h3 style=\"font-weight: 400;\">Full text search (FTS) recap<\/h3>\n<p>Couchbase FTS has long enabled enterprises to move beyond structured queries, supporting natural language and full-text capabilities. However, FTS on its own is still rooted in lexical search.<\/p>\n<h3 style=\"font-weight: 400;\">Adding vector search<\/h3>\n<p>Couchbase extends FTS with <b>vector indexing and similarity search<\/b>. This means enterprises can embed data (logs, documents, queries, etc.) into vectors and store them in Couchbase for semantic retrieval. Instead of returning keyword matches, FTS can now surface contextually relevant results.<\/p>\n<h3 style=\"font-weight: 400;\">B\u00fasqueda h\u00edbrida<\/h3>\n<p>The real power comes in <b>b\u00fasqueda h\u00edbrida<\/b> \u2014 blending keyword and vector similarity. For example, a telecom engineer can search for \u201ccall drops in New York\u201d and get results that combine exact location matches (keyword) with semantically similar PCAP anomalies (vector).<\/p>\n<h3 style=\"font-weight: 400;\">Concurso completo en acci\u00f3n<\/h3>\n<p>Couchbase Eventing adds real-time triggers to this ecosystem. Imagine an eventing function that:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Watches for anomalies in packet embeddings.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Automatically raises alerts when similarity thresholds are crossed.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Initiates workflows (e.g., opening a Jira ticket or notifying the ops team).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>This combination \u2014 <b>FTS + Vector Search + Eventing<\/b> \u2014 transforms search from passive information retrieval into <b>active intelligence delivery<\/b>.<\/p>\n<p>&nbsp;<\/p>\n<div id=\"attachment_17533\" style=\"width: 910px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-17533\" class=\"size-large wp-image-17533\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/image4-1024x683.png\" alt=\"\" width=\"900\" height=\"600\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/image4-1024x683.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/image4-300x200.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/image4-768x512.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/image4-1536x1024.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/image4-18x12.png 18w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/image4-400x267.png 400w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/image4-450x300.png 450w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/image4-1320x880.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/image4.png 1999w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><p id=\"caption-attachment-17533\" class=\"wp-caption-text\">Figure 1: Capella Hybrid Search Architecture with Eventing, ML Embeddings, and FTS\/Vector Indexing<\/p><\/div>\n<hr \/>\n<h2 style=\"font-weight: 400;\">Hands-on walkthrough: vector search with Couchbase<\/h2>\n<p>So far, we\u2019ve spoken about why vector search matters and how Couchbase powers it. Now let\u2019s put it all together in a <b>hands-on example<\/b>.<\/p>\n<p>Our scenario is <b>telecom PCAP (packet capture) analysis<\/b>. Imagine a massive stream of packet session summaries flowing into Couchbase. Instead of storing this data passively, we want Couchbase to:<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Automatically <b>incrustar<\/b> each session summary into a vector using <b>OpenAI embeddings<\/b>.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Store these embeddings alongside the raw metadata.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Index them in <b>Couchbase FTS<\/b> for fast vector similarity queries.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Allow us to <b>detect anomalies<\/b> or \u201csessions that look unusual\u201d in real-time.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>The best part? We won\u2019t be doing this manually. <b>Eventos<\/b> will automate the whole pipeline \u2014 the moment a new PCAP session document arrives, Couchbase will enrich it with an embedding and push it straight into the vector index.<\/p>\n<h3 style=\"font-weight: 400;\">Requisitos previos<\/h3>\n<p>Before diving into the build, let\u2019s make sure our environment is ready. This isn\u2019t just about checking boxes\u2014it\u2019s about setting the stage for a smooth developer experience.<\/p>\n<p style=\"padding-left: 40px;\"><b>Couchbase Server or Capella<\/b><b><br \/>\n<\/b>You\u2019ll need a running Couchbase environment with the <b>Eventos<\/b> y <b>FTS (Full-Text Search)<\/b> services enabled. These are the engines that will power automation and search.<\/p>\n<p style=\"padding-left: 40px;\"><b>A bucket to hold PCAP session data<\/b><b><br \/>\n<\/b>For this walkthrough, we\u2019ll call the bucket pcap. Within it, we\u2019ll organize data into scopes and collections to keep things clean.<\/p>\n<p style=\"padding-left: 40px;\"><b>Eventing service enabled<\/b><b><br \/>\n<\/b>Eventing functions are our \u201creactive glue.\u201d As soon as a new PCAP session summary is ingested, Eventing will spring into action, enrich the doc with embeddings, and optionally trigger anomaly alerts.<\/p>\n<p style=\"padding-left: 40px;\"><b>FTS service enabled<\/b><b><br \/>\n<\/b>This will let us build a <b>vector index<\/b> later on, so we can perform similarity search on session embeddings. Without it, the embeddings are just numbers sitting in JSON.<\/p>\n<p style=\"padding-left: 40px;\"><b>Embeddings API endpoint<\/b><b><br \/>\n<\/b>You\u2019ll need access to an embeddings model and API Key. In this blog, we\u2019ll assume OpenAI\u2019s text-embedding-3-small or text-embedding-3-large, but you can point to any API that returns a fixed-dimension vector. Eventing will use curl() to call this endpoint.<\/p>\n<h3 style=\"font-weight: 400;\">Ingesting PCAP sessions &#8211; data model<\/h3>\n<p>Every PCAP capture generates a flood of packets. For our demo, instead of storing raw packets (too big, too noisy), we\u2019ll work with <b>session summaries<\/b>. These summaries distill the important facts: source\/destination IPs, protocol, jitter, packet loss, retransmits, and a short natural-language description of what the session looked like.<\/p>\n<p>A single session document might look like this:<\/p>\n<pre class=\"nums:false lang:js decode:true\">{\r\n\u00a0\u00a0\"type\": \"pcap_session\",\r\n\u00a0\u00a0\"sessionId\": \"sess-2025-08-21-001\",\r\n\u00a0\u00a0\"ts\": \"2025-08-21T09:10:11Z\",\r\n\u00a0\u00a0\"srcIP\": \"10.1.2.3\",\r\n\u00a0\u00a0\"dstIP\": \"34.201.10.45\",\r\n\u00a0\u00a0\"srcPort\": 5060,\r\n\u00a0\u00a0\"dstPort\": 5060,\r\n\u00a0\u00a0\"proto\": \"SIP\",\r\n\u00a0\u00a0\"region\": \"us-east-1\",\r\n\u00a0\u00a0\"carrier\": \"cb-telecom\",\r\n\u00a0\u00a0\"durationMs\": 17890,\r\n\u00a0\u00a0\"packets\": 3412,\r\n\u00a0\u00a0\"lossPct\": 0.7,\r\n\u00a0\u00a0\"jitterMs\": 35.2,\r\n\u00a0\u00a0\"retransmits\": 21,\r\n\u00a0\u00a0\"summaryText\": \"SIP call with intermittent RTP loss and elevated jitter, user reported call drops\",\r\n\u00a0\u00a0\"embedding_vector\": null,\u00a0 \u00a0 \u00a0 \/\/ &lt;-- Eventing will fill this\r\n\u00a0\u00a0\"qualityLabel\": \"unknown\"\u00a0 \u00a0 \u00a0 \/\/ &lt;-- Eventing\/alerts will update this\r\n}<\/pre>\n<p>Key fields:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><em>summaryText<\/em> \u2192 a natural language synopsis that embeddings will capture.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><em>qualityLabel<\/em> \u2192 heuristic health label (<em>saludable<\/em>, <em>degraded<\/em>) that Eventing can assign.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>At this stage, the embedding_vector is empty. That\u2019s where Eventing will come in.<\/p>\n<h3 style=\"font-weight: 400;\">Create bucket\/scope\/collection<\/h3>\n<p>We\u2019ll organize the pipeline into logical containers:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Cubo<\/b>: <em>pcap<\/em><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Alcance<\/b>: <em>telco<\/em><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Colecciones<\/b>:\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><em>sesiones<\/em> (raw ingested PCAP session summaries)<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><em>alerts<\/em> (for anomaly alerts emitted by Eventing)<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><em>metadatos<\/em> (for writing eventing metadata information)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Example N1QL:<\/p>\n<pre class=\"nums:false lang:default decode:true\">CREATE SCOPE `pcap`.`telco`;\r\nCREATE COLLECTION `pcap`.`telco`.`sessions`;\r\nCREATE COLLECTION `pcap`.`telco`.`alerts`;<\/pre>\n<h3 style=\"font-weight: 400;\">Seed a few sample PCAP session docs<\/h3>\n<p>Let\u2019s insert a couple of healthy and degraded sessions to test the pipeline:<\/p>\n<pre class=\"nums:false lang:js decode:true\">INSERT INTO `pcap`.`telco`.`sessions` (KEY, VALUE)\r\nVALUES\r\n\u00a0\u00a0(\"sess::1\", {\r\n\u00a0\u00a0\u00a0\u00a0\"type\":\"pcap_session\",\"sessionId\":\"sess::1\",\"ts\":\"2025-08-21T09:00:00Z\",\r\n\u00a0\u00a0\u00a0\u00a0\"srcIP\":\"10.0.0.1\",\"dstIP\":\"52.0.0.5\",\"srcPort\":16384,\"dstPort\":16384,\r\n\u00a0\u00a0\u00a0\u00a0\"proto\":\"RTP\",\"region\":\"us-east-1\",\"carrier\":\"cb-telecom\",\"durationMs\":600000,\r\n\u00a0\u00a0\u00a0\u00a0\"packets\":100000,\"lossPct\":0.05,\"jitterMs\":2.5,\"retransmits\":0,\r\n\u00a0\u00a0\u00a0\u00a0\"summaryText\":\"Stable RTP media stream, negligible packet loss and low jitter\",\r\n\u00a0\u00a0\u00a0\u00a0\"embedding_vector\":null,\"qualityLabel\":\"unknown\"\r\n\u00a0\u00a0}),\r\n\u00a0\u00a0(\"sess::2\", {\r\n\u00a0\u00a0\u00a0\u00a0\"type\":\"pcap_session\",\"sessionId\":\"sess::2\",\"ts\":\"2025-08-21T09:05:00Z\",\r\n\u00a0\u00a0\u00a0\u00a0\"srcIP\":\"10.0.0.2\",\"dstIP\":\"52.0.0.5\",\"srcPort\":5060,\"dstPort\":5060,\r\n\u00a0\u00a0\u00a0\u00a0\"proto\":\"SIP\",\"region\":\"us-east-1\",\"carrier\":\"cb-telecom\",\"durationMs\":120000,\r\n\u00a0\u00a0\u00a0\u00a0\"packets\":12000,\"lossPct\":0.7,\"jitterMs\":35.2,\"retransmits\":21,\r\n\u00a0\u00a0\u00a0\u00a0\"summaryText\":\"SIP negotiation with intermittent media loss and elevated jitter, multiple retransmits\",\r\n\u00a0\u00a0\u00a0\u00a0\"embedding_vector\":null,\"qualityLabel\":\"unknown\"\r\n\u00a0\u00a0});<\/pre>\n<p>Here is how it would look if you view documents under the collection <em>sesi\u00f3n<\/em>:<\/p>\n<div id=\"attachment_17534\" style=\"width: 910px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-17534\" class=\"size-large\" style=\"border: solid 1px Gainsboro;\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/image1-1024x395.png\" alt=\"\" width=\"900\" height=\"347\" \/><p id=\"caption-attachment-17534\" class=\"wp-caption-text\">Figure 2: Capella UI showing two documents ingested via above DML.<\/p><\/div>\n<h3 style=\"font-weight: 400;\">Eventing: auto-embed on ingest<\/h3>\n<p>Here\u2019s where the magic happens. Every time a document is written into <em>pcap.telco.sessions<\/em>, our Eventing function will:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Call the OpenAI embeddings API with <em>summaryText<\/em> + structured features like proto, loss, jitter, region, carrier.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Store the returned vector in <em>embedding_vector<\/em>.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Tag the session as <em>saludable<\/em> o <em>degraded<\/em>.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Copy enriched doc back into <em>sesiones<\/em>.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Emit anomaly alerts into <em>alerts<\/em>.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>We\u2019ll define bindings like this:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Nombre:<\/b> <em>pcapEmbedding<\/em><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Fuente:<\/b> <em>pcap.telco.sessions<\/em><\/li>\n<li aria-level=\"1\"><b>Metadata:<\/b> <em>pcap.telco.metadata<\/em><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<div id=\"attachment_17535\" style=\"width: 910px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-17535\" class=\"wp-image-17535 size-full\" style=\"border: 1px solid Gainsboro;\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/image7-e1757015169650.png\" alt=\"\" width=\"900\" height=\"517\" \/><p id=\"caption-attachment-17535\" class=\"wp-caption-text\">Figure 3: Source and Metadata binding.<\/p><\/div>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Bucket aliases:<\/b>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><em>dst<\/em> \u2192 <em>pcap.telco.sessions<\/em> con <em>Read and Write<\/em> Permiso<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><em>alerts<\/em> \u2192 <em>pcap.telco.alerts<\/em> con <em>Read and Write<\/em> Permiso<\/li>\n<\/ul>\n<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>URL aliases:<\/b>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><em>EMBEDDING_API<\/em> \u2192 &#8220;<a href=\"https:\/\/api.openai.com\/v1\/embeddings\" target=\"_blank\" rel=\"noopener\">https:\/\/api.openai.com\/v1\/embeddings<\/a>&#8220;<\/li>\n<\/ul>\n<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Constant aliases:<\/b>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><em>EMBEDDING_MODEL<\/em> \u2192 &#8220;text-embedding-3-small&#8221;<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<div id=\"attachment_17536\" style=\"width: 910px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-17536\" class=\"wp-image-17536 size-full\" style=\"border: solid 1px Gainsboro;\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/image6-e1757015043238.png\" alt=\"\" width=\"900\" height=\"588\" \/><p id=\"caption-attachment-17536\" class=\"wp-caption-text\">Figure 4: URL and Constants defined as bindings to eventing function.<\/p><\/div>\n<h3 style=\"font-weight: 400;\">Automating enrichment with Eventing<\/h3>\n<p>Here\u2019s the magic moment. In most databases, enriching data with embeddings requires external ETL pipelines or custom workers. With Couchbase Eventing, the database itself becomes intelligent.<\/p>\n<p>The idea is simple:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">As soon as a new session document lands in the <em>sesiones<\/em> collection, Eventing will fire.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">It will call the <b>API de incrustaci\u00f3n de OpenAI<\/b> (<em>text-embedding-3-small<\/em> o <em>text-embedding-3-large<\/em> are great models for this).<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">The returned vector will be appended back into the same document.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>The result? Your bucket now holds <b>PCAP sessions + their semantic fingerprint<\/b>, ready to be indexed.<\/p>\n<p>Here\u2019s the updated Eventing handler:<\/p>\n<pre class=\"nums:false lang:js decode:true\">function OnUpdate(doc, meta) {\r\n\u00a0\u00a0log(\"Eventing function started for doc id:\", meta.id);\r\n\u00a0\u00a0try {\r\n\r\n\u00a0\u00a0\u00a0\u00a0if (doc.type !== \"pcap_session\") {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0log(\"Skipping doc: type is\", doc.type);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return;\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0var OPENAI_KEY = \"YZX\";\u00a0 \/\/ &lt;-- your OpenAI key\r\n\r\n\u00a0\u00a0\u00a0\u00a0\/\/ 1) Build enriched input text for embedding\r\n\u00a0\u00a0\u00a0\u00a0\/\/ Combine free-text + structured context so embeddings capture richer semantics\r\n\u00a0\u00a0\u00a0\u00a0var text = doc.summaryText || \"\";\r\n\u00a0\u00a0\u00a0\u00a0text += \" Proto:\" + (doc.proto || \"\");\r\n\u00a0\u00a0\u00a0\u00a0text += \" LossPct:\" + (doc.lossPct || 0);\r\n\u00a0\u00a0\u00a0\u00a0text += \" JitterMs:\" + (doc.jitterMs || 0);\r\n\u00a0\u00a0\u00a0\u00a0text += \" Retransmits:\" + (doc.retransmits || 0);\r\n\u00a0\u00a0\u00a0\u00a0text += \" Region:\" + (doc.region || \"\");\r\n\u00a0\u00a0\u00a0\u00a0text += \" Carrier:\" + (doc.carrier || \"\");\r\n\r\n\u00a0\u00a0\u00a0\u00a0log(\"Emritched text before embedding is: \" + text);\r\n\r\n\u00a0\u00a0\u00a0\u00a0\/\/ 2) Call OpenAI Embeddings API\r\n\u00a0\u00a0\u00a0\u00a0var request = {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0headers: {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Authorization\": \"Bearer \" + OPENAI_KEY,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Content-Type\": \"application\/json\"\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0body: JSON.stringify({\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"input\": text,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"model\": EMBEDDING_MODEL\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0})\r\n\u00a0\u00a0\u00a0\u00a0};\r\n\r\n\u00a0\u00a0\u00a0\u00a0try {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var response = curl(\"POST\", EMBEDDING_API, request);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var body = response.body;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0log(\"Response body parsed\");\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (typeof body === \"string\") {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var result = JSON.parse(body);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else if (typeof body === \"object\") {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ If already parsed, just assign\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var result = body;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0log(\"Unexpected response.body type:\", typeof body);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Extract the embedding vector from first data element\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (result &amp;&amp; result.data &amp;&amp; result.data.length &gt; 0 &amp;&amp; result.data[0].embedding) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var embeddingVector = result.data[0].embedding;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0log(\"Embedding vector length:\", embeddingVector.length);\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ 3) Write back embedding + quality heuristic\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0doc.embedding_vector = embeddingVector;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0doc.embedding_model = EMBEDDING_MODEL;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0doc.qualityLabel = (doc.lossPct &gt; 0.5 || doc.jitterMs &gt; 30 || doc.retransmits &gt; 10)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0? \"degraded\" : \"healthy\";\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Update destination collection\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dst[meta.id] = doc;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0log(\"Embedding not found in response:\", JSON.stringify(result));\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0} catch (e) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0log(\"Curl threw exception:\", e);\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0\/\/ 4) Raise anomaly alert if degraded\r\n\u00a0\u00a0\u00a0\u00a0if (doc.qualityLabel === \"degraded\") {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var alertDoc = {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0type: \"pcap_alert\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0sessionId: doc.sessionId,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ts: new Date().toISOString(),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0reason: \"Heuristic threshold exceeded\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0lossPct: doc.lossPct,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0jitterMs: doc.jitterMs,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0retransmits: doc.retransmits,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0region: doc.region,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0carrier: doc.carrier\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0};\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var alertKey = \"alert::\" + doc.sessionId;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0alerts[alertKey] = alertDoc;\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0log(\"Document enriched with embedding + quality label:\", meta.id);\r\n\r\n\u00a0\u00a0} catch (e) {\r\n\u00a0\u00a0\u00a0\u00a0log(\" Eventing exception\", e);\r\n\u00a0\u00a0}\r\n}\r\n\r\nfunction OnDelete(meta, options) {\r\n\u00a0\u00a0\/\/ No-op for deletes\r\n}<\/pre>\n<p>Every new PCAP session summary now <b>self-enriches<\/b> in real time.<\/p>\n<div id=\"attachment_17537\" style=\"width: 910px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-17537\" class=\"wp-image-17537 size-full\" style=\"border: solid 1px Gainsboro;\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/image5-e1757014996578.png\" alt=\"\" width=\"900\" height=\"535\" \/><p id=\"caption-attachment-17537\" class=\"wp-caption-text\">Figure 5: Eventing Function javascript copy\/pasted in the last step of function definition.<\/p><\/div>\n<p>Finally deploy the function and it should turn green once ready.<\/p>\n<div id=\"attachment_17538\" style=\"width: 910px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-17538\" class=\"wp-image-17538 size-full\" style=\"border: solid 1px Gainsboro;\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/image3-e1757015651761.png\" alt=\"\" width=\"900\" height=\"292\" \/><p id=\"caption-attachment-17538\" class=\"wp-caption-text\">Figure 6: <em>pcapEmbedding<\/em> function is deployed and showed up as green under status.<\/p><\/div>\n<p>Check the document and it should now have additional <em>embedding_vector<\/em> y <em>embedding_model<\/em> fields with the other fields like this:<\/p>\n<pre class=\"nums:false lang:js decode:true\">{\r\n\u00a0\u00a0\"carrier\": \"cb-telecom\",\r\n\u00a0\u00a0\"dstIP\": \"52.0.0.5\",\r\n\u00a0\u00a0\"dstPort\": 16384,\r\n\u00a0\u00a0\"durationMs\": 600000,\r\n\u00a0\u00a0\"jitterMs\": 2.5,\r\n\u00a0\u00a0\"lossPct\": 0.05,\r\n\u00a0\u00a0\"packets\": 100000,\r\n\u00a0\u00a0\"proto\": \"RTP\",\r\n\u00a0\u00a0\"qualityLabel\": \"healthy\",\r\n\u00a0\u00a0\"region\": \"us-east-1\",\r\n\u00a0\u00a0\"retransmits\": 0,\r\n\u00a0\u00a0\"sessionId\": \"sess::1\",\r\n\u00a0\u00a0\"srcIP\": \"10.0.0.1\",\r\n\u00a0\u00a0\"srcPort\": 16384,\r\n\u00a0\u00a0\"summaryText\": \"Stable RTP media stream, negligible packet loss and low jitter\",\r\n\u00a0\u00a0\"ts\": \"2025-08-21T09:00:00Z\",\r\n\u00a0\u00a0\"type\": \"pcap_session\",\r\n\u00a0\u00a0\"embedding_model\": \"text-embedding-3-small\",\r\n\u00a0\u00a0\"embedding_vector\": [-0.004560039, -0.0018385303, 0.033093546, 0.0023359614, ...]\r\n}<\/pre>\n<h3 style=\"font-weight: 400;\">Creating a vector-aware FTS index in Couchbase<\/h3>\n<p>Now that each PCAP session document carries both an <b>embedding vector<\/b> y <b>enriched metadata<\/b> (region, proto, carrier, jitter, loss, retransmits), the next step is to make these fields searchable. Couchbase\u2019s Full Text Search (FTS) engine now supports <b>vector indexing<\/b>, meaning we can store those high-dimensional embeddings right alongside traditional keyword and numeric fields.<\/p>\n<p>\u00bfPor qu\u00e9 es importante?<br \/>\nBecause it allows us to run <b>semantic queries<\/b> como <i>\u201cfind sessions similar to this degraded call in Asia carried over LTE\u201d<\/i> \u2014 combining <b>similitud sem\u00e1ntica<\/b> (via vector search) with <b>structured filtering<\/b> (region, proto, carrier).<\/p>\n<p>Here\u2019s a simple JSON definition of such an index (from the FTS console, you\u2019d create a new index and paste this in):<\/p>\n<pre class=\"nums:false lang:js decode:true\">{\r\n\u00a0\u00a0\"type\": \"fulltext-index\",\r\n\u00a0\u00a0\"name\": \"pcap.telco.pcapEmbeddingIndex\",\r\n\u00a0\u00a0\"uuid\": \"2fd519311de37177\",\r\n\u00a0\u00a0\"sourceType\": \"gocbcore\",\r\n\u00a0\u00a0\"sourceName\": \"pcap\",\r\n\u00a0\u00a0\"sourceUUID\": \"a576b1ee361c33974e47371d03098b72\",\r\n\u00a0\u00a0\"planParams\": {\r\n\u00a0\u00a0\u00a0\u00a0\"maxPartitionsPerPIndex\": 1024,\r\n\u00a0\u00a0\u00a0\u00a0\"indexPartitions\": 1\r\n\u00a0\u00a0},\r\n\u00a0\u00a0\"params\": {\r\n\u00a0\u00a0\u00a0\u00a0\"doc_config\": {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"docid_prefix_delim\": \"\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"docid_regexp\": \"\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"mode\": \"scope.collection.type_field\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type_field\": \"type\"\r\n\u00a0\u00a0\u00a0\u00a0},\r\n\u00a0\u00a0\u00a0\u00a0\"mapping\": {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"analysis\": {},\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"default_analyzer\": \"standard\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"default_datetime_parser\": \"dateTimeOptional\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"default_field\": \"_all\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"default_mapping\": {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"dynamic\": false,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"enabled\": false\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"default_type\": \"_default\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"docvalues_dynamic\": false,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"index_dynamic\": true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"store_dynamic\": true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type_field\": \"_type\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"types\": {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"telco.sessions\": {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"dynamic\": false,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"enabled\": true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"properties\": {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"carrier\": {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"dynamic\": false,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"enabled\": true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"fields\": [\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"analyzer\": \"en\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"index\": true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \"carrier\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"store\": true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"text\"\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"embedding_vector\": {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"dynamic\": false,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"enabled\": true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"fields\": [\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"dims\": 1536,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"index\": true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \"embedding_vector\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"similarity\": \"dot_product\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"vector\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"vector_index_optimized_for\": \"recall\"\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"jitterMs\": {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"dynamic\": false,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"enabled\": true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"fields\": [\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"index\": true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \"jitterMs\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"store\": true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"number\"\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"lossPct\": {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"dynamic\": false,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"enabled\": true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"fields\": [\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"index\": true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \"lossPct\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"store\": true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"number\"\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"proto\": {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"dynamic\": false,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"enabled\": true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"fields\": [\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"analyzer\": \"en\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"index\": true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \"proto\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"store\": true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"text\"\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"qualityLabel\": {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"dynamic\": false,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"enabled\": true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"fields\": [\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"analyzer\": \"en\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"index\": true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \"qualityLabel\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"store\": true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"text\"\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"region\": {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"dynamic\": false,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"enabled\": true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"fields\": [\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"analyzer\": \"en\",\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"index\": true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \"region\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"store\": true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"text\"\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"retransmits\": {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"dynamic\": false,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"enabled\": true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"fields\": [\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"index\": true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"name\": \"retransmits\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"store\": true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"type\": \"number\"\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\r\n\u00a0\u00a0\u00a0\u00a0},\r\n\u00a0\u00a0\u00a0\u00a0\"store\": {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"indexType\": \"scorch\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"segmentVersion\": 16\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\u00a0\u00a0},\r\n\u00a0\u00a0\"sourceParams\": {}\r\n}<\/pre>\n<p>Let\u2019s break it down in plain English:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>embedding_vector<\/b> \u2192 This is the semantic backbone, a vector field where similarity queries happen. We\u2019ve chosen <b>dot product<\/b> as the similarity metric since it works well with OpenAI embeddings.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>regi\u00f3n<\/b><b>, <\/b><b>proto<\/b><b>, <\/b><b>carrier<\/b> \u2192 Indexed as text fields so we can filter by telecom region, packet protocol, or carrier.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>lossPct<\/b><b>, <\/b><b>jitterMs<\/b><b>, <\/b><b>retransmits<\/b> \u2192 Numeric fields that allow range queries (e.g., \u201csessions with jitter &gt; 50ms\u201d).<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>qualityLabel<\/b> \u2192 Our Eventing function already tagged calls as \u201chealthy\u201d or \u201cdegraded\u201d, which now becomes a searchable field.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>This dual structure \u2014 <b>vector + metadata<\/b> \u2014 is what makes the solution powerful. You\u2019re not forced to choose between semantic similarity and structured filtering; you can blend both in a single query.<\/p>\n<div id=\"attachment_17539\" style=\"width: 910px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-17539\" class=\"size-large wp-image-17539\" style=\"border: solid 1px Gainsboro;\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/image8-1024x758.png\" alt=\"\" width=\"900\" height=\"666\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/image8-1024x758.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/image8-300x222.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/image8-768x568.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/image8-1536x1136.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/image8-16x12.png 16w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/image8-1320x977.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/image8.png 1999w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><p id=\"caption-attachment-17539\" class=\"wp-caption-text\">Figure 7: This is how you would create a vector index from Search tab<\/p><\/div>\n<div id=\"attachment_17540\" style=\"width: 910px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-17540\" class=\"wp-image-17540 size-full\" style=\"border: solid 1px Gainsboro;\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/image2-e1757014936842.png\" alt=\"\" width=\"900\" height=\"706\" \/><p id=\"caption-attachment-17540\" class=\"wp-caption-text\">Figure 8: All the required fields within the <em>sesi\u00f3n<\/em> document are included in the search<\/p><\/div>\n<h3 style=\"font-weight: 400;\">Highlighting anomaly detection with hybrid search<\/h3>\n<p>Finally, let\u2019s see the real payoff: anomaly detection powered by <b>hybrid vector search<\/b>.<\/p>\n<p>Imagine you\u2019ve had a rash of complaints about call drops in New York. You could run a query like:<\/p>\n<pre class=\"nums:false lang:default decode:true\">SELECT META(s).id, s.sessionId, s.summaryText, s.qualityLabel, s.region, s.proto, s.carrier\r\nFROM `pcap`.`telco`.`sessions` AS s\r\nWHERE SEARCH(s, {\r\n\u00a0\u00a0\"fields\": [\"*\"],\r\n\u00a0\u00a0\"knn\": [\r\n\u00a0\u00a0\u00a0\u00a0{\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"k\": 10,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"field\": \"embedding_vector\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"vector\": [\/* ... fill with your actual embedding ... *\/],\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"filter\": {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"conjuncts\": [\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ \"match\": \"degraded\", \"field\": \"qualityLabel\" },\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ \"match\": \"us-east-1\", \"field\": \"region\" },\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ \"match\": \"SIP\", \"field\": \"proto\" },\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ \"match\": \"cb-telecom\", \"field\": \"carrier\" }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\u00a0\u00a0]\r\n});<\/pre>\n<p>This query says:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><i>Find me 10 sessions most similar to a <\/i><i>degraded<\/i><i> SIP call (semantic similarity)<\/i><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><i>But only if they occurred in <\/i><i>us-este-1<\/i><i>, were SIP calls<\/i><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>What you get back is not just a list of \u201cbad calls\u201d \u2014 it\u2019s a <b>cluster of semantically related anomalies<\/b> that helps you pinpoint the root cause. If they\u2019re all happening on one carrier, you\u2019ve just isolated a provider issue. If they spike at certain hours, maybe it\u2019s a routing bottleneck.<\/p>\n<p>This is where vector search stops being \u201ccool math\u201d and starts delivering <b>real operational insight<\/b>.<\/p>\n<hr \/>\n<h2 style=\"font-weight: 400;\">Vector search as the backbone of agentic applications<\/h2>\n<p>Agentic applications are designed not only to retrieve information, but to interpret and act on it. Whether it\u2019s a customer support copilot, a fraud detection engine, or a telecom anomaly detector, these systems need:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Contextual recall<\/b>: Retrieve the <i>derecha<\/i> information, not just literal matches.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Reasoning capabilities<\/b>: Understand relationships and intent.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Autonomy<\/b>: Trigger workflows and decisions without human intervention.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>All three pillars rest on <b>b\u00fasqueda vectorial<\/b>. Without embeddings, agents lack memory. Without similarity search, they lack reasoning. Without semantic context, they cannot act effectively.<\/p>\n<p>This is why vector search is more than just a new search method \u2014 it is the <b>knowledge backbone<\/b> of the agentic era.<\/p>\n<hr \/>\n<h2 style=\"font-weight: 400;\">Conclusion &amp; what\u2019s next<\/h2>\n<p>Vector search is transforming industries by shifting search from keywords to context. It powers everything from telecom anomaly detection to customer support copilots and fraud detection. At its core, it lays the foundation for <b>aplicaciones ag\u00e9nticas<\/b> \u2014 intelligent systems that can recall, reason, and act.<\/p>\n<p>Couchbase brings this to life with its combination of <b>Full Text Search, vector indexing, and eventing<\/b>, enabling enterprises to operationalize semantic search in real time.<\/p>\n<p>In the next installment, we\u2019ll take this a step further: exploring how <b>LLMs + vector search<\/b> converge to build truly autonomous agentic applications that not only understand context but also generate insights and take proactive actions.<\/p>\n<p><br style=\"font-weight: 400;\" \/><br style=\"font-weight: 400;\" \/><\/p>","protected":false},"excerpt":{"rendered":"<p>The way we search and interact with information has shifted dramatically over the past decade. Traditional keyword-based search engines once served us well in finding documents or answers, but today\u2019s business challenges demand much more than exact keyword matches. Modern [&hellip;]<\/p>","protected":false},"author":33279,"featured_media":17541,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[10123,9936,9937],"tags":[],"ppma_author":[9090],"class_list":["post-17532","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-agentic-ai-apps","category-search","category-vector-search"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Building Smarter Agents: How Vector Search Drives Semantic Intelligence - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Vector search has become essential and Couchbase is enabling this transformation with Full Text Search (FTS) and Eventing.\" \/>\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\/es\/building-smarter-agents-with-vector-search\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Building Smarter Agents: How Vector Search Drives Semantic Intelligence\" \/>\n<meta property=\"og:description\" content=\"Vector search has become essential and Couchbase is enabling this transformation with Full Text Search (FTS) and Eventing.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/building-smarter-agents-with-vector-search\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-04T20:01:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/blog-smarter-agents.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=\"Anuj Sahni, Solutions &amp; Cloud Architecture Leader, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Anuj Sahni, Solutions &amp; Cloud Architecture Leader, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-smarter-agents-with-vector-search\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-smarter-agents-with-vector-search\/\"},\"author\":{\"name\":\"Anuj Sahni, Solutions &amp; Cloud Architecture Leader, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/21c735da109667147c580bb2cb351c1c\"},\"headline\":\"Building Smarter Agents: How Vector Search Drives Semantic Intelligence\",\"datePublished\":\"2025-09-04T20:01:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-smarter-agents-with-vector-search\/\"},\"wordCount\":2482,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-smarter-agents-with-vector-search\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/blog-smarter-agents.png\",\"articleSection\":[\"Agentic AI Applications\",\"Search\",\"Vector Search\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/building-smarter-agents-with-vector-search\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-smarter-agents-with-vector-search\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/building-smarter-agents-with-vector-search\/\",\"name\":\"Building Smarter Agents: How Vector Search Drives Semantic Intelligence - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-smarter-agents-with-vector-search\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-smarter-agents-with-vector-search\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/blog-smarter-agents.png\",\"datePublished\":\"2025-09-04T20:01:40+00:00\",\"description\":\"Vector search has become essential and Couchbase is enabling this transformation with Full Text Search (FTS) and Eventing.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-smarter-agents-with-vector-search\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/building-smarter-agents-with-vector-search\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-smarter-agents-with-vector-search\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/blog-smarter-agents.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/blog-smarter-agents.png\",\"width\":2400,\"height\":1256},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-smarter-agents-with-vector-search\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Building Smarter Agents: How Vector Search Drives Semantic Intelligence\"}]},{\"@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\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/21c735da109667147c580bb2cb351c1c\",\"name\":\"Anuj Sahni, Solutions &amp; Cloud Architecture Leader, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/5e9708314822fac560c43a5fbdc9b74f\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/cb8391905c8ac6ff579c79c90aeaa4e9cf773b87a25e710ee107104c5659deb6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/cb8391905c8ac6ff579c79c90aeaa4e9cf773b87a25e710ee107104c5659deb6?s=96&d=mm&r=g\",\"caption\":\"Anuj Sahni, Solutions &amp; Cloud Architecture Leader, Couchbase\"},\"description\":\"Anuj Sahni is a Solutions &amp; Cloud Architecture leader on the Capella team, helping customers design scalable, high-performance enterprise applications and shape their cloud migration journeys using cloud-native technologies and the Couchbase stack. He combines deep expertise in cloud architectures with solutions architecture leadership to help enterprises modernize their applications effectively. Prior to joining Couchbase, Anuj served as Principal Product Manager at Oracle, leading initiatives for Oracle Service Cloud. He brings extensive experience in building distributed, always-available relational and non-relational database systems. Anuj holds an M.S. in Electrical and Computer Engineering from the University of Florida.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/anuj-sahni-6a80b617\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/anujsahni\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Building Smarter Agents: How Vector Search Drives Semantic Intelligence - The Couchbase Blog","description":"La b\u00fasqueda vectorial se ha vuelto esencial y Couchbase est\u00e1 permitiendo esta transformaci\u00f3n con Full Text Search (FTS) y Eventing.","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\/es\/building-smarter-agents-with-vector-search\/","og_locale":"es_MX","og_type":"article","og_title":"Building Smarter Agents: How Vector Search Drives Semantic Intelligence","og_description":"Vector search has become essential and Couchbase is enabling this transformation with Full Text Search (FTS) and Eventing.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/building-smarter-agents-with-vector-search\/","og_site_name":"The Couchbase Blog","article_published_time":"2025-09-04T20:01:40+00:00","og_image":[{"width":2400,"height":1256,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/blog-smarter-agents.png","type":"image\/png"}],"author":"Anuj Sahni, Solutions &amp; Cloud Architecture Leader, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Anuj Sahni, Solutions &amp; Cloud Architecture Leader, Couchbase","Est. reading time":"13 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/building-smarter-agents-with-vector-search\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/building-smarter-agents-with-vector-search\/"},"author":{"name":"Anuj Sahni, Solutions &amp; Cloud Architecture Leader, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/21c735da109667147c580bb2cb351c1c"},"headline":"Building Smarter Agents: How Vector Search Drives Semantic Intelligence","datePublished":"2025-09-04T20:01:40+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/building-smarter-agents-with-vector-search\/"},"wordCount":2482,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/building-smarter-agents-with-vector-search\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/blog-smarter-agents.png","articleSection":["Agentic AI Applications","Search","Vector Search"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/building-smarter-agents-with-vector-search\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/building-smarter-agents-with-vector-search\/","url":"https:\/\/www.couchbase.com\/blog\/building-smarter-agents-with-vector-search\/","name":"Building Smarter Agents: How Vector Search Drives Semantic Intelligence - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/building-smarter-agents-with-vector-search\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/building-smarter-agents-with-vector-search\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/blog-smarter-agents.png","datePublished":"2025-09-04T20:01:40+00:00","description":"La b\u00fasqueda vectorial se ha vuelto esencial y Couchbase est\u00e1 permitiendo esta transformaci\u00f3n con Full Text Search (FTS) y Eventing.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/building-smarter-agents-with-vector-search\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/building-smarter-agents-with-vector-search\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/building-smarter-agents-with-vector-search\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/blog-smarter-agents.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/09\/blog-smarter-agents.png","width":2400,"height":1256},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/building-smarter-agents-with-vector-search\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Building Smarter Agents: How Vector Search Drives Semantic Intelligence"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","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":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/21c735da109667147c580bb2cb351c1c","name":"Anuj Sahni, Responsable de soluciones y arquitectura en la nube, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/5e9708314822fac560c43a5fbdc9b74f","url":"https:\/\/secure.gravatar.com\/avatar\/cb8391905c8ac6ff579c79c90aeaa4e9cf773b87a25e710ee107104c5659deb6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cb8391905c8ac6ff579c79c90aeaa4e9cf773b87a25e710ee107104c5659deb6?s=96&d=mm&r=g","caption":"Anuj Sahni, Solutions &amp; Cloud Architecture Leader, Couchbase"},"description":"Anuj Sahni es un l\u00edder de Soluciones y Arquitectura de la Nube en el equipo de Capella, ayudando a los clientes a dise\u00f1ar aplicaciones empresariales escalables y de alto rendimiento y a dar forma a sus viajes de migraci\u00f3n a la nube utilizando tecnolog\u00edas nativas de la nube y la pila de Couchbase. Combina una profunda experiencia en arquitecturas en la nube con el liderazgo en arquitectura de soluciones para ayudar a las empresas a modernizar sus aplicaciones de forma eficaz. Antes de unirse a Couchbase, Anuj trabaj\u00f3 como Director Principal de Producto en Oracle, liderando iniciativas para Oracle Service Cloud. Aporta una amplia experiencia en la creaci\u00f3n de sistemas de bases de datos relacionales y no relacionales distribuidos y siempre disponibles. Anuj tiene un m\u00e1ster en Ingenier\u00eda El\u00e9ctrica e Inform\u00e1tica por la Universidad de Florida.","sameAs":["https:\/\/www.linkedin.com\/in\/anuj-sahni-6a80b617"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/anujsahni\/"}]}},"authors":[{"term_id":9090,"user_id":33279,"is_guest":0,"slug":"anujsahni","display_name":"Anuj Sahni, Solutions &amp; Cloud Architecture Leader, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/cb8391905c8ac6ff579c79c90aeaa4e9cf773b87a25e710ee107104c5659deb6?s=96&d=mm&r=g","author_category":"1","last_name":"Sahni, Solutions & Cloud Architecture Leader, Couchbase","first_name":"Anuj","job_title":"","user_url":"https:\/\/www.linkedin.com\/in\/anuj-sahni-6a80b617","description":"<p data-start=\"231\" data-end=\"963\"><strong data-start=\"231\" data-end=\"963\">Anuj Sahni es un l\u00edder de Soluciones y Arquitectura de la Nube en el equipo de Capella, ayudando a los clientes a dise\u00f1ar aplicaciones empresariales escalables y de alto rendimiento y a dar forma a sus viajes de migraci\u00f3n a la nube utilizando tecnolog\u00edas nativas de la nube y la pila de Couchbase. Combina una profunda experiencia en arquitecturas en la nube con el liderazgo en arquitectura de soluciones para ayudar a las empresas a modernizar sus aplicaciones de forma eficaz. Antes de unirse a Couchbase, Anuj trabaj\u00f3 como Director Principal de Producto en Oracle, liderando iniciativas para Oracle Service Cloud. Aporta una amplia experiencia en la creaci\u00f3n de sistemas de bases de datos relacionales y no relacionales distribuidos y siempre disponibles. Anuj tiene un m\u00e1ster en Ingenier\u00eda El\u00e9ctrica e Inform\u00e1tica por la Universidad de Florida.<\/strong><\/p>"}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/17532","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/33279"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=17532"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/17532\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/17541"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=17532"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=17532"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=17532"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=17532"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}