<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 --> <h2 id="pagerank-algorithm-in-geode" class="position-relative d-flex align-items-center group"> <span>PageRank Algorithm in Geode</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="pagerank-algorithm-in-geode" aria-haspopup="dialog" aria-label="Share link: PageRank Algorithm in Geode"> <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> </h2><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><p>PageRank is a graph algorithm that measures the importance of nodes based on their incoming connections and the importance of connecting nodes. Originally developed by Google to rank web pages, PageRank is now widely used for influence analysis, recommendation systems, and network centrality calculations.</p> <p>Geode provides native support for implementing PageRank through GQL queries, enabling efficient importance scoring across large graph datasets.</p> <h3 id="understanding-pagerank" class="position-relative d-flex align-items-center group"> <span>Understanding PageRank</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-pagerank" aria-haspopup="dialog" aria-label="Share link: Understanding PageRank"> <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><p>PageRank assigns each node a numerical score representing its importance. The algorithm operates on the principle that important nodes receive links from other important nodes, creating a recursive definition of importance.</p> <h4 id="core-concepts" class="position-relative d-flex align-items-center group"> <span>Core Concepts</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="core-concepts" aria-haspopup="dialog" aria-label="Share link: Core Concepts"> <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><strong>Importance Propagation</strong>: Nodes distribute their importance scores to their outgoing neighbors, weighted by the number of outgoing edges.</p> <p><strong>Damping Factor</strong>: A probability (typically 0.85) that represents the likelihood of continuing to follow links versus randomly jumping to any node.</p> <p><strong>Iterative Convergence</strong>: PageRank calculations iterate until scores stabilize within a tolerance threshold, typically after 10-50 iterations.</p> <p><strong>Initial Distribution</strong>: All nodes start with equal importance scores, usually 1/N where N is the total number of nodes.</p> <h3 id="basic-pagerank-implementation" class="position-relative d-flex align-items-center group"> <span>Basic PageRank Implementation</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="basic-pagerank-implementation" aria-haspopup="dialog" aria-label="Share link: Basic PageRank Implementation"> <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="computing-pagerank-scores" class="position-relative d-flex align-items-center group"> <span>Computing PageRank Scores</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="computing-pagerank-scores" aria-haspopup="dialog" aria-label="Share link: Computing PageRank Scores"> <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><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">a</span><span class="w"> </span><span class="py">temporary</span><span class="w"> </span><span class="py">property</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">store</span><span class="w"> </span><span class="py">PageRank</span><span class="w"> </span><span class="py">scores</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">Page</span><span class="p">)</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">1</span><span class="mf">.0</span><span class="w"> </span><span class="err">/</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></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="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">page</span><span class="p">,</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="py">AS</span><span class="w"> </span><span class="py">initial_score</span><span class="err">;</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">Iterative</span><span class="w"> </span><span class="py">PageRank</span><span class="w"> </span><span class="py">update</span><span class="w"> </span><span class="p">(</span><span class="py">run</span><span class="w"> </span><span class="py">multiple</span><span class="w"> </span><span class="py">times</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">source</span><span class="p">:</span><span class="nc">Page</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">LINKS_TO</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">target</span><span class="p">:</span><span class="nc">Page</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">target</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">source</span><span class="err">.</span><span class="py">pagerank</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">COUNT</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="p">(</span><span class="py">source</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">LINKS_TO</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">()</span><span class="w"> </span><span class="p">})</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">incoming_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">target</span><span class="err">.</span><span class="py">pagerank_new</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">0</span><span class="mf">.15</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">0</span><span class="mf">.85</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">incoming_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">target</span><span class="err">.</span><span class="py">id</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">page</span><span class="p">,</span><span class="w"> </span><span class="py">target</span><span class="err">.</span><span class="py">pagerank_new</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">updated_score</span><span class="err">;</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">Copy</span><span class="w"> </span><span class="py">new</span><span class="w"> </span><span class="py">scores</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">current</span><span class="w"> </span><span class="py">scores</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">Page</span><span class="p">)</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">n</span><span class="err">.</span><span class="py">pagerank_new</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">REMOVE</span><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">pagerank_new</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="finding-top-ranked-nodes" class="position-relative d-flex align-items-center group"> <span>Finding Top-Ranked Nodes</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="finding-top-ranked-nodes" aria-haspopup="dialog" aria-label="Share link: Finding Top-Ranked Nodes"> <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><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">Get</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">highest</span><span class="w"> </span><span class="py">PageRank</span><span class="w"> </span><span class="py">scores</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">Page</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">n</span><span class="err">.</span><span class="py">pagerank</span><span class="w"> </span><span class="py">IS</span><span class="w"> </span><span class="py">NOT</span><span class="w"> </span><span class="py">NULL</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="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">page</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">title</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">title</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">pagerank</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">importance_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">n</span><span class="err">.</span><span class="py">pagerank</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="err">;</span><span class="w"> </span></span></span></code></pre></div> <h3 id="advanced-pagerank-patterns" class="position-relative d-flex align-items-center group"> <span>Advanced PageRank 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="advanced-pagerank-patterns" aria-haspopup="dialog" aria-label="Share link: Advanced PageRank 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> </h3> <h4 id="personalized-pagerank" class="position-relative d-flex align-items-center group"> <span>Personalized PageRank</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="personalized-pagerank" aria-haspopup="dialog" aria-label="Share link: Personalized PageRank"> <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>Personalized PageRank biases the random jump probability toward specific nodes, useful for recommendations.</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">Personalized</span><span class="w"> </span><span class="py">PageRank</span><span class="w"> </span><span class="py">from</span><span class="w"> </span><span class="py">a</span><span class="w"> </span><span class="py">seed</span><span class="w"> </span><span class="py">node</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">seed</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="err">&#39;</span><span class="nc">user123</span><span class="err">&#39;</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">n</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">SET</span><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">ppr</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">CASE</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">n</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">seed</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="py">1</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">ELSE</span><span class="w"> </span><span class="py">0</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">END</span><span class="err">;</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">Iterative</span><span class="w"> </span><span class="py">update</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">personalization</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">source</span><span class="p">:</span><span class="nc">Item</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">RELATES_TO</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">target</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">target</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">source</span><span class="err">.</span><span class="py">ppr</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">COUNT</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="p">(</span><span class="py">source</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">RELATES_TO</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">()</span><span class="w"> </span><span class="p">})</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">incoming_ppr</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">0</span><span class="mf">.15</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">CASE</span><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">target</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="p">[(</span><span class="py">seed</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="err">&#39;</span><span class="nc">user123</span><span class="err">&#39;</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">LIKES</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">()</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="py">seed</span><span class="p">]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="py">1</span><span class="mf">.0</span><span class="w"> </span><span class="py">ELSE</span><span class="w"> </span><span class="py">0</span><span class="mf">.0</span><span class="w"> </span><span class="py">END</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">personalization</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">target</span><span class="err">.</span><span class="py">ppr_new</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">personalization</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">0</span><span class="mf">.85</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">incoming_ppr</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="topic-sensitive-pagerank" class="position-relative d-flex align-items-center group"> <span>Topic-Sensitive PageRank</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="topic-sensitive-pagerank" aria-haspopup="dialog" aria-label="Share link: Topic-Sensitive PageRank"> <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>Compute PageRank scores specific to different topics or categories.</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">within</span><span class="w"> </span><span class="py">a</span><span class="w"> </span><span class="py">topic</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">Article</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">n</span><span class="err">.</span><span class="py">category</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">technology</span><span class="err">&#39;</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">topic_rank</span><span class="w"> </span><span class="p">=</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">COUNT</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">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">m</span><span class="p">:</span><span class="nc">Article</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">category</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">technology</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="err">;</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">Iterate</span><span class="w"> </span><span class="py">within</span><span class="w"> </span><span class="py">topic</span><span class="w"> </span><span class="py">boundaries</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">source</span><span class="p">:</span><span class="nc">Article</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">CITES</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">target</span><span class="p">:</span><span class="nc">Article</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">source</span><span class="err">.</span><span class="py">category</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">technology</span><span class="err">&#39;</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">target</span><span class="err">.</span><span class="py">category</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">technology</span><span class="err">&#39;</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">target</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">source</span><span class="err">.</span><span class="py">topic_rank</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">COUNT</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="p">(</span><span class="py">source</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">CITES</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(:</span><span class="nc">Article</span><span class="w"> </span><span class="p">{</span><span class="py">category</span><span class="p">:</span><span class="w"> </span><span class="err">&#39;</span><span class="nc">technology</span><span class="err">&#39;</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="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">topic_incoming</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">target</span><span class="err">.</span><span class="py">topic_rank_new</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">0</span><span class="mf">.15</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">0</span><span class="mf">.85</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">topic_incoming</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="weighted-pagerank" class="position-relative d-flex align-items-center group"> <span>Weighted PageRank</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="weighted-pagerank" aria-haspopup="dialog" aria-label="Share link: Weighted PageRank"> <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>Incorporate edge weights to reflect varying importance of connections.</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">Weighted</span><span class="w"> </span><span class="py">PageRank</span><span class="w"> </span><span class="py">calculation</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">source</span><span class="p">:</span><span class="nc">Page</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">LINKS_TO</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">target</span><span class="p">:</span><span class="nc">Page</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">target</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">r</span><span class="err">.</span><span class="py">weight</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">source</span><span class="err">.</span><span class="py">pagerank</span><span class="w"> </span><span class="err">/</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </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">source</span><span class="p">)</span><span class="err">-</span><span class="p">[</span><span class="py">rel</span><span class="p">:</span><span class="nc">LINKS_TO</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">()</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="py">rel</span><span class="err">.</span><span class="py">weight</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="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">weighted_incoming</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">target</span><span class="err">.</span><span class="py">pagerank_new</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">0</span><span class="mf">.15</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">0</span><span class="mf">.85</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">weighted_incoming</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h3 id="practical-applications" class="position-relative d-flex align-items-center group"> <span>Practical Applications</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="practical-applications" aria-haspopup="dialog" aria-label="Share link: Practical Applications"> <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="web-page-ranking" class="position-relative d-flex align-items-center group"> <span>Web Page Ranking</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="web-page-ranking" aria-haspopup="dialog" aria-label="Share link: Web Page Ranking"> <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><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">Rank</span><span class="w"> </span><span class="py">web</span><span class="w"> </span><span class="py">pages</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">link</span><span class="w"> </span><span class="py">importance</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">page</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">SET</span><span class="w"> </span><span class="py">page</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">1</span><span class="mf">.0</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">COUNT</span><span class="w"> </span><span class="p">{</span><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="nc">WebPage</span><span class="p">)</span><span class="w"> </span><span class="p">}</span><span class="err">;</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">Execute</span><span class="w"> </span><span class="py">20</span><span class="w"> </span><span class="py">iterations</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">source</span><span class="p">:</span><span class="nc">WebPage</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">LINKS_TO</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">target</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">target</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">source</span><span class="err">.</span><span class="py">pagerank</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">COUNT</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="p">(</span><span class="py">source</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">LINKS_TO</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">()</span><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_sum</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">target</span><span class="err">.</span><span class="py">pagerank_new</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">0</span><span class="mf">.15</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">0</span><span class="mf">.85</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">rank_sum</span><span class="err">;</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="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">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">n</span><span class="err">.</span><span class="py">pagerank_new</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">REMOVE</span><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">pagerank_new</span><span class="err">;</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">Get</span><span class="w"> </span><span class="py">top</span><span class="w"> </span><span class="py">pages</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">page</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">RETURN</span><span class="w"> </span><span class="py">page</span><span class="err">.</span><span class="py">url</span><span class="p">,</span><span class="w"> </span><span class="py">page</span><span class="err">.</span><span class="py">title</span><span class="p">,</span><span class="w"> </span><span class="py">page</span><span class="err">.</span><span class="py">pagerank</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">page</span><span class="err">.</span><span class="py">pagerank</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">50</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="social-network-influence" class="position-relative d-flex align-items-center group"> <span>Social Network Influence</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="social-network-influence" aria-haspopup="dialog" aria-label="Share link: Social Network Influence"> <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><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">Identify</span><span class="w"> </span><span class="py">influential</span><span class="w"> </span><span class="py">users</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="p">)</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">user</span><span class="err">.</span><span class="py">influence</span><span class="w"> </span><span class="p">=</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">COUNT</span><span class="w"> </span><span class="p">{</span><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 class="p">}</span><span class="err">;</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">Propagate</span><span class="w"> </span><span class="py">influence</span><span class="w"> </span><span class="py">through</span><span class="w"> </span><span class="py">follower</span><span class="w"> </span><span class="py">relationships</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">follower</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">FOLLOWS</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">influencer</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">influencer</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">follower</span><span class="err">.</span><span class="py">influence</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">COUNT</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="p">(</span><span class="py">follower</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FOLLOWS</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">()</span><span class="w"> </span><span class="p">})</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">follower_influence</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">influencer</span><span class="err">.</span><span class="py">influence_new</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">0</span><span class="mf">.15</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">0</span><span class="mf">.85</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">follower_influence</span><span class="err">;</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">Top</span><span class="w"> </span><span class="py">influencers</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="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">user</span><span class="err">.</span><span class="py">username</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">user</span><span class="err">.</span><span class="py">followers_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">user</span><span class="err">.</span><span class="py">influence</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">influence_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">user</span><span class="err">.</span><span class="py">influence</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">25</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="citation-network-analysis" class="position-relative d-flex align-items-center group"> <span>Citation Network 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="citation-network-analysis" aria-haspopup="dialog" aria-label="Share link: Citation Network 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><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">Rank</span><span class="w"> </span><span class="py">academic</span><span class="w"> </span><span class="py">papers</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">citation</span><span class="w"> </span><span class="py">importance</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">paper</span><span class="p">:</span><span class="nc">Paper</span><span class="p">)</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">paper</span><span class="err">.</span><span class="py">citation_rank</span><span class="w"> </span><span class="p">=</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">COUNT</span><span class="w"> </span><span class="p">{</span><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="nc">Paper</span><span class="p">)</span><span class="w"> </span><span class="p">}</span><span class="err">;</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">Iterate</span><span class="w"> </span><span class="py">based</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">citations</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">citing</span><span class="p">:</span><span class="nc">Paper</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">CITES</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">cited</span><span class="p">:</span><span class="nc">Paper</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">cited</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">citing</span><span class="err">.</span><span class="py">citation_rank</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">COUNT</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="p">(</span><span class="py">citing</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">CITES</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">()</span><span class="w"> </span><span class="p">})</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">citation_score</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">cited</span><span class="err">.</span><span class="py">citation_rank_new</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">0</span><span class="mf">.15</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">0</span><span class="mf">.85</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">citation_score</span><span class="err">;</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">Most</span><span class="w"> </span><span class="py">influential</span><span class="w"> </span><span class="py">papers</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">paper</span><span class="p">:</span><span class="nc">Paper</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">paper</span><span class="err">.</span><span class="py">title</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">paper</span><span class="err">.</span><span class="py">year</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="w"> </span><span class="p">{</span><span class="w"> </span><span class="p">(</span><span class="py">paper</span><span class="p">)</span><span class="err">&lt;-</span><span class="p">[:</span><span class="nc">CITES</span><span class="p">]</span><span class="err">-</span><span class="p">()</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">citation_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">paper</span><span class="err">.</span><span class="py">citation_rank</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">impact_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">paper</span><span class="err">.</span><span class="py">citation_rank</span><span class="w"> </span><span class="py">DESC</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h3 id="performance-optimization" class="position-relative d-flex align-items-center group"> <span>Performance 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="performance-optimization" aria-haspopup="dialog" aria-label="Share link: Performance 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> </h3> <h4 id="efficient-iteration-strategy" class="position-relative d-flex align-items-center group"> <span>Efficient Iteration Strategy</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="efficient-iteration-strategy" aria-haspopup="dialog" aria-label="Share link: Efficient Iteration Strategy"> <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><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">Batch</span><span class="w"> </span><span class="py">processing</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">large</span><span class="w"> </span><span class="py">graphs</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">Node</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">COUNT</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">total_nodes</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">Node</span><span class="p">)</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="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">n</span><span class="p">,</span><span class="w"> </span><span class="py">total_nodes</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">1</span><span class="mf">.0</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">total_nodes</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">IN</span><span class="w"> </span><span class="py">TRANSACTIONS</span><span class="w"> </span><span class="py">OF</span><span class="w"> </span><span class="py">10000</span><span class="w"> </span><span class="py">ROWS</span><span class="err">;</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">iteration</span><span class="w"> </span><span class="py">updates</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">source</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">CONNECTED_TO</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">target</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">target</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">source</span><span class="err">.</span><span class="py">pagerank</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">source</span><span class="err">.</span><span class="py">out_degree</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">incoming_rank</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="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">target</span><span class="p">,</span><span class="w"> </span><span class="py">incoming_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">target</span><span class="err">.</span><span class="py">pagerank_new</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">0</span><span class="mf">.15</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">0</span><span class="mf">.85</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">incoming_rank</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">IN</span><span class="w"> </span><span class="py">TRANSACTIONS</span><span class="w"> </span><span class="py">OF</span><span class="w"> </span><span class="py">10000</span><span class="w"> </span><span class="py">ROWS</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="convergence-detection" class="position-relative d-flex align-items-center group"> <span>Convergence 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="convergence-detection" aria-haspopup="dialog" aria-label="Share link: Convergence 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><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">Check</span><span class="w"> </span><span class="py">convergence</span><span class="w"> </span><span class="py">between</span><span class="w"> </span><span class="py">iterations</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">Node</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">SUM</span><span class="p">(</span><span class="py">ABS</span><span class="p">(</span><span class="py">n</span><span class="err">.</span><span class="py">pagerank</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">pagerank_new</span><span class="p">))</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">total_change</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">n</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">node_count</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">total_change</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">node_count</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">average_change</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">CASE</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">total_change</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">node_count</span><span class="w"> </span><span class="err">&lt;</span><span class="w"> </span><span class="py">0</span><span class="mf">.0001</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">&#39;</span><span class="py">CONVERGED</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ELSE</span><span class="w"> </span><span class="err">&#39;</span><span class="py">CONTINUE</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">END</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">status</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="pre-computing-out-degrees" class="position-relative d-flex align-items-center group"> <span>Pre-Computing Out-Degrees</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="pre-computing-out-degrees" aria-haspopup="dialog" aria-label="Share link: Pre-Computing Out-Degrees"> <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><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">Cache</span><span class="w"> </span><span class="py">out</span><span class="err">-</span><span class="py">degree</span><span class="w"> </span><span class="py">counts</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">performance</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">Node</span><span class="p">)</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">out_degree</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">COUNT</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="p">)</span><span class="err">--&gt;</span><span class="p">()</span><span class="w"> </span><span class="p">}</span><span class="err">;</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">cached</span><span class="w"> </span><span class="py">degrees</span><span class="w"> </span><span class="py">in</span><span class="w"> </span><span class="py">PageRank</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">source</span><span class="p">)</span><span class="err">-</span><span class="p">[</span><span class="py">r</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">target</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">target</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">source</span><span class="err">.</span><span class="py">pagerank</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">source</span><span class="err">.</span><span class="py">out_degree</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">rank_contribution</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">target</span><span class="err">.</span><span class="py">pagerank_new</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">0</span><span class="mf">.15</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">0</span><span class="mf">.85</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">rank_contribution</span><span class="err">;</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="algorithm-configuration" class="position-relative d-flex align-items-center group"> <span>Algorithm Configuration</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="algorithm-configuration" aria-haspopup="dialog" aria-label="Share link: Algorithm Configuration"> <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><strong>Iteration Count</strong>: Run 20-50 iterations for most graphs; monitor convergence to determine optimal count.</p> <p><strong>Damping Factor</strong>: Use 0.85 as default; adjust to 0.80-0.90 based on graph characteristics and convergence behavior.</p> <p><strong>Convergence Threshold</strong>: Set tolerance to 0.0001 for production systems; tighten to 0.00001 for research applications.</p> <p><strong>Initial Values</strong>: Start with uniform distribution (1/N) to ensure consistent results across runs.</p> <h4 id="memory-management" class="position-relative d-flex align-items-center group"> <span>Memory Management</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="memory-management" aria-haspopup="dialog" aria-label="Share link: Memory Management"> <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><strong>Incremental Updates</strong>: Process PageRank in batches for graphs with millions of nodes.</p> <p><strong>Property Cleanup</strong>: Remove temporary properties (pagerank_new) after iteration completion to reduce memory usage.</p> <p><strong>Transaction Batching</strong>: Use IN TRANSACTIONS for large-scale updates to maintain database responsiveness.</p> <h4 id="validation-techniques" class="position-relative d-flex align-items-center group"> <span>Validation Techniques</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="validation-techniques" aria-haspopup="dialog" aria-label="Share link: Validation Techniques"> <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><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">Verify</span><span class="w"> </span><span class="py">PageRank</span><span class="w"> </span><span class="py">sum</span><span class="w"> </span><span class="py">equals</span><span class="w"> </span><span class="py">1</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">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="p">:</span><span class="nc">Node</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">SUM</span><span class="p">(</span><span class="py">n</span><span class="err">.</span><span class="py">pagerank</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">total_rank</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ABS</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">SUM</span><span class="p">(</span><span class="py">n</span><span class="err">.</span><span class="py">pagerank</span><span class="p">))</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">deviation</span><span class="err">;</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">Check</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">dangling</span><span class="w"> </span><span class="py">nodes</span><span class="w"> </span><span class="p">(</span><span class="py">no</span><span class="w"> </span><span class="py">outgoing</span><span class="w"> </span><span class="py">edges</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">n</span><span class="p">:</span><span class="nc">Node</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="py">EXISTS</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="p">)</span><span class="err">--&gt;</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">RETURN</span><span class="w"> </span><span class="py">COUNT</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">dangling_nodes</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h3 id="common-patterns" class="position-relative d-flex align-items-center group"> <span>Common 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="common-patterns" aria-haspopup="dialog" aria-label="Share link: Common 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> </h3> <h4 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> </h4><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">Recommend</span><span class="w"> </span><span class="py">items</span><span class="w"> </span><span class="py">based</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">personalized</span><span class="w"> </span><span class="py">PageRank</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="err">&#39;</span><span class="nc">user123</span><span class="err">&#39;</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">-&gt;</span><span class="p">(</span><span class="py">seed</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">item</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">SET</span><span class="w"> </span><span class="py">item</span><span class="err">.</span><span class="py">recommendation_score</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">CASE</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">item</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="p">[</span><span class="py">seed</span><span class="p">]</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="py">1</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">ELSE</span><span class="w"> </span><span class="py">0</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">END</span><span class="err">;</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">Propagate</span><span class="w"> </span><span class="py">scores</span><span class="w"> </span><span class="py">through</span><span class="w"> </span><span class="py">product</span><span class="w"> </span><span class="py">relationships</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">source</span><span class="p">:</span><span class="nc">Product</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">SIMILAR_TO</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">target</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">WITH</span><span class="w"> </span><span class="py">target</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">source</span><span class="err">.</span><span class="py">recommendation_score</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">COUNT</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="p">(</span><span class="py">source</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">SIMILAR_TO</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">()</span><span class="w"> </span><span class="p">})</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">score</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">target</span><span class="err">.</span><span class="py">recommendation_score_new</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">0</span><span class="mf">.15</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">0</span><span class="mf">.85</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">score</span><span class="err">;</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">Top</span><span class="w"> </span><span class="py">recommendations</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">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="py">EXISTS</span><span class="w"> </span><span class="p">{</span><span class="w"> </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="err">&#39;</span><span class="nc">user123</span><span class="err">&#39;</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">-&gt;</span><span class="p">(</span><span class="py">rec</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">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">recommendation_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">rec</span><span class="err">.</span><span class="py">recommendation_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">10</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="knowledge-graph-importance" class="position-relative d-flex align-items-center group"> <span>Knowledge Graph Importance</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="knowledge-graph-importance" aria-haspopup="dialog" aria-label="Share link: Knowledge Graph Importance"> <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><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">Rank</span><span class="w"> </span><span class="py">entities</span><span class="w"> </span><span class="py">in</span><span class="w"> </span><span class="py">knowledge</span><span class="w"> </span><span class="py">graph</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">entity</span><span class="p">:</span><span class="nc">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">SET</span><span class="w"> </span><span class="py">entity</span><span class="err">.</span><span class="py">importance</span><span class="w"> </span><span class="p">=</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">COUNT</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">e</span><span class="p">:</span><span class="nc">Entity</span><span class="p">)</span><span class="w"> </span><span class="p">}</span><span class="err">;</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">source</span><span class="p">:</span><span class="nc">Entity</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">RELATED_TO</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">target</span><span class="p">:</span><span class="nc">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">WITH</span><span class="w"> </span><span class="py">target</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">source</span><span class="err">.</span><span class="py">importance</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">COUNT</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="p">(</span><span class="py">source</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">RELATED_TO</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">()</span><span class="w"> </span><span class="p">})</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">importance_sum</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">target</span><span class="err">.</span><span class="py">importance_new</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">0</span><span class="mf">.15</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">0</span><span class="mf">.85</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">importance_sum</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h3 id="troubleshooting" class="position-relative d-flex align-items-center group"> <span>Troubleshooting</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="troubleshooting" aria-haspopup="dialog" aria-label="Share link: Troubleshooting"> <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="slow-convergence" class="position-relative d-flex align-items-center group"> <span>Slow Convergence</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="slow-convergence" aria-haspopup="dialog" aria-label="Share link: Slow Convergence"> <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><strong>Issue</strong>: PageRank scores don&rsquo;t stabilize after many iterations.</p> <p><strong>Solution</strong>: Check for graph structure issues (disconnected components, large cycles). Increase damping factor to 0.90 or implement teleportation to all nodes.</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">disconnected</span><span class="w"> </span><span class="py">components</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">Node</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="py">EXISTS</span><span class="w"> </span><span class="p">{</span><span class="w"> </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="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="py">n</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">isolated_nodes</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="rank-sinks" class="position-relative d-flex align-items-center group"> <span>Rank Sinks</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="rank-sinks" aria-haspopup="dialog" aria-label="Share link: Rank Sinks"> <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><strong>Issue</strong>: PageRank accumulates in nodes with no outgoing edges.</p> <p><strong>Solution</strong>: Redistribute dangling node rank equally to all nodes.</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">Handle</span><span class="w"> </span><span class="py">dangling</span><span class="w"> </span><span class="py">nodes</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">dangling</span><span class="p">:</span><span class="nc">Node</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="py">EXISTS</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="p">(</span><span class="py">dangling</span><span class="p">)</span><span class="err">--&gt;</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">WITH</span><span class="w"> </span><span class="py">SUM</span><span class="p">(</span><span class="py">dangling</span><span class="err">.</span><span class="py">pagerank</span><span class="p">)</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">COUNT</span><span class="w"> </span><span class="p">{</span><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">Node</span><span class="p">)</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">dangling_contribution</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">Node</span><span class="p">)</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_adjustment</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">dangling_contribution</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="memory-pressure" class="position-relative d-flex align-items-center group"> <span>Memory Pressure</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="memory-pressure" aria-haspopup="dialog" aria-label="Share link: Memory Pressure"> <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><strong>Issue</strong>: PageRank computation exceeds available memory.</p> <p><strong>Solution</strong>: Process in batches and use disk-backed temporary storage.</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">Batch</span><span class="w"> </span><span class="py">processing</span><span class="w"> </span><span class="py">pattern</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">Node</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">n</span><span class="p">)</span><span class="w"> </span><span class="err">%</span><span class="w"> </span><span class="py">10</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">0</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Process</span><span class="w"> </span><span class="py">10</span><span class="err">%</span><span class="w"> </span><span class="py">at</span><span class="w"> </span><span class="py">a</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">WITH</span><span class="w"> </span><span class="py">n</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="p">{</span><span class="w"> </span><span class="kd">...</span><span class="w"> </span><span class="py">PageRank</span><span class="w"> </span><span class="py">update</span><span class="w"> </span><span class="py">logic</span><span class="w"> </span><span class="kd">...</span><span class="w"> </span><span class="p">}</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h3 id="integration-examples" class="position-relative d-flex align-items-center group"> <span>Integration Examples</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="integration-examples" aria-haspopup="dialog" aria-label="Share link: Integration Examples"> <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="python-client" class="position-relative d-flex align-items-center group"> <span>Python Client</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="python-client" aria-haspopup="dialog" aria-label="Share link: Python Client"> <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><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></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">compute_pagerank</span><span class="p">(</span><span class="n">client</span><span class="p">,</span> <span class="n">iterations</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span> <span class="n">damping</span><span class="o">=</span><span class="mf">0.85</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="c1"># Initialize PageRank</span> </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">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (n:Page) </span></span></span><span class="line"><span class="cl"><span class="s2"> SET n.pagerank = 1.0 / COUNT { MATCH (p:Page) } </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Iterate</span> </span></span><span class="line"><span class="cl"> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">iterations</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="n">result</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">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (s)-[:LINKS_TO]-&gt;(t) </span></span></span><span class="line"><span class="cl"><span class="s2"> WITH t, SUM(s.pagerank / COUNT </span><span class="se">{{</span><span class="s2"> (s)-[:LINKS_TO]-&gt;() </span><span class="se">}}</span><span class="s2">) AS rank </span></span></span><span class="line"><span class="cl"><span class="s2"> SET t.pr_new = </span><span class="si">{</span><span class="mi">1</span><span class="o">-</span><span class="n">damping</span><span class="si">}</span><span class="s2"> + </span><span class="si">{</span><span class="n">damping</span><span class="si">}</span><span class="s2"> * rank </span></span></span><span class="line"><span class="cl"><span class="s2"> WITH SUM(ABS(t.pagerank - t.pr_new)) AS change </span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN change </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</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">&#34;MATCH (n) SET n.pagerank = n.pr_new REMOVE n.pr_new&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="n">result</span><span class="o">.</span><span class="n">rows</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">&lt;</span> <span class="mf">0.0001</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Converged after </span><span class="si">{</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="si">}</span><span class="s2"> iterations&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">break</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Get top results</span> </span></span><span class="line"><span class="cl"> <span class="n">top_pages</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">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (n:Page) </span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN n.id, n.pagerank </span></span></span><span class="line"><span class="cl"><span class="s2"> ORDER BY n.pagerank DESC </span></span></span><span class="line"><span class="cl"><span class="s2"> LIMIT 20 </span></span></span><span class="line"><span class="cl"><span class="s2"> &#34;&#34;&#34;</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">top_pages</span><span class="o">.</span><span class="n">rows</span> </span></span></code></pre></div> <h4 id="rust-client" class="position-relative d-flex align-items-center group"> <span>Rust Client</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="rust-client" aria-haspopup="dialog" aria-label="Share link: Rust Client"> <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><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rust" data-lang="rust"><span class="line"><span class="cl"><span class="k">use</span><span class="w"> </span><span class="n">geode_client</span>::<span class="n">Client</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="k">async</span><span class="w"> </span><span class="k">fn</span> <span class="nf">pagerank_analysis</span><span class="p">(</span><span class="n">client</span>: <span class="kp">&amp;</span><span class="nc">Client</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nb">Result</span><span class="o">&lt;</span><span class="nb">Vec</span><span class="o">&lt;</span><span class="p">(</span><span class="nb">String</span><span class="p">,</span><span class="w"> </span><span class="kt">f64</span><span class="p">)</span><span class="o">&gt;&gt;</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="c1">// Initialize </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="n">client</span><span class="p">.</span><span class="n">execute</span><span class="p">(</span><span class="s">&#34;MATCH (n:Page) SET n.pr = 1.0 / COUNT { MATCH (p:Page) }&#34;</span><span class="p">).</span><span class="k">await</span><span class="o">?</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="c1">// Iterate until convergence </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">iteration</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="mi">0</span><span class="o">..</span><span class="mi">50</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="kd">let</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">client</span><span class="p">.</span><span class="n">execute</span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">&#34;MATCH (s)-[:LINKS_TO]-&gt;(t) </span><span class="se">\</span><span class="s"> </span></span></span><span class="line"><span class="cl"><span class="s"> WITH t, SUM(s.pr / COUNT { (s)-[:LINKS_TO]-&gt;() }) AS r </span><span class="se">\</span><span class="s"> </span></span></span><span class="line"><span class="cl"><span class="s"> SET t.pr_new = 0.15 + 0.85 * r </span><span class="se">\</span><span class="s"> </span></span></span><span class="line"><span class="cl"><span class="s"> RETURN SUM(ABS(t.pr - t.pr_new)) AS change&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">).</span><span class="k">await</span><span class="o">?</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="n">client</span><span class="p">.</span><span class="n">execute</span><span class="p">(</span><span class="s">&#34;MATCH (n) SET n.pr = n.pr_new REMOVE n.pr_new&#34;</span><span class="p">).</span><span class="k">await</span><span class="o">?</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="k">if</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="n">change</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">result</span><span class="p">.</span><span class="n">get_float</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="o">?</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="k">if</span><span class="w"> </span><span class="n">change</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mf">0.0001</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="fm">println!</span><span class="p">(</span><span class="s">&#34;Converged at iteration </span><span class="si">{}</span><span class="s">&#34;</span><span class="p">,</span><span class="w"> </span><span class="n">iteration</span><span class="p">);</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="k">break</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="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="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="c1">// Extract results </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">results</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">client</span><span class="p">.</span><span class="n">execute</span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">&#34;MATCH (n:Page) RETURN n.id, n.pr ORDER BY n.pr DESC LIMIT 20&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">).</span><span class="k">await</span><span class="o">?</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="nb">Ok</span><span class="p">(</span><span class="n">results</span><span class="p">.</span><span class="n">into_iter</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="n">map</span><span class="p">(</span><span class="o">|</span><span class="n">row</span><span class="o">|</span><span class="w"> </span><span class="p">(</span><span class="n">row</span><span class="p">.</span><span class="n">get_string</span><span class="p">(</span><span class="mi">0</span><span class="p">).</span><span class="n">unwrap</span><span class="p">(),</span><span class="w"> </span><span class="n">row</span><span class="p">.</span><span class="n">get_float</span><span class="p">(</span><span class="mi">1</span><span class="p">).</span><span class="n">unwrap</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="n">collect</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="w"> </span></span></span></code></pre></div> <h3 id="related-topics" class="position-relative d-flex align-items-center group"> <span>Related Topics</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="related-topics" aria-haspopup="dialog" aria-label="Share link: Related Topics"> <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><strong>Graph Algorithms</strong>: See graph-algorithms tag for comprehensive algorithm coverage</li> <li><strong>Community Detection</strong>: Use community-detection for clustering and group identification</li> <li><strong>Centrality Measures</strong>: Explore patterns tag for betweenness and closeness centrality</li> <li><strong>Performance Tuning</strong>: Check optimization and performance tags for query optimization strategies</li> </ul> <h3 id="advanced-pagerank-variants" class="position-relative d-flex align-items-center group"> <span>Advanced PageRank Variants</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="advanced-pagerank-variants" aria-haspopup="dialog" aria-label="Share link: Advanced PageRank Variants"> <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="weighted-pagerank-with-damping" class="position-relative d-flex align-items-center group"> <span>Weighted PageRank with Damping</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="weighted-pagerank-with-damping" aria-haspopup="dialog" aria-label="Share link: Weighted PageRank with Damping"> <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><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">Edge</span><span class="err">-</span><span class="py">weighted</span><span class="w"> </span><span class="py">PageRank</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">Page</span><span class="p">)</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">1</span><span class="mf">.0</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">COUNT</span><span class="w"> </span><span class="p">{</span><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="nc">Page</span><span class="p">)</span><span class="w"> </span><span class="p">}</span><span class="err">;</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">source</span><span class="p">:</span><span class="nc">Page</span><span class="p">)</span><span class="err">-</span><span class="p">[</span><span class="py">link</span><span class="p">:</span><span class="nc">LINKS_TO</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">target</span><span class="p">:</span><span class="nc">Page</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">target</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">link</span><span class="err">.</span><span class="py">weight</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">source</span><span class="err">.</span><span class="py">pagerank</span><span class="w"> </span><span class="err">/</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </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">source</span><span class="p">)</span><span class="err">-</span><span class="p">[</span><span class="py">l</span><span class="p">:</span><span class="nc">LINKS_TO</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">()</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="py">l</span><span class="err">.</span><span class="py">weight</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">AS</span><span class="w"> </span><span class="py">weighted_contribution</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">target</span><span class="err">.</span><span class="py">pagerank_new</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">0</span><span class="mf">.15</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">0</span><span class="mf">.85</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">weighted_contribution</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="topic-sensitive-pagerank-personalization" class="position-relative d-flex align-items-center group"> <span>Topic-Sensitive PageRank (Personalization)</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="topic-sensitive-pagerank-personalization" aria-haspopup="dialog" aria-label="Share link: Topic-Sensitive PageRank (Personalization)"> <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><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">Bias</span><span class="w"> </span><span class="py">random</span><span class="w"> </span><span class="py">jumps</span><span class="w"> </span><span class="py">toward</span><span class="w"> </span><span class="py">topic</span><span class="w"> </span><span class="py">nodes</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">topic</span><span class="p">:</span><span class="nc">Topic</span><span class="w"> </span><span class="p">{</span><span class="py">name</span><span class="p">:</span><span class="w"> </span><span class="nv">$topic_name</span><span class="p">})</span><span class="err">&lt;-</span><span class="p">[:</span><span class="nc">BELONGS_TO</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="nc">seed</span><span class="p">:</span><span class="nc">Page</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">seed</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">topic_pages</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">Page</span><span class="p">)</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">personalized_pr</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">CASE</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">n</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="py">topic_pages</span><span class="w"> </span><span class="py">THEN</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">SIZE</span><span class="p">(</span><span class="py">topic_pages</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ELSE</span><span class="w"> </span><span class="py">0</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">END</span><span class="err">;</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">Iterate</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">personalization</span><span class="w"> </span><span class="py">vector</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">source</span><span class="p">:</span><span class="nc">Page</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">LINKS_TO</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">target</span><span class="p">:</span><span class="nc">Page</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">target</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">source</span><span class="err">.</span><span class="py">personalized_pr</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">COUNT</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="p">(</span><span class="py">source</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">LINKS_TO</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">()</span><span class="w"> </span><span class="p">})</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">propagated</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">target</span><span class="err">.</span><span class="py">personalized_pr</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">teleport</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">target</span><span class="err">.</span><span class="py">pr_new</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">0</span><span class="mf">.15</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">teleport</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">0</span><span class="mf">.85</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">propagated</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h3 id="large-scale-pagerank-optimization" class="position-relative d-flex align-items-center group"> <span>Large-Scale PageRank 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="large-scale-pagerank-optimization" aria-haspopup="dialog" aria-label="Share link: Large-Scale PageRank 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> </h3> <h4 id="block-striped-pagerank" class="position-relative d-flex align-items-center group"> <span>Block Striped PageRank</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="block-striped-pagerank" aria-haspopup="dialog" aria-label="Share link: Block Striped PageRank"> <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>Partition for parallel computation:</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">Partition</span><span class="w"> </span><span class="py">nodes</span><span class="w"> </span><span class="py">into</span><span class="w"> </span><span class="py">blocks</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">Page</span><span class="p">)</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">block_id</span><span class="w"> </span><span class="p">=</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="err">%</span><span class="w"> </span><span class="nv">$num_blocks</span><span class="err">;</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">Process</span><span class="w"> </span><span class="py">blocks</span><span class="w"> </span><span class="py">in</span><span class="w"> </span><span class="py">parallel</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">source</span><span class="p">:</span><span class="nc">Page</span><span class="w"> </span><span class="p">{</span><span class="py">block_id</span><span class="p">:</span><span class="w"> </span><span class="nv">$block</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">LINKS_TO</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="nc">target</span><span class="p">:</span><span class="nc">Page</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">target</span><span class="p">,</span><span class="w"> </span><span class="py">SUM</span><span class="p">(</span><span class="py">source</span><span class="err">.</span><span class="py">pagerank</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">source</span><span class="err">.</span><span class="py">out_degree</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">contribution</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">target</span><span class="err">.</span><span class="py">pagerank_delta</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">contribution</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">IN</span><span class="w"> </span><span class="py">TRANSACTIONS</span><span class="w"> </span><span class="py">OF</span><span class="w"> </span><span class="py">100000</span><span class="w"> </span><span class="py">ROWS</span><span class="err">;</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">Aggregate</span><span class="w"> </span><span class="py">deltas</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">Page</span><span class="p">)</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">0</span><span class="mf">.15</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">0</span><span class="mf">.85</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">pagerank_delta</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">pagerank_delta</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">null</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="incremental-pagerank" class="position-relative d-flex align-items-center group"> <span>Incremental PageRank</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="incremental-pagerank" aria-haspopup="dialog" aria-label="Share link: Incremental PageRank"> <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>Update only affected subgraph:</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">After</span><span class="w"> </span><span class="py">adding</span><span class="w"> </span><span class="py">edge</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">,</span><span class="w"> </span><span class="py">v</span><span class="p">),</span><span class="w"> </span><span class="py">identify</span><span class="w"> </span><span class="py">affected</span><span class="w"> </span><span class="py">nodes</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">Page</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">$new_source</span><span class="p">}),</span><span class="w"> </span><span class="p">(</span><span class="nc">v</span><span class="p">:</span><span class="nc">Page</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">$new_target</span><span class="p">})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">CREATE</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">LINKS_TO</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">v</span><span class="p">)</span><span class="err">;</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">Mark</span><span class="w"> </span><span class="py">affected</span><span class="w"> </span><span class="py">region</span><span class="w"> </span><span class="p">(</span><span class="py">forward</span><span class="w"> </span><span class="py">reachable</span><span class="w"> </span><span class="py">from</span><span class="w"> </span><span class="py">v</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">v</span><span class="p">:</span><span class="nc">Page</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">$new_target</span><span class="p">})</span><span class="err">-</span><span class="p">[:</span><span class="nc">LINKS_TO</span><span class="err">*</span><span class="nc">0</span><span class="err">.</span><span class="mf">.3</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">affected</span><span class="p">:</span><span class="nc">Page</span><span class="p">)</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">affected</span><span class="err">.</span><span class="py">needs_update</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">true</span><span class="err">;</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">Incremental</span><span class="w"> </span><span class="py">update</span><span class="w"> </span><span class="p">(</span><span class="kd">on</span><span class="py">ly</span><span class="w"> </span><span class="py">marked</span><span class="w"> </span><span class="py">nodes</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">source</span><span class="p">:</span><span class="nc">Page</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">LINKS_TO</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">target</span><span class="p">:</span><span class="nc">Page</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">target</span><span class="err">.</span><span class="py">needs_update</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">true</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">target</span><span class="p">,</span><span class="w"> </span><span class="py">SUM</span><span class="p">(</span><span class="py">source</span><span class="err">.</span><span class="py">pagerank</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">source</span><span class="err">.</span><span class="py">out_degree</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">new_contrib</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">target</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">0</span><span class="mf">.15</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">0</span><span class="mf">.85</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">new_contrib</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">target</span><span class="err">.</span><span class="py">needs_update</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">false</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h3 id="practical-applications-1" class="position-relative d-flex align-items-center group"> <span>Practical Applications</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="practical-applications-1" aria-haspopup="dialog" aria-label="Share link: Practical Applications"> <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="search-engine-ranking" class="position-relative d-flex align-items-center group"> <span>Search Engine Ranking</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="search-engine-ranking" aria-haspopup="dialog" aria-label="Share link: Search Engine Ranking"> <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><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">Combine</span><span class="w"> </span><span class="py">PageRank</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">content</span><span class="w"> </span><span class="py">relevance</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">page</span><span class="p">:</span><span class="nc">Page</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">page</span><span class="err">.</span><span class="py">content</span><span class="w"> </span><span class="py">CONTAINS</span><span class="w"> </span><span class="nv">$query</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">page</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">page</span><span class="err">.</span><span class="py">pagerank</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">authority_score</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">TF</span><span class="err">-</span><span class="py">IDF</span><span class="w"> </span><span class="py">score</span><span class="w"> </span><span class="py">from</span><span class="w"> </span><span class="py">full</span><span class="err">-</span><span class="py">text</span><span class="w"> </span><span class="py">index</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="py">page</span><span class="p">,</span><span class="w"> </span><span class="nv">$query</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">relevance_score</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">page</span><span class="err">.</span><span class="py">url</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">page</span><span class="err">.</span><span class="py">title</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">authority_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">relevance_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">0</span><span class="mf">.7</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">relevance_score</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">authority_score</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">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="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="influence-propagation-in-social-networks" class="position-relative d-flex align-items-center group"> <span>Influence Propagation in Social Networks</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="influence-propagation-in-social-networks" aria-haspopup="dialog" aria-label="Share link: Influence Propagation in Social Networks"> <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><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">Find</span><span class="w"> </span><span class="py">influential</span><span class="w"> </span><span class="py">nodes</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">viral</span><span class="w"> </span><span class="py">marketing</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="p">)</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">user</span><span class="err">.</span><span class="py">influence</span><span class="w"> </span><span class="p">=</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">COUNT</span><span class="w"> </span><span class="p">{</span><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 class="p">}</span><span class="err">;</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">Propagate</span><span class="w"> </span><span class="py">through</span><span class="w"> </span><span class="py">follower</span><span class="w"> </span><span class="py">graph</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">follower</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">FOLLOWS</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">leader</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">leader</span><span class="p">,</span><span class="w"> </span><span class="py">SUM</span><span class="p">(</span><span class="py">follower</span><span class="err">.</span><span class="py">influence</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">follower</span><span class="err">.</span><span class="py">following_count</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">follower_influence</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">leader</span><span class="err">.</span><span class="py">influence_new</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">0</span><span class="mf">.15</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">0</span><span class="mf">.85</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">follower_influence</span><span class="err">;</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">Select</span><span class="w"> </span><span class="py">top</span><span class="w"> </span><span class="py">influencers</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">campaign</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">influencer</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">influencer</span><span class="err">.</span><span class="py">influence</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="nv">$threshold</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">influencer</span><span class="err">.</span><span class="py">username</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">influencer</span><span class="err">.</span><span class="py">influence</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="w"> </span><span class="p">{</span><span class="w"> </span><span class="p">(</span><span class="py">influencer</span><span class="p">)</span><span class="err">&lt;-</span><span class="p">[:</span><span class="nc">FOLLOWS</span><span class="p">]</span><span class="err">-</span><span class="p">()</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">followers</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">influencer</span><span class="err">.</span><span class="py">influence</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">COUNT</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="p">(</span><span class="py">influencer</span><span class="p">)</span><span class="err">&lt;-</span><span class="p">[:</span><span class="nc">FOLLOWS</span><span class="p">]</span><span class="err">-</span><span class="p">()</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">reach_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">reach_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">100</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <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><strong>PageRank</strong>: The Original Algorithm and Modern Variants</li> <li><strong>Personalized PageRank</strong>: Topic-Sensitive and Query-Dependent Ranking</li> <li><strong>Scalable PageRank</strong>: Distributed and Incremental Computation</li> <li><strong>Link Analysis</strong>: HITS, TrustRank, and Other Algorithms</li> </ul> <p>Browse tagged content for complete PageRank documentation.</p>

Related Articles