<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 -->
<p>Graph analytics and machine learning represent one of the most powerful applications of graph database technology. Geode provides a comprehensive platform for advanced analytics, combining native graph algorithms, vector embeddings, full-text search, and seamless integration with modern ML frameworks. This enables organizations to extract insights from connected data, build recommendation systems, detect anomalies, identify communities, and power intelligent applications.</p>
<p>Geode’s analytics capabilities leverage its graph structure to efficiently compute metrics that would require complex joins in relational databases. Built-in algorithms for centrality, community detection, pathfinding, and similarity analysis run directly on Geode’s storage engine with optimizations for graph traversal. Vector search with HNSW indexing enables semantic similarity queries for AI/ML workloads, while BM25 full-text search powers content discovery and ranking.</p>
<p>The platform’s ISO/IEC 39075:2024 compliance ensures that analytics queries use standard syntax, while ACID transactions guarantee data consistency even when updating analytical models. This category explores how to leverage Geode for graph analytics, integrate with ML pipelines, and build intelligent data-driven applications.</p>
<h3 id="graph-analytics-fundamentals" class="position-relative d-flex align-items-center group">
<span>Graph Analytics Fundamentals</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="graph-analytics-fundamentals"
aria-haspopup="dialog"
aria-label="Share link: Graph Analytics Fundamentals">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><div id="headingShareModal" class="heading-share-modal" role="dialog" aria-modal="true" aria-labelledby="headingShareTitle" hidden>
<div class="hsm-dialog" role="document">
<div class="hsm-header">
<h2 id="headingShareTitle" class="h6 mb-0 fw-bold">Share this section</h2>
<button type="button" class="hsm-close" aria-label="Close">
<i class="fa-solid fa-xmark"></i>
</button>
</div>
<div class="hsm-body">
<label for="headingShareInput" class="form-label small text-muted mb-1 text-uppercase fw-bold" style="font-size: 0.7rem; letter-spacing: 0.5px;">Permalink</label>
<div class="input-group mb-4 hsm-url-group">
<input id="headingShareInput" type="text" class="form-control font-monospace" readonly aria-readonly="true" style="font-size: 0.85rem;" />
<button class="btn btn-primary hsm-copy" type="button" aria-label="Copy" title="Copy">
<i class="fa-duotone fa-clipboard" aria-hidden="true"></i>
</button>
</div>
<div class="small fw-bold mb-2 text-muted text-uppercase" style="font-size: 0.7rem; letter-spacing: 0.5px;">Share via</div>
<div class="hsm-share-grid">
<a id="share-twitter" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer">
<i class="fa-brands fa-twitter me-2"></i>Twitter
</a>
<a id="share-linkedin" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer">
<i class="fa-brands fa-linkedin me-2"></i>LinkedIn
</a>
<a id="share-facebook" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer">
<i class="fa-brands fa-facebook me-2"></i>Facebook
</a>
</div>
</div>
</div>
</div>
<style>
.heading-share-modal {
position: fixed;
inset: 0;
display: flex;
justify-content: center;
align-items: center;
background: rgba(0, 0, 0, 0.6);
z-index: 1050;
padding: 1rem;
backdrop-filter: blur(4px);
-webkit-backdrop-filter: blur(4px);
}
.heading-share-modal[hidden] { display: none !important; }
.hsm-dialog {
max-width: 420px;
width: 100%;
background: var(--bs-body-bg, #fff);
color: var(--bs-body-color, #212529);
border: 1px solid var(--bs-border-color, rgba(0,0,0,0.1));
border-radius: 1rem;
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
overflow: hidden;
animation: hsm-fade-in 0.2s ease-out;
}
@keyframes hsm-fade-in {
from { opacity: 0; transform: scale(0.95); }
to { opacity: 1; transform: scale(1); }
}
[data-bs-theme="dark"] .hsm-dialog {
background: #1e293b;
border-color: rgba(255,255,255,0.1);
color: #f8f9fa;
}
.hsm-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1rem 1.5rem;
border-bottom: 1px solid var(--bs-border-color, rgba(0,0,0,0.1));
background: rgba(0,0,0,0.02);
}
[data-bs-theme="dark"] .hsm-header {
background: rgba(255,255,255,0.02);
border-color: rgba(255,255,255,0.1);
}
.hsm-close {
background: transparent;
border: none;
color: inherit;
opacity: 0.5;
padding: 0.25rem 0.5rem;
border-radius: 0.25rem;
font-size: 1.2rem;
line-height: 1;
transition: opacity 0.2s;
}
.hsm-close:hover {
opacity: 1;
}
.hsm-body {
padding: 1.5rem;
}
.hsm-url-group {
display: flex !important;
align-items: stretch;
}
.hsm-url-group .form-control {
flex: 1;
min-width: 0;
margin: 0;
background: var(--bs-secondary-bg, #f8f9fa);
border-color: var(--bs-border-color, #dee2e6);
border-top-right-radius: 0;
border-bottom-right-radius: 0;
height: 42px;
}
.hsm-url-group .btn {
flex: 0 0 auto;
margin: 0;
margin-left: -1px;
border-top-left-radius: 0;
border-bottom-left-radius: 0;
height: 42px;
display: flex;
align-items: center;
justify-content: center;
padding: 0 1.25rem;
z-index: 2;
}
[data-bs-theme="dark"] .hsm-url-group .form-control {
background: #0f172a;
border-color: #334155;
color: #e2e8f0;
}
.hsm-share-grid {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.hsm-share-grid .btn {
display: flex;
align-items: center;
justify-content: center;
font-size: 0.9rem;
padding: 0.6rem;
border-color: var(--bs-border-color);
width: 100%;
}
[data-bs-theme="dark"] .hsm-share-grid .btn {
color: #e2e8f0;
border-color: #475569;
}
[data-bs-theme="dark"] .hsm-share-grid .btn:hover {
background: #334155;
border-color: #cbd5e1;
}
</style>
<script>
(function(){
const modal = document.getElementById('headingShareModal');
if(!modal) return;
const input = modal.querySelector('#headingShareInput');
const copyBtn = modal.querySelector('.hsm-copy');
const twitter = modal.querySelector('#share-twitter');
const linkedin = modal.querySelector('#share-linkedin');
const facebook = modal.querySelector('#share-facebook');
const closeBtn = modal.querySelector('.hsm-close');
let lastFocus=null;
let trapBound=false;
function buildUrl(id){ return window.location.origin + window.location.pathname + '#' + id; }
function isOpen(){ return !modal.hasAttribute('hidden'); }
function hydrate(id){
const url=buildUrl(id);
input.value=url;
const enc=encodeURIComponent(url);
const text=encodeURIComponent(document.title);
if(twitter) twitter.href=`https://twitter.com/intent/tweet?url=${enc}&text=${text}`;
if(linkedin) linkedin.href=`https://www.linkedin.com/sharing/share-offsite/?url=${enc}`;
if(facebook) facebook.href=`https://www.facebook.com/sharer/sharer.php?u=${enc}`;
}
function openModal(id){
lastFocus=document.activeElement;
hydrate(id);
if(!isOpen()){
modal.removeAttribute('hidden');
}
requestAnimationFrame(()=>{ input.focus(); });
trapFocus();
}
function closeModal(){
if(!isOpen()) return;
modal.setAttribute('hidden','');
if(lastFocus && typeof lastFocus.focus==='function') lastFocus.focus();
}
function copyCurrent(){
try{ navigator.clipboard.writeText(input.value).then(()=>feedback(true),()=>fallback()); }
catch(e){ fallback(); }
}
function fallback(){ input.select(); try{ document.execCommand('copy'); feedback(true);}catch(e){ feedback(false);} }
function feedback(ok){ if(!copyBtn) return; const icon=copyBtn.querySelector('i'); if(!icon) return; const prev=copyBtn.getAttribute('data-prev')||icon.className; if(!copyBtn.getAttribute('data-prev')) copyBtn.setAttribute('data-prev',prev); icon.className= ok ? 'fa-duotone fa-clipboard-check':'fa-duotone fa-circle-exclamation'; setTimeout(()=>{ icon.className=prev; },1800); }
function handleShareClick(e){ e.preventDefault(); const btn=e.currentTarget; const id=btn.getAttribute('data-share-target'); if(id) openModal(id); }
function bindShareButtons(){
document.querySelectorAll('.h-share').forEach(btn=>{
if(!btn.dataset.hShareBound){ btn.addEventListener('click', handleShareClick); btn.dataset.hShareBound='1'; }
});
}
bindShareButtons();
if(document.readyState==='loading'){
document.addEventListener('DOMContentLoaded', bindShareButtons);
} else {
requestAnimationFrame(bindShareButtons);
}
document.addEventListener('click', function(e){
const shareBtn=e.target.closest && e.target.closest('.h-share');
if(shareBtn && !shareBtn.dataset.hShareBound){ handleShareClick.call(shareBtn, e); }
}, true);
document.addEventListener('click', e=>{
if(e.target===modal) closeModal();
if(e.target.closest && e.target.closest('.hsm-close')){ e.preventDefault(); closeModal(); }
if(copyBtn && (e.target===copyBtn || (e.target.closest && e.target.closest('.hsm-copy')))) { e.preventDefault(); copyCurrent(); }
});
document.addEventListener('keydown', e=>{ if(e.key==='Escape' && isOpen()) closeModal(); });
function trapFocus(){
if(trapBound) return;
trapBound=true;
modal.addEventListener('keydown', f=>{ if(f.key==='Tab' && isOpen()){ const focusable=[...modal.querySelectorAll('a[href],button,input,textarea,select,[tabindex]:not([tabindex="-1"])')].filter(el=>!el.hasAttribute('disabled')); if(!focusable.length) return; const first=focusable[0]; const last=focusable[focusable.length-1]; if(f.shiftKey && document.activeElement===first){ f.preventDefault(); last.focus(); } else if(!f.shiftKey && document.activeElement===last){ f.preventDefault(); first.focus(); } } });
}
if(closeBtn) closeBtn.addEventListener('click', e=>{ e.preventDefault(); closeModal(); });
})();
</script>
<h4 id="understanding-graph-metrics" class="position-relative d-flex align-items-center group">
<span>Understanding Graph Metrics</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="understanding-graph-metrics"
aria-haspopup="dialog"
aria-label="Share link: Understanding Graph Metrics">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Graph analytics operate on the relationships between entities, revealing patterns invisible to traditional analytics:</p>
<ul>
<li><strong>Centrality</strong> measures identify influential nodes (PageRank, betweenness, closeness)</li>
<li><strong>Community detection</strong> reveals natural groupings and clusters</li>
<li><strong>Path analysis</strong> finds optimal routes and connection patterns</li>
<li><strong>Similarity metrics</strong> identify related entities based on neighborhood structure</li>
<li><strong>Degree distributions</strong> characterize network topology</li>
</ul>
<p>Unlike table scans or index lookups, graph algorithms traverse relationships directly, often providing O(E) complexity where E is the number of edges in the subgraph of interest.</p>
<h4 id="native-graph-algorithm-support" class="position-relative d-flex align-items-center group">
<span>Native Graph Algorithm Support</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="native-graph-algorithm-support"
aria-haspopup="dialog"
aria-label="Share link: Native Graph Algorithm Support">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Geode implements graph algorithms as native operations optimized for its storage engine:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">PageRank</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">influence</span><span class="w"> </span><span class="py">analysis</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="p">:</span><span class="nc">WebPage</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">graph</span><span class="err">.</span><span class="py">algorithms</span><span class="err">.</span><span class="py">pagerank</span><span class="p">(</span><span class="py">n</span><span class="p">,</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">iterations</span><span class="p">:</span><span class="w"> </span><span class="nc">20</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">dampingFactor</span><span class="p">:</span><span class="w"> </span><span class="nc">0</span><span class="mf">.85</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">tolerance</span><span class="p">:</span><span class="w"> </span><span class="nc">0</span><span class="mf">.0001</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">})</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">rank</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">url</span><span class="p">,</span><span class="w"> </span><span class="py">rank</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">rank</span><span class="w"> </span><span class="py">DESC</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">100</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Community</span><span class="w"> </span><span class="py">detection</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">Louvain</span><span class="w"> </span><span class="py">algorithm</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CALL</span><span class="w"> </span><span class="py">graph</span><span class="err">.</span><span class="py">algorithms</span><span class="err">.</span><span class="py">louvain</span><span class="p">(</span><span class="err">'</span><span class="py">social_network</span><span class="err">'</span><span class="p">,</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">relationshipTypes</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="err">'</span><span class="nc">FRIEND</span><span class="err">'</span><span class="p">,</span><span class="w"> </span><span class="err">'</span><span class="py">COLLEAGUE</span><span class="err">'</span><span class="p">],</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">includeIntermediateCommunities</span><span class="p">:</span><span class="w"> </span><span class="nc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">YIELD</span><span class="w"> </span><span class="py">nodeId</span><span class="p">,</span><span class="w"> </span><span class="py">communityId</span><span class="p">,</span><span class="w"> </span><span class="py">modularity</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">communityId</span><span class="p">,</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">members</span><span class="p">,</span><span class="w"> </span><span class="py">AVG</span><span class="p">(</span><span class="py">modularity</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">cohesion</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">members</span><span class="w"> </span><span class="py">DESC</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Betweenness</span><span class="w"> </span><span class="py">centrality</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">bridge</span><span class="w"> </span><span class="py">detection</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">graph</span><span class="err">.</span><span class="py">algorithms</span><span class="err">.</span><span class="py">betweenness_centrality</span><span class="p">(</span><span class="py">n</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">centrality</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">centrality</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">100</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">centrality</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">centrality</span><span class="w"> </span><span class="py">DESC</span><span class="w">
</span></span></span></code></pre></div><p>These algorithms run in-process without data export, maintaining ACID guarantees and security policies.</p>
<h3 id="machine-learning-integration" class="position-relative d-flex align-items-center group">
<span>Machine Learning Integration</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="machine-learning-integration"
aria-haspopup="dialog"
aria-label="Share link: Machine Learning Integration">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="vector-embeddings-and-semantic-search" class="position-relative d-flex align-items-center group">
<span>Vector Embeddings and Semantic Search</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="vector-embeddings-and-semantic-search"
aria-haspopup="dialog"
aria-label="Share link: Vector Embeddings and Semantic Search">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Geode’s HNSW (Hierarchical Navigable Small World) index enables approximate nearest neighbor search for vector embeddings, supporting ML workloads:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">geode_client</span> <span class="kn">import</span> <span class="n">Client</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">client</span> <span class="o">=</span> <span class="n">Client</span><span class="p">(</span><span class="n">host</span><span class="o">=</span><span class="s2">"localhost"</span><span class="p">,</span> <span class="n">port</span><span class="o">=</span><span class="mi">3141</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">with</span> <span class="n">client</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Store embeddings from your ML model</span>
</span></span><span class="line"><span class="cl"> <span class="n">embedding</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">"Graph databases for analytics"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> CREATE (:Article {
</span></span></span><span class="line"><span class="cl"><span class="s2"> title: $title,
</span></span></span><span class="line"><span class="cl"><span class="s2"> content: $content,
</span></span></span><span class="line"><span class="cl"><span class="s2"> embedding: $embedding
</span></span></span><span class="line"><span class="cl"><span class="s2"> })
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'title'</span><span class="p">:</span> <span class="s1">'Graph Analytics Guide'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'content'</span><span class="p">:</span> <span class="s1">'Full article text...'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'embedding'</span><span class="p">:</span> <span class="n">embedding</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span> <span class="c1"># 384-dim vector</span>
</span></span><span class="line"><span class="cl"> <span class="p">})</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Semantic similarity search</span>
</span></span><span class="line"><span class="cl"> <span class="n">query_embedding</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">"machine learning with graphs"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="n">results</span> <span class="o">=</span> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (a:Article)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WITH a, vector_similarity(a.embedding, $query_vector) AS similarity
</span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE similarity > 0.75
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN a.title, a.content, similarity
</span></span></span><span class="line"><span class="cl"><span class="s2"> ORDER BY similarity DESC
</span></span></span><span class="line"><span class="cl"><span class="s2"> LIMIT 10
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="p">{</span><span class="s1">'query_vector'</span><span class="p">:</span> <span class="n">query_embedding</span><span class="o">.</span><span class="n">tolist</span><span class="p">()})</span>
</span></span></code></pre></div><p>Vector search enables:</p>
<ul>
<li><strong>Semantic search</strong>: Find conceptually similar content</li>
<li><strong>Recommendations</strong>: Suggest items based on embedding similarity</li>
<li><strong>Anomaly detection</strong>: Identify outliers in vector space</li>
<li><strong>Clustering</strong>: Group similar entities using vector distance</li>
</ul>
<h4 id="embedding-generation-patterns" class="position-relative d-flex align-items-center group">
<span>Embedding Generation Patterns</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="embedding-generation-patterns"
aria-haspopup="dialog"
aria-label="Share link: Embedding Generation Patterns">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Integrate with popular embedding models:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Using sentence-transformers</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">sentence_transformers</span> <span class="kn">import</span> <span class="n">SentenceTransformer</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">model</span> <span class="o">=</span> <span class="n">SentenceTransformer</span><span class="p">(</span><span class="s1">'all-MiniLM-L6-v2'</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">store_with_embeddings</span><span class="p">(</span><span class="n">client</span><span class="p">,</span> <span class="n">documents</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="k">for</span> <span class="n">doc</span> <span class="ow">in</span> <span class="n">documents</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">embedding</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="n">doc</span><span class="p">[</span><span class="s1">'text'</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> CREATE (:Document {
</span></span></span><span class="line"><span class="cl"><span class="s2"> id: $id,
</span></span></span><span class="line"><span class="cl"><span class="s2"> text: $text,
</span></span></span><span class="line"><span class="cl"><span class="s2"> embedding: $embedding,
</span></span></span><span class="line"><span class="cl"><span class="s2"> created_at: datetime()
</span></span></span><span class="line"><span class="cl"><span class="s2"> })
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'id'</span><span class="p">:</span> <span class="n">doc</span><span class="p">[</span><span class="s1">'id'</span><span class="p">],</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'text'</span><span class="p">:</span> <span class="n">doc</span><span class="p">[</span><span class="s1">'text'</span><span class="p">],</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'embedding'</span><span class="p">:</span> <span class="n">embedding</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"> <span class="p">})</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Using OpenAI embeddings</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">openai</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">create_with_openai_embeddings</span><span class="p">(</span><span class="n">client</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="n">response</span> <span class="o">=</span> <span class="n">openai</span><span class="o">.</span><span class="n">Embedding</span><span class="o">.</span><span class="n">create</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="n">model</span><span class="o">=</span><span class="s2">"text-embedding-ada-002"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nb">input</span><span class="o">=</span><span class="n">text</span>
</span></span><span class="line"><span class="cl"> <span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="n">embedding</span> <span class="o">=</span> <span class="n">response</span><span class="p">[</span><span class="s1">'data'</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s1">'embedding'</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> CREATE (:Content {
</span></span></span><span class="line"><span class="cl"><span class="s2"> text: $text,
</span></span></span><span class="line"><span class="cl"><span class="s2"> embedding: $embedding
</span></span></span><span class="line"><span class="cl"><span class="s2"> })
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="p">{</span><span class="s1">'text'</span><span class="p">:</span> <span class="n">text</span><span class="p">,</span> <span class="s1">'embedding'</span><span class="p">:</span> <span class="n">embedding</span><span class="p">})</span>
</span></span></code></pre></div>
<h4 id="hybrid-search-combining-text-and-semantic" class="position-relative d-flex align-items-center group">
<span>Hybrid Search: Combining Text and Semantic</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="hybrid-search-combining-text-and-semantic"
aria-haspopup="dialog"
aria-label="Share link: Hybrid Search: Combining Text and Semantic">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Combine BM25 full-text search with vector similarity for powerful hybrid search:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">Hybrid</span><span class="w"> </span><span class="py">search</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">weighted</span><span class="w"> </span><span class="py">score</span><span class="w"> </span><span class="py">fusion</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">doc</span><span class="p">:</span><span class="nc">Document</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">text_search</span><span class="p">(</span><span class="py">doc</span><span class="err">.</span><span class="py">content</span><span class="p">,</span><span class="w"> </span><span class="nv">$keywords</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">doc</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">bm25_score</span><span class="p">(</span><span class="py">doc</span><span class="err">.</span><span class="py">content</span><span class="p">,</span><span class="w"> </span><span class="nv">$keywords</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">text_score</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">vector_similarity</span><span class="p">(</span><span class="py">doc</span><span class="err">.</span><span class="py">embedding</span><span class="p">,</span><span class="w"> </span><span class="nv">$query_vector</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">semantic_score</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">doc</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">text_score</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">semantic_score</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">(</span><span class="py">0</span><span class="mf">.6</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">text_score</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">0</span><span class="mf">.4</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">semantic_score</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">combined_score</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">combined_score</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">0</span><span class="mf">.5</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">doc</span><span class="err">.</span><span class="py">title</span><span class="p">,</span><span class="w"> </span><span class="py">doc</span><span class="err">.</span><span class="py">summary</span><span class="p">,</span><span class="w"> </span><span class="py">combined_score</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">combined_score</span><span class="w"> </span><span class="py">DESC</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">20</span><span class="w">
</span></span></span></code></pre></div><p>This approach combines keyword matching with semantic understanding, capturing both exact terms and conceptual relevance.</p>
<h3 id="recommendation-systems" class="position-relative d-flex align-items-center group">
<span>Recommendation Systems</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="recommendation-systems"
aria-haspopup="dialog"
aria-label="Share link: Recommendation Systems">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="collaborative-filtering" class="position-relative d-flex align-items-center group">
<span>Collaborative Filtering</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="collaborative-filtering"
aria-haspopup="dialog"
aria-label="Share link: Collaborative Filtering">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Graph structure naturally represents user-item interactions for recommendation engines:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">Item</span><span class="err">-</span><span class="py">based</span><span class="w"> </span><span class="py">collaborative</span><span class="w"> </span><span class="py">filtering</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">user</span><span class="p">:</span><span class="nc">User</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="nv">$user_id</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">PURCHASED</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="nc">p</span><span class="p">:</span><span class="nc">Product</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">)</span><span class="err"><-</span><span class="p">[:</span><span class="nc">PURCHASED</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="py">other</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">PURCHASED</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">rec</span><span class="p">:</span><span class="nc">Product</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="p">(</span><span class="py">user</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">PURCHASED</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">rec</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">rec</span><span class="p">,</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="py">DISTINCT</span><span class="w"> </span><span class="py">other</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">overlap</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="py">DISTINCT</span><span class="w"> </span><span class="py">p</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">user_products</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">rec</span><span class="p">,</span><span class="w"> </span><span class="py">overlap</span><span class="p">,</span><span class="w"> </span><span class="py">user_products</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">(</span><span class="py">overlap</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">1</span><span class="mf">.0</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">user_products</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">jaccard_similarity</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">jaccard_similarity</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">0</span><span class="mf">.3</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">rec</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">rec</span><span class="err">.</span><span class="py">category</span><span class="p">,</span><span class="w"> </span><span class="py">jaccard_similarity</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">jaccard_similarity</span><span class="w"> </span><span class="py">DESC</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">10</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">User</span><span class="err">-</span><span class="py">based</span><span class="w"> </span><span class="py">collaborative</span><span class="w"> </span><span class="py">filtering</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">weighted</span><span class="w"> </span><span class="py">similarity</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">user</span><span class="p">:</span><span class="nc">User</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="nv">$user_id</span><span class="p">})</span><span class="err">-</span><span class="p">[</span><span class="nc">r1</span><span class="p">:</span><span class="nc">RATED</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Product</span><span class="p">)</span><span class="err"><-</span><span class="p">[</span><span class="py">r2</span><span class="p">:</span><span class="nc">RATED</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="py">similar</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">user</span><span class="p">,</span><span class="w"> </span><span class="py">similar</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="py">p</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">common_products</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SUM</span><span class="p">(</span><span class="py">ABS</span><span class="p">(</span><span class="py">r1</span><span class="err">.</span><span class="py">rating</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">r2</span><span class="err">.</span><span class="py">rating</span><span class="p">))</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">rating_diff</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">similar</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">common_products</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">common_products</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="p">(</span><span class="py">1</span><span class="mf">.0</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">rating_diff</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">similarity_score</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">similarity_score</span><span class="w"> </span><span class="py">DESC</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">20</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">similar</span><span class="p">)</span><span class="err">-</span><span class="p">[</span><span class="py">r</span><span class="p">:</span><span class="nc">RATED</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">rec</span><span class="p">:</span><span class="nc">Product</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="p">(</span><span class="py">user</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">RATED</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">rec</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">r</span><span class="err">.</span><span class="py">rating</span><span class="w"> </span><span class="err">></span><span class="p">=</span><span class="w"> </span><span class="py">4</span><span class="mf">.0</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">rec</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AVG</span><span class="p">(</span><span class="py">r</span><span class="err">.</span><span class="py">rating</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">avg_rating</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">recommendation_strength</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">recommendation_strength</span><span class="w"> </span><span class="py">DESC</span><span class="p">,</span><span class="w"> </span><span class="py">avg_rating</span><span class="w"> </span><span class="py">DESC</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">10</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="content-based-recommendations" class="position-relative d-flex align-items-center group">
<span>Content-Based Recommendations</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="content-based-recommendations"
aria-haspopup="dialog"
aria-label="Share link: Content-Based Recommendations">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Combine graph relationships with vector similarity:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">Content</span><span class="err">-</span><span class="py">based</span><span class="w"> </span><span class="py">recommendations</span><span class="w"> </span><span class="py">using</span><span class="w"> </span><span class="py">embeddings</span><span class="w"> </span><span class="py">and</span><span class="w"> </span><span class="py">graph</span><span class="w"> </span><span class="py">features</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">user</span><span class="p">:</span><span class="nc">User</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="nv">$user_id</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">LIKED</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="nc">item</span><span class="p">:</span><span class="nc">Item</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">COLLECT</span><span class="p">(</span><span class="py">item</span><span class="err">.</span><span class="py">embedding</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">liked_embeddings</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">COLLECT</span><span class="p">(</span><span class="py">item</span><span class="err">.</span><span class="py">category</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">preferred_categories</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Create</span><span class="w"> </span><span class="py">user</span><span class="w"> </span><span class="py">preference</span><span class="w"> </span><span class="py">vector</span><span class="w"> </span><span class="p">(</span><span class="py">centroid</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">reduce</span><span class="p">(</span><span class="py">sum</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="p">[</span><span class="py">0</span><span class="mf">.0</span><span class="p">]</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">384</span><span class="p">,</span><span class="w"> </span><span class="py">emb</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="py">liked_embeddings</span><span class="w"> </span><span class="p">|</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">vector_add</span><span class="p">(</span><span class="py">sum</span><span class="p">,</span><span class="w"> </span><span class="py">emb</span><span class="p">))</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">user_vector</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">preferred_categories</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">candidate</span><span class="p">:</span><span class="nc">Item</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">candidate</span><span class="err">.</span><span class="py">category</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="py">preferred_categories</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="p">(</span><span class="py">user</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">LIKED</span><span class="p">|</span><span class="py">DISLIKED</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">candidate</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">candidate</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">vector_similarity</span><span class="p">(</span><span class="py">user_vector</span><span class="p">,</span><span class="w"> </span><span class="py">candidate</span><span class="err">.</span><span class="py">embedding</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">content_similarity</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">content_similarity</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">0</span><span class="mf">.7</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">candidate</span><span class="err">.</span><span class="py">title</span><span class="p">,</span><span class="w"> </span><span class="py">candidate</span><span class="err">.</span><span class="py">category</span><span class="p">,</span><span class="w"> </span><span class="py">content_similarity</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">content_similarity</span><span class="w"> </span><span class="py">DESC</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">15</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="anomaly-detection" class="position-relative d-flex align-items-center group">
<span>Anomaly Detection</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="anomaly-detection"
aria-haspopup="dialog"
aria-label="Share link: Anomaly Detection">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="graph-based-anomaly-detection" class="position-relative d-flex align-items-center group">
<span>Graph-Based Anomaly Detection</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="graph-based-anomaly-detection"
aria-haspopup="dialog"
aria-label="Share link: Graph-Based Anomaly Detection">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Detect unusual patterns using graph structure:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">Detect</span><span class="w"> </span><span class="py">anomalous</span><span class="w"> </span><span class="py">transaction</span><span class="w"> </span><span class="py">patterns</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">account</span><span class="p">:</span><span class="nc">Account</span><span class="p">)</span><span class="err">-</span><span class="p">[</span><span class="py">t</span><span class="p">:</span><span class="nc">TRANSACTION</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">recipient</span><span class="p">:</span><span class="nc">Account</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">account</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="py">t</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">tx_count</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AVG</span><span class="p">(</span><span class="py">t</span><span class="err">.</span><span class="py">amount</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">avg_amount</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">STDDEV</span><span class="p">(</span><span class="py">t</span><span class="err">.</span><span class="py">amount</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">stddev_amount</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">COLLECT</span><span class="p">(</span><span class="py">DISTINCT</span><span class="w"> </span><span class="py">recipient</span><span class="err">.</span><span class="py">country</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">countries</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">tx_count</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">10</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">account</span><span class="p">,</span><span class="w"> </span><span class="py">tx_count</span><span class="p">,</span><span class="w"> </span><span class="py">avg_amount</span><span class="p">,</span><span class="w"> </span><span class="py">stddev_amount</span><span class="p">,</span><span class="w"> </span><span class="py">countries</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SIZE</span><span class="p">(</span><span class="py">countries</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">country_count</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Flag</span><span class="w"> </span><span class="py">accounts</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">unusual</span><span class="w"> </span><span class="py">patterns</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">account</span><span class="p">)</span><span class="err">-</span><span class="p">[</span><span class="py">t</span><span class="p">:</span><span class="nc">TRANSACTION</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">r</span><span class="p">:</span><span class="nc">Account</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">t</span><span class="err">.</span><span class="py">amount</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="p">(</span><span class="py">avg_amount</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">3</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">stddev_amount</span><span class="p">)</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">Outlier</span><span class="w"> </span><span class="py">detection</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">OR</span><span class="w"> </span><span class="py">country_count</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">10</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">Unusual</span><span class="w"> </span><span class="py">geographic</span><span class="w"> </span><span class="py">spread</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">OR</span><span class="w"> </span><span class="py">tx_count</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">100</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">High</span><span class="w"> </span><span class="py">transaction</span><span class="w"> </span><span class="py">volume</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">account</span><span class="err">.</span><span class="py">id</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">tx_count</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">country_count</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">t</span><span class="err">.</span><span class="py">amount</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">suspicious_amount</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">avg_amount</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">3</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">stddev_amount</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">threshold</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">'</span><span class="py">outlier_detection</span><span class="err">'</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">reason</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="community-based-anomaly-detection" class="position-relative d-flex align-items-center group">
<span>Community-Based Anomaly Detection</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="community-based-anomaly-detection"
aria-haspopup="dialog"
aria-label="Share link: Community-Based Anomaly Detection">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Identify entities that don’t fit their community:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">Detect</span><span class="w"> </span><span class="py">nodes</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">unusual</span><span class="w"> </span><span class="py">community</span><span class="w"> </span><span class="py">membership</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CALL</span><span class="w"> </span><span class="py">graph</span><span class="err">.</span><span class="py">algorithms</span><span class="err">.</span><span class="py">louvain</span><span class="p">(</span><span class="err">'</span><span class="py">transaction_network</span><span class="err">'</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">YIELD</span><span class="w"> </span><span class="py">nodeId</span><span class="p">,</span><span class="w"> </span><span class="py">communityId</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="p">)</span><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">id</span><span class="p">(</span><span class="py">n</span><span class="p">)</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">nodeId</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">n</span><span class="p">,</span><span class="w"> </span><span class="py">communityId</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SIZE</span><span class="p">((</span><span class="py">n</span><span class="p">)</span><span class="err">--</span><span class="p">())</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">degree</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SIZE</span><span class="p">((</span><span class="py">n</span><span class="p">)</span><span class="err">--</span><span class="p">(</span><span class="py">m</span><span class="p">)</span><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">m</span><span class="err">.</span><span class="py">communityId</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">communityId</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">internal_degree</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">n</span><span class="p">,</span><span class="w"> </span><span class="py">communityId</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">internal_degree</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">1</span><span class="mf">.0</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">degree</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">community_affinity</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">community_affinity</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">0</span><span class="mf">.3</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">Weak</span><span class="w"> </span><span class="py">community</span><span class="w"> </span><span class="py">membership</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">id</span><span class="p">,</span><span class="w"> </span><span class="py">communityId</span><span class="p">,</span><span class="w"> </span><span class="py">community_affinity</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">community_affinity</span><span class="w"> </span><span class="py">ASC</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="fraud-detection" class="position-relative d-flex align-items-center group">
<span>Fraud Detection</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="fraud-detection"
aria-haspopup="dialog"
aria-label="Share link: Fraud Detection">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="pattern-matching-for-fraud" class="position-relative d-flex align-items-center group">
<span>Pattern Matching for Fraud</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="pattern-matching-for-fraud"
aria-haspopup="dialog"
aria-label="Share link: Pattern Matching for Fraud">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Graph patterns reveal complex fraud schemes:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">Detect</span><span class="w"> </span><span class="py">circular</span><span class="w"> </span><span class="py">payment</span><span class="w"> </span><span class="py">patterns</span><span class="w"> </span><span class="p">(</span><span class="py">potential</span><span class="w"> </span><span class="py">money</span><span class="w"> </span><span class="py">laundering</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="py">path</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="p">(</span><span class="py">a</span><span class="p">:</span><span class="nc">Account</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">TRANSFER</span><span class="err">*</span><span class="py">3</span><span class="err">.</span><span class="mf">.5</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">a</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">ALL</span><span class="p">(</span><span class="py">r</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="py">relationships</span><span class="p">(</span><span class="py">path</span><span class="p">)</span><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">r</span><span class="err">.</span><span class="py">amount</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">10000</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">reduce</span><span class="p">(</span><span class="py">total</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">0</span><span class="p">,</span><span class="w"> </span><span class="py">r</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="py">relationships</span><span class="p">(</span><span class="py">path</span><span class="p">)</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="py">total</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">r</span><span class="err">.</span><span class="py">amount</span><span class="p">)</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">50000</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">path</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">nodes</span><span class="p">(</span><span class="py">path</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">accounts</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">reduce</span><span class="p">(</span><span class="py">total</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">0</span><span class="p">,</span><span class="w"> </span><span class="py">r</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="py">relationships</span><span class="p">(</span><span class="py">path</span><span class="p">)</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="py">total</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">r</span><span class="err">.</span><span class="py">amount</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">cycle_amount</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">accounts</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">cycle_amount</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">LENGTH</span><span class="p">(</span><span class="py">path</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">cycle_length</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">'</span><span class="py">circular_transfer</span><span class="err">'</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">fraud_type</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Detect</span><span class="w"> </span><span class="py">identity</span><span class="w"> </span><span class="py">fraud</span><span class="w"> </span><span class="py">through</span><span class="w"> </span><span class="py">shared</span><span class="w"> </span><span class="py">attributes</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">a1</span><span class="p">:</span><span class="nc">Account</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="py">a2</span><span class="p">:</span><span class="nc">Account</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">id</span><span class="p">(</span><span class="py">a1</span><span class="p">)</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">id</span><span class="p">(</span><span class="py">a2</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">a1</span><span class="err">.</span><span class="py">phone</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">a2</span><span class="err">.</span><span class="py">phone</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">a1</span><span class="err">.</span><span class="py">address</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">a2</span><span class="err">.</span><span class="py">address</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">a1</span><span class="err">.</span><span class="py">email</span><span class="w"> </span><span class="err"><></span><span class="w"> </span><span class="py">a2</span><span class="err">.</span><span class="py">email</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">a1</span><span class="p">,</span><span class="w"> </span><span class="py">a2</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SIZE</span><span class="p">((</span><span class="py">a1</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">TRANSACTION</span><span class="p">]</span><span class="err">-></span><span class="p">())</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">a1_tx</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SIZE</span><span class="p">((</span><span class="py">a2</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">TRANSACTION</span><span class="p">]</span><span class="err">-></span><span class="p">())</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">a2_tx</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">a1_tx</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">0</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">a2_tx</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">0</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">a1</span><span class="err">.</span><span class="py">id</span><span class="p">,</span><span class="w"> </span><span class="py">a2</span><span class="err">.</span><span class="py">id</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">a1</span><span class="err">.</span><span class="py">phone</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">shared_phone</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">a1</span><span class="err">.</span><span class="py">address</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">shared_address</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">'</span><span class="py">identity_fraud_suspect</span><span class="err">'</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">fraud_type</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="time-series-analysis-on-graphs" class="position-relative d-flex align-items-center group">
<span>Time-Series Analysis on Graphs</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="time-series-analysis-on-graphs"
aria-haspopup="dialog"
aria-label="Share link: Time-Series Analysis on Graphs">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="temporal-pattern-analysis" class="position-relative d-flex align-items-center group">
<span>Temporal Pattern Analysis</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="temporal-pattern-analysis"
aria-haspopup="dialog"
aria-label="Share link: Temporal Pattern Analysis">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Combine graph structure with temporal queries:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">Analyze</span><span class="w"> </span><span class="py">user</span><span class="w"> </span><span class="py">behavior</span><span class="w"> </span><span class="py">over</span><span class="w"> </span><span class="py">time</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="nv">$user_id</span><span class="p">})</span><span class="err">-</span><span class="p">[</span><span class="nc">a</span><span class="p">:</span><span class="nc">ACTION</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">entity</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">a</span><span class="err">.</span><span class="py">timestamp</span><span class="w"> </span><span class="err">></span><span class="p">=</span><span class="w"> </span><span class="py">datetime</span><span class="p">()</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">duration</span><span class="p">(</span><span class="err">'</span><span class="py">P30D</span><span class="err">'</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">u</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">DATE</span><span class="p">(</span><span class="py">a</span><span class="err">.</span><span class="py">timestamp</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">day</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">a</span><span class="err">.</span><span class="py">action_type</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">action</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">action_count</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">u</span><span class="p">,</span><span class="w"> </span><span class="py">day</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">COLLECT</span><span class="p">({</span><span class="py">action</span><span class="p">:</span><span class="w"> </span><span class="nc">action</span><span class="p">,</span><span class="w"> </span><span class="py">count</span><span class="p">:</span><span class="w"> </span><span class="nc">action_count</span><span class="p">})</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">daily_actions</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">day</span><span class="p">,</span><span class="w"> </span><span class="py">daily_actions</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">day</span><span class="w"> </span><span class="py">ASC</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Detect</span><span class="w"> </span><span class="py">trend</span><span class="w"> </span><span class="py">changes</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">product</span><span class="p">:</span><span class="nc">Product</span><span class="p">)</span><span class="err"><-</span><span class="p">[</span><span class="py">sale</span><span class="p">:</span><span class="nc">SOLD</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="py">order</span><span class="p">:</span><span class="nc">Order</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">sale</span><span class="err">.</span><span class="py">timestamp</span><span class="w"> </span><span class="err">></span><span class="p">=</span><span class="w"> </span><span class="py">datetime</span><span class="p">()</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">duration</span><span class="p">(</span><span class="err">'</span><span class="py">P90D</span><span class="err">'</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">product</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">DATE</span><span class="p">(</span><span class="py">sale</span><span class="err">.</span><span class="py">timestamp</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">week</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">weekly_sales</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">product</span><span class="p">,</span><span class="w"> </span><span class="py">week</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">product</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">COLLECT</span><span class="p">(</span><span class="py">weekly_sales</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">sales_series</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">product</span><span class="p">,</span><span class="w"> </span><span class="py">sales_series</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">sales_series</span><span class="p">[</span><span class="err">-</span><span class="py">4</span><span class="err">..</span><span class="p">]</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">recent_sales</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">sales_series</span><span class="p">[</span><span class="py">0</span><span class="err">.</span><span class="mf">.4</span><span class="p">]</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">early_sales</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">AVG</span><span class="p">(</span><span class="py">recent_sales</span><span class="p">)</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">1</span><span class="mf">.5</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">AVG</span><span class="p">(</span><span class="py">early_sales</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">product</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AVG</span><span class="p">(</span><span class="py">early_sales</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">avg_early_sales</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AVG</span><span class="p">(</span><span class="py">recent_sales</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">avg_recent_sales</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">(</span><span class="py">AVG</span><span class="p">(</span><span class="py">recent_sales</span><span class="p">)</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">AVG</span><span class="p">(</span><span class="py">early_sales</span><span class="p">))</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">AVG</span><span class="p">(</span><span class="py">early_sales</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">growth_rate</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">growth_rate</span><span class="w"> </span><span class="py">DESC</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="feature-engineering" class="position-relative d-flex align-items-center group">
<span>Feature Engineering</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="feature-engineering"
aria-haspopup="dialog"
aria-label="Share link: Feature Engineering">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="graph-features-for-ml-models" class="position-relative d-flex align-items-center group">
<span>Graph Features for ML Models</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="graph-features-for-ml-models"
aria-haspopup="dialog"
aria-label="Share link: Graph Features for ML Models">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Extract graph-based features for training ML models:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">geode_client</span> <span class="kn">import</span> <span class="n">Client</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">extract_node_features</span><span class="p">(</span><span class="n">client</span><span class="p">,</span> <span class="n">node_label</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Extract graph features for ML training."""</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="n">features</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="sa">f</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (n:</span><span class="si">{</span><span class="n">node_label</span><span class="si">}</span><span class="s2">)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WITH n,
</span></span></span><span class="line"><span class="cl"><span class="s2"> SIZE((n)--()) AS degree,
</span></span></span><span class="line"><span class="cl"><span class="s2"> SIZE((n)-->()) AS out_degree,
</span></span></span><span class="line"><span class="cl"><span class="s2"> SIZE((n)<--()) AS in_degree,
</span></span></span><span class="line"><span class="cl"><span class="s2"> graph.algorithms.pagerank(n) AS pagerank,
</span></span></span><span class="line"><span class="cl"><span class="s2"> graph.algorithms.clustering_coefficient(n) AS clustering,
</span></span></span><span class="line"><span class="cl"><span class="s2"> graph.algorithms.closeness_centrality(n) AS closeness
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN
</span></span></span><span class="line"><span class="cl"><span class="s2"> id(n) AS node_id,
</span></span></span><span class="line"><span class="cl"><span class="s2"> degree,
</span></span></span><span class="line"><span class="cl"><span class="s2"> out_degree,
</span></span></span><span class="line"><span class="cl"><span class="s2"> in_degree,
</span></span></span><span class="line"><span class="cl"><span class="s2"> pagerank,
</span></span></span><span class="line"><span class="cl"><span class="s2"> clustering,
</span></span></span><span class="line"><span class="cl"><span class="s2"> closeness
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">([</span><span class="nb">dict</span><span class="p">(</span><span class="n">r</span><span class="p">)</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">features</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Use features in scikit-learn</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">sklearn.ensemble</span> <span class="kn">import</span> <span class="n">RandomForestClassifier</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">train_node_classifier</span><span class="p">(</span><span class="n">client</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Extract features</span>
</span></span><span class="line"><span class="cl"> <span class="n">df</span> <span class="o">=</span> <span class="k">await</span> <span class="n">extract_node_features</span><span class="p">(</span><span class="n">client</span><span class="p">,</span> <span class="s1">'User'</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Get labels (assuming they exist)</span>
</span></span><span class="line"><span class="cl"> <span class="n">labels</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (n:User)
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN id(n) AS node_id, n.is_fraudulent AS label
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="n">label_df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">([</span><span class="nb">dict</span><span class="p">(</span><span class="n">r</span><span class="p">)</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">labels</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Merge and train</span>
</span></span><span class="line"><span class="cl"> <span class="n">training_data</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">merge</span><span class="p">(</span><span class="n">label_df</span><span class="p">,</span> <span class="n">on</span><span class="o">=</span><span class="s1">'node_id'</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="n">X</span> <span class="o">=</span> <span class="n">training_data</span><span class="o">.</span><span class="n">drop</span><span class="p">([</span><span class="s1">'node_id'</span><span class="p">,</span> <span class="s1">'label'</span><span class="p">],</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="n">y</span> <span class="o">=</span> <span class="n">training_data</span><span class="p">[</span><span class="s1">'label'</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="n">model</span> <span class="o">=</span> <span class="n">RandomForestClassifier</span><span class="p">(</span><span class="n">n_estimators</span><span class="o">=</span><span class="mi">100</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="n">model</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">model</span>
</span></span></code></pre></div>
<h3 id="performance-optimization-for-analytics" class="position-relative d-flex align-items-center group">
<span>Performance Optimization for Analytics</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="performance-optimization-for-analytics"
aria-haspopup="dialog"
aria-label="Share link: Performance Optimization for Analytics">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="batch-processing" class="position-relative d-flex align-items-center group">
<span>Batch Processing</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="batch-processing"
aria-haspopup="dialog"
aria-label="Share link: Batch Processing">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>For large-scale analytics, use batch processing:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">Process</span><span class="w"> </span><span class="py">in</span><span class="w"> </span><span class="py">batches</span><span class="w"> </span><span class="py">using</span><span class="w"> </span><span class="py">SKIP</span><span class="w"> </span><span class="py">and</span><span class="w"> </span><span class="py">LIMIT</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">1000</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">batch_size</span><span class="p">,</span><span class="w"> </span><span class="py">0</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">offset</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SKIP</span><span class="w"> </span><span class="py">offset</span><span class="w"> </span><span class="py">LIMIT</span><span class="w"> </span><span class="py">batch_size</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">n</span><span class="p">,</span><span class="w"> </span><span class="py">graph</span><span class="err">.</span><span class="py">algorithms</span><span class="err">.</span><span class="py">pagerank</span><span class="p">(</span><span class="py">n</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">rank</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SET</span><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">pagerank</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">rank</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">processed</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Parallel</span><span class="w"> </span><span class="py">batch</span><span class="w"> </span><span class="py">processing</span><span class="w"> </span><span class="p">(</span><span class="py">multiple</span><span class="w"> </span><span class="py">sessions</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Session</span><span class="w"> </span><span class="py">1</span><span class="p">:</span><span class="w"> </span><span class="nc">Process</span><span class="w"> </span><span class="py">users</span><span class="w"> </span><span class="py">0</span><span class="err">-</span><span class="py">999</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Session</span><span class="w"> </span><span class="py">2</span><span class="p">:</span><span class="w"> </span><span class="nc">Process</span><span class="w"> </span><span class="py">users</span><span class="w"> </span><span class="py">1000</span><span class="err">-</span><span class="py">1999</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">etc</span><span class="err">.</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="index-optimization" class="position-relative d-flex align-items-center group">
<span>Index Optimization</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="index-optimization"
aria-haspopup="dialog"
aria-label="Share link: Index Optimization">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Create indexes for analytical queries:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">Create</span><span class="w"> </span><span class="py">indexes</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">common</span><span class="w"> </span><span class="py">analytical</span><span class="w"> </span><span class="py">patterns</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">user_activity_idx</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="p">:</span><span class="nc">User</span><span class="p">(</span><span class="py">last_active_date</span><span class="p">,</span><span class="w"> </span><span class="py">registration_date</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">transaction_time_idx</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="p">:</span><span class="nc">Transaction</span><span class="p">(</span><span class="py">timestamp</span><span class="p">,</span><span class="w"> </span><span class="py">amount</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">product_category_idx</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="p">:</span><span class="nc">Product</span><span class="p">(</span><span class="py">category</span><span class="p">,</span><span class="w"> </span><span class="py">price</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Use</span><span class="w"> </span><span class="py">indexes</span><span class="w"> </span><span class="py">in</span><span class="w"> </span><span class="py">analytical</span><span class="w"> </span><span class="py">queries</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">last_active_date</span><span class="w"> </span><span class="err">></span><span class="p">=</span><span class="w"> </span><span class="py">datetime</span><span class="p">()</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">duration</span><span class="p">(</span><span class="err">'</span><span class="py">P30D</span><span class="err">'</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">registration_date</span><span class="w"> </span><span class="err"><</span><span class="p">=</span><span class="w"> </span><span class="py">datetime</span><span class="p">()</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">duration</span><span class="p">(</span><span class="err">'</span><span class="py">P365D</span><span class="err">'</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">retained_users</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="best-practices" class="position-relative d-flex align-items-center group">
<span>Best Practices</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="best-practices"
aria-haspopup="dialog"
aria-label="Share link: Best Practices">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="choosing-the-right-approach" class="position-relative d-flex align-items-center group">
<span>Choosing the Right Approach</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="choosing-the-right-approach"
aria-haspopup="dialog"
aria-label="Share link: Choosing the Right Approach">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><ul>
<li><strong>Use native graph algorithms</strong> for standard metrics (PageRank, community detection)</li>
<li><strong>Use vector search</strong> for semantic similarity and ML integration</li>
<li><strong>Use BM25</strong> for keyword-based content search</li>
<li><strong>Combine approaches</strong> for hybrid analytics (graph + ML + search)</li>
</ul>
<h4 id="data-pipeline-integration" class="position-relative d-flex align-items-center group">
<span>Data Pipeline Integration</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="data-pipeline-integration"
aria-haspopup="dialog"
aria-label="Share link: Data Pipeline Integration">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Integrate Geode with your ML pipeline:</p>
<ol>
<li><strong>Feature Store Pattern</strong>: Store engineered features in Geode for real-time serving</li>
<li><strong>Online/Offline Consistency</strong>: Use same queries for batch training and online inference</li>
<li><strong>Incremental Updates</strong>: Use CDC to update ML models when graph changes</li>
<li><strong>A/B Testing</strong>: Use graph partitioning for controlled experiments</li>
</ol>
<h4 id="scalability-considerations" class="position-relative d-flex align-items-center group">
<span>Scalability Considerations</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="scalability-considerations"
aria-haspopup="dialog"
aria-label="Share link: Scalability Considerations">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><ul>
<li><strong>Limit traversal depth</strong> in production queries (use explicit depth limits)</li>
<li><strong>Use property indexes</strong> to filter before traversal</li>
<li><strong>Cache frequently computed metrics</strong> (PageRank, centrality)</li>
<li><strong>Consider distributed mode</strong> for graphs with billions of edges</li>
<li><strong>Monitor query performance</strong> with EXPLAIN and PROFILE</li>
</ul>
<h3 id="further-reading" class="position-relative d-flex align-items-center group">
<span>Further Reading</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="further-reading"
aria-haspopup="dialog"
aria-label="Share link: Further Reading">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><ul>
<li><a
href="/tags/graph-algorithms/"
>Graph Algorithms</a>
- Built-in algorithm reference</li>
<li><a
href="/tags/vector-search/"
>Vector Search</a>
- HNSW and embeddings</li>
<li><a
href="/tags/bm25/"
>BM25 Full-Text Search</a>
- Text ranking and search</li>
<li><a
href="/categories/performance/"
>Performance Optimization</a>
- Query tuning</li>
<li><a
href="/tags/fraud-detection/"
>Fraud Detection Patterns</a>
- Graph-based fraud detection</li>
<li><a
href="/tags/anomaly-detection/"
>Anomaly Detection</a>
- Unusual pattern detection</li>
<li><a
href="/tags/community-detection/"
>Community Detection</a>
- Clustering algorithms</li>
<li><a
href="/tags/collaborative-filtering/"
>Recommendation Systems</a>
- Recommendation patterns</li>
</ul>
Category
1 article
Category: Analytics And Ml
Comprehensive analytics-and-ml documentation for Geode graph database including guides, tutorials, and reference materials.