<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Search Framework on psLens</title><link>https://pslens.com/categories/search-framework/</link><description>Recent content in Search Framework on psLens</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://pslens.com/categories/search-framework/index.xml" rel="self" type="application/rss+xml"/><item><title>Real-Time Indexing Backlog</title><link>https://pslens.com/docs/alerts/search-framework/rti-staging-backlog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/alerts/search-framework/rti-staging-backlog/</guid><description>&lt;div class="alert alert-warning border shadow-sm mb-4 psl-prospect-cta" role="note"&gt;
 &lt;div class="d-flex flex-column flex-lg-row align-items-lg-center justify-content-between gap-3"&gt;
 &lt;div&gt;
 &lt;strong&gt;New to psLens?&lt;/strong&gt; This page documents one specific alert. To see how it appears on the dashboard,
 what operators investigate, and how teams tune it, start with a live walkthrough.
 &lt;/div&gt;
 &lt;div class="d-flex flex-wrap gap-2"&gt;
 &lt;a class="btn btn-sm btn-primary" href="https://pslens.com/contact/"&gt;Book a Demo&lt;/a&gt;
 &lt;a class="btn btn-sm btn-outline-primary" href="https://pslens.com/docs/alerts/"&gt;Browse Alerts&lt;/a&gt;
 &lt;/div&gt;
 &lt;/div&gt;
&lt;/div&gt;&lt;div id="pslens-context-panel" class="card border-info mb-4 d-none"&gt;
 &lt;div class="card-header bg-light text-info py-2 fw-bold d-flex align-items-center border-bottom border-info-subtle"&gt;
 &lt;i class="bi bi-info-circle-fill me-2"&gt;&lt;/i&gt;
 &lt;span&gt;Tailored Operational Context&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="card-body p-0"&gt;
 &lt;ul class="list-group list-group-flush"&gt;
 &lt;li id="row-db" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Target Database:&lt;/strong&gt;
 &lt;span id="ctx-db" class="badge bg-secondary font-monospace"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-type" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Context Type:&lt;/strong&gt;
 &lt;span id="ctx-type" class="badge bg-light text-dark border font-monospace text-uppercase"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-severity" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Alert Severity:&lt;/strong&gt;
 &lt;span id="ctx-severity" class="badge"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-time" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Triggered Time:&lt;/strong&gt;
 &lt;span id="ctx-time" class="text-muted small"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-details" class="list-group-item py-2 d-none"&gt;
 &lt;strong id="label-details" class="d-block mb-1"&gt;Firing Context:&lt;/strong&gt;
 &lt;code id="ctx-details" class="d-block p-2 bg-light border rounded small"
 style="white-space: pre-wrap; word-break: break-all;"&gt;&amp;mdash;&lt;/code&gt;
 &lt;/li&gt;
 &lt;li id="row-sql" class="list-group-item py-2 d-none"&gt;
 &lt;div class="d-flex justify-content-between align-items-center mb-1"&gt;
 &lt;strong id="label-sql"&gt;Contextual SQL:&lt;/strong&gt;
 &lt;button id="btn-copy-sql" type="button" class="btn btn-sm btn-outline-secondary py-0 px-2 small"&gt;
 &lt;i class="bi bi-clipboard me-1"&gt;&lt;/i&gt;Copy SQL
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;pre class="mb-0 p-2 bg-light border rounded small"&gt;&lt;code id="ctx-sql" style="white-space: pre-wrap; word-break: break-word;"&gt;&amp;mdash;&lt;/code&gt;&lt;/pre&gt;
 &lt;/li&gt;
 &lt;/ul&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
 (function () {
 const params = new URLSearchParams(window.location.search);
 const metadata = params.get('metadata');
 if (!metadata) return;

 try {
 
 const base64 = metadata.replace(/-/g, '+').replace(/_/g, '/');
 const jsonStr = decodeURIComponent(escape(window.atob(base64)));
 const data = JSON.parse(jsonStr);

 if (data) {
 let hasData = false;

 if (data.db) {
 document.getElementById('ctx-db').textContent = data.db;
 document.getElementById('row-db').classList.remove('d-none');
 hasData = true;
 }

 if (data.type) {
 document.getElementById('ctx-type').textContent = data.type;
 document.getElementById('row-type').classList.remove('d-none');
 hasData = true;
 }

 if (data.severity) {
 const severityBadge = document.getElementById('ctx-severity');
 const severity = data.severity.toLowerCase();
 severityBadge.textContent = severity.toUpperCase();
 if (severity === 'critical') {
 severityBadge.className = 'badge bg-danger';
 } else if (severity === 'warning') {
 severityBadge.className = 'badge bg-warning text-dark';
 } else {
 severityBadge.className = 'badge bg-info';
 }
 document.getElementById('row-severity').classList.remove('d-none');
 hasData = true;
 }

 if (data.t) {
 const date = new Date(data.t * 1000);
 document.getElementById('ctx-time').textContent = date.toLocaleString();
 document.getElementById('row-time').classList.remove('d-none');
 hasData = true;
 }

 if (data.details) {
 document.getElementById('ctx-details').textContent = data.details;

 
 const labelDetails = document.getElementById('label-details');
 if (data.type === 'object') {
 labelDetails.textContent = 'Object Metadata Details:';
 } else if (data.type === 'report') {
 labelDetails.textContent = 'Report Description:';
 } else {
 labelDetails.textContent = 'Firing Context:';
 }

 document.getElementById('row-details').classList.remove('d-none');
 hasData = true;
 }

 if (data.sql) {
 document.getElementById('ctx-sql').textContent = data.sql;
 document.getElementById('row-sql').classList.remove('d-none');
 const copyBtn = document.getElementById('btn-copy-sql');
 if (copyBtn &amp;&amp; navigator.clipboard) {
 copyBtn.addEventListener('click', function () {
 navigator.clipboard.writeText(data.sql).then(function () {
 copyBtn.innerHTML = '&lt;i class="bi bi-check2 me-1"&gt;&lt;/i&gt;Copied';
 setTimeout(function () {
 copyBtn.innerHTML = '&lt;i class="bi bi-clipboard me-1"&gt;&lt;/i&gt;Copy SQL';
 }, 2000);
 });
 });
 }
 hasData = true;
 }

 if (hasData) {
 document.getElementById('pslens-context-panel').classList.remove('d-none');
 }
 }
 } catch (e) {
 console.error('Failed to parse operational context metadata:', e);
 }
 })();
&lt;/script&gt;
&lt;h2 id="real-time-indexing-backlog-alert"&gt;Real-Time Indexing Backlog Alert&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Alert ID:&lt;/strong&gt; &lt;code&gt;rti_staging_backlog&lt;/code&gt;
&lt;strong&gt;Category:&lt;/strong&gt; Search Framework
&lt;strong&gt;Default thresholds:&lt;/strong&gt; 1,000 queued updates, or 30 minutes
&lt;strong&gt;Runs:&lt;/strong&gt; every 15 minutes&lt;/p&gt;</description></item><item><title>Real-Time Indexing Stuck Off</title><link>https://pslens.com/docs/alerts/search-framework/rti-stuck-disabled/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/alerts/search-framework/rti-stuck-disabled/</guid><description>&lt;div class="alert alert-warning border shadow-sm mb-4 psl-prospect-cta" role="note"&gt;
 &lt;div class="d-flex flex-column flex-lg-row align-items-lg-center justify-content-between gap-3"&gt;
 &lt;div&gt;
 &lt;strong&gt;New to psLens?&lt;/strong&gt; This page documents one specific alert. To see how it appears on the dashboard,
 what operators investigate, and how teams tune it, start with a live walkthrough.
 &lt;/div&gt;
 &lt;div class="d-flex flex-wrap gap-2"&gt;
 &lt;a class="btn btn-sm btn-primary" href="https://pslens.com/contact/"&gt;Book a Demo&lt;/a&gt;
 &lt;a class="btn btn-sm btn-outline-primary" href="https://pslens.com/docs/alerts/"&gt;Browse Alerts&lt;/a&gt;
 &lt;/div&gt;
 &lt;/div&gt;
&lt;/div&gt;&lt;div id="pslens-context-panel" class="card border-info mb-4 d-none"&gt;
 &lt;div class="card-header bg-light text-info py-2 fw-bold d-flex align-items-center border-bottom border-info-subtle"&gt;
 &lt;i class="bi bi-info-circle-fill me-2"&gt;&lt;/i&gt;
 &lt;span&gt;Tailored Operational Context&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="card-body p-0"&gt;
 &lt;ul class="list-group list-group-flush"&gt;
 &lt;li id="row-db" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Target Database:&lt;/strong&gt;
 &lt;span id="ctx-db" class="badge bg-secondary font-monospace"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-type" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Context Type:&lt;/strong&gt;
 &lt;span id="ctx-type" class="badge bg-light text-dark border font-monospace text-uppercase"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-severity" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Alert Severity:&lt;/strong&gt;
 &lt;span id="ctx-severity" class="badge"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-time" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Triggered Time:&lt;/strong&gt;
 &lt;span id="ctx-time" class="text-muted small"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-details" class="list-group-item py-2 d-none"&gt;
 &lt;strong id="label-details" class="d-block mb-1"&gt;Firing Context:&lt;/strong&gt;
 &lt;code id="ctx-details" class="d-block p-2 bg-light border rounded small"
 style="white-space: pre-wrap; word-break: break-all;"&gt;&amp;mdash;&lt;/code&gt;
 &lt;/li&gt;
 &lt;li id="row-sql" class="list-group-item py-2 d-none"&gt;
 &lt;div class="d-flex justify-content-between align-items-center mb-1"&gt;
 &lt;strong id="label-sql"&gt;Contextual SQL:&lt;/strong&gt;
 &lt;button id="btn-copy-sql" type="button" class="btn btn-sm btn-outline-secondary py-0 px-2 small"&gt;
 &lt;i class="bi bi-clipboard me-1"&gt;&lt;/i&gt;Copy SQL
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;pre class="mb-0 p-2 bg-light border rounded small"&gt;&lt;code id="ctx-sql" style="white-space: pre-wrap; word-break: break-word;"&gt;&amp;mdash;&lt;/code&gt;&lt;/pre&gt;
 &lt;/li&gt;
 &lt;/ul&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
 (function () {
 const params = new URLSearchParams(window.location.search);
 const metadata = params.get('metadata');
 if (!metadata) return;

 try {
 
 const base64 = metadata.replace(/-/g, '+').replace(/_/g, '/');
 const jsonStr = decodeURIComponent(escape(window.atob(base64)));
 const data = JSON.parse(jsonStr);

 if (data) {
 let hasData = false;

 if (data.db) {
 document.getElementById('ctx-db').textContent = data.db;
 document.getElementById('row-db').classList.remove('d-none');
 hasData = true;
 }

 if (data.type) {
 document.getElementById('ctx-type').textContent = data.type;
 document.getElementById('row-type').classList.remove('d-none');
 hasData = true;
 }

 if (data.severity) {
 const severityBadge = document.getElementById('ctx-severity');
 const severity = data.severity.toLowerCase();
 severityBadge.textContent = severity.toUpperCase();
 if (severity === 'critical') {
 severityBadge.className = 'badge bg-danger';
 } else if (severity === 'warning') {
 severityBadge.className = 'badge bg-warning text-dark';
 } else {
 severityBadge.className = 'badge bg-info';
 }
 document.getElementById('row-severity').classList.remove('d-none');
 hasData = true;
 }

 if (data.t) {
 const date = new Date(data.t * 1000);
 document.getElementById('ctx-time').textContent = date.toLocaleString();
 document.getElementById('row-time').classList.remove('d-none');
 hasData = true;
 }

 if (data.details) {
 document.getElementById('ctx-details').textContent = data.details;

 
 const labelDetails = document.getElementById('label-details');
 if (data.type === 'object') {
 labelDetails.textContent = 'Object Metadata Details:';
 } else if (data.type === 'report') {
 labelDetails.textContent = 'Report Description:';
 } else {
 labelDetails.textContent = 'Firing Context:';
 }

 document.getElementById('row-details').classList.remove('d-none');
 hasData = true;
 }

 if (data.sql) {
 document.getElementById('ctx-sql').textContent = data.sql;
 document.getElementById('row-sql').classList.remove('d-none');
 const copyBtn = document.getElementById('btn-copy-sql');
 if (copyBtn &amp;&amp; navigator.clipboard) {
 copyBtn.addEventListener('click', function () {
 navigator.clipboard.writeText(data.sql).then(function () {
 copyBtn.innerHTML = '&lt;i class="bi bi-check2 me-1"&gt;&lt;/i&gt;Copied';
 setTimeout(function () {
 copyBtn.innerHTML = '&lt;i class="bi bi-clipboard me-1"&gt;&lt;/i&gt;Copy SQL';
 }, 2000);
 });
 });
 }
 hasData = true;
 }

 if (hasData) {
 document.getElementById('pslens-context-panel').classList.remove('d-none');
 }
 }
 } catch (e) {
 console.error('Failed to parse operational context metadata:', e);
 }
 })();
&lt;/script&gt;
&lt;h2 id="real-time-indexing-stuck-off-alert"&gt;Real-Time Indexing Stuck Off Alert&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Alert ID:&lt;/strong&gt; &lt;code&gt;rti_stuck_disabled&lt;/code&gt;
&lt;strong&gt;Category:&lt;/strong&gt; Search Framework
&lt;strong&gt;Default threshold:&lt;/strong&gt; 60 minutes
&lt;strong&gt;Runs:&lt;/strong&gt; every 15 minutes&lt;/p&gt;</description></item><item><title>Search Indexing Errors</title><link>https://pslens.com/docs/alerts/search-framework/ptsf-indexing-errors/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/alerts/search-framework/ptsf-indexing-errors/</guid><description>&lt;div class="alert alert-warning border shadow-sm mb-4 psl-prospect-cta" role="note"&gt;
 &lt;div class="d-flex flex-column flex-lg-row align-items-lg-center justify-content-between gap-3"&gt;
 &lt;div&gt;
 &lt;strong&gt;New to psLens?&lt;/strong&gt; This page documents one specific alert. To see how it appears on the dashboard,
 what operators investigate, and how teams tune it, start with a live walkthrough.
 &lt;/div&gt;
 &lt;div class="d-flex flex-wrap gap-2"&gt;
 &lt;a class="btn btn-sm btn-primary" href="https://pslens.com/contact/"&gt;Book a Demo&lt;/a&gt;
 &lt;a class="btn btn-sm btn-outline-primary" href="https://pslens.com/docs/alerts/"&gt;Browse Alerts&lt;/a&gt;
 &lt;/div&gt;
 &lt;/div&gt;
&lt;/div&gt;&lt;div id="pslens-context-panel" class="card border-info mb-4 d-none"&gt;
 &lt;div class="card-header bg-light text-info py-2 fw-bold d-flex align-items-center border-bottom border-info-subtle"&gt;
 &lt;i class="bi bi-info-circle-fill me-2"&gt;&lt;/i&gt;
 &lt;span&gt;Tailored Operational Context&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="card-body p-0"&gt;
 &lt;ul class="list-group list-group-flush"&gt;
 &lt;li id="row-db" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Target Database:&lt;/strong&gt;
 &lt;span id="ctx-db" class="badge bg-secondary font-monospace"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-type" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Context Type:&lt;/strong&gt;
 &lt;span id="ctx-type" class="badge bg-light text-dark border font-monospace text-uppercase"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-severity" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Alert Severity:&lt;/strong&gt;
 &lt;span id="ctx-severity" class="badge"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-time" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none"&gt;
 &lt;strong&gt;Triggered Time:&lt;/strong&gt;
 &lt;span id="ctx-time" class="text-muted small"&gt;&amp;mdash;&lt;/span&gt;
 &lt;/li&gt;
 &lt;li id="row-details" class="list-group-item py-2 d-none"&gt;
 &lt;strong id="label-details" class="d-block mb-1"&gt;Firing Context:&lt;/strong&gt;
 &lt;code id="ctx-details" class="d-block p-2 bg-light border rounded small"
 style="white-space: pre-wrap; word-break: break-all;"&gt;&amp;mdash;&lt;/code&gt;
 &lt;/li&gt;
 &lt;li id="row-sql" class="list-group-item py-2 d-none"&gt;
 &lt;div class="d-flex justify-content-between align-items-center mb-1"&gt;
 &lt;strong id="label-sql"&gt;Contextual SQL:&lt;/strong&gt;
 &lt;button id="btn-copy-sql" type="button" class="btn btn-sm btn-outline-secondary py-0 px-2 small"&gt;
 &lt;i class="bi bi-clipboard me-1"&gt;&lt;/i&gt;Copy SQL
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;pre class="mb-0 p-2 bg-light border rounded small"&gt;&lt;code id="ctx-sql" style="white-space: pre-wrap; word-break: break-word;"&gt;&amp;mdash;&lt;/code&gt;&lt;/pre&gt;
 &lt;/li&gt;
 &lt;/ul&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
 (function () {
 const params = new URLSearchParams(window.location.search);
 const metadata = params.get('metadata');
 if (!metadata) return;

 try {
 
 const base64 = metadata.replace(/-/g, '+').replace(/_/g, '/');
 const jsonStr = decodeURIComponent(escape(window.atob(base64)));
 const data = JSON.parse(jsonStr);

 if (data) {
 let hasData = false;

 if (data.db) {
 document.getElementById('ctx-db').textContent = data.db;
 document.getElementById('row-db').classList.remove('d-none');
 hasData = true;
 }

 if (data.type) {
 document.getElementById('ctx-type').textContent = data.type;
 document.getElementById('row-type').classList.remove('d-none');
 hasData = true;
 }

 if (data.severity) {
 const severityBadge = document.getElementById('ctx-severity');
 const severity = data.severity.toLowerCase();
 severityBadge.textContent = severity.toUpperCase();
 if (severity === 'critical') {
 severityBadge.className = 'badge bg-danger';
 } else if (severity === 'warning') {
 severityBadge.className = 'badge bg-warning text-dark';
 } else {
 severityBadge.className = 'badge bg-info';
 }
 document.getElementById('row-severity').classList.remove('d-none');
 hasData = true;
 }

 if (data.t) {
 const date = new Date(data.t * 1000);
 document.getElementById('ctx-time').textContent = date.toLocaleString();
 document.getElementById('row-time').classList.remove('d-none');
 hasData = true;
 }

 if (data.details) {
 document.getElementById('ctx-details').textContent = data.details;

 
 const labelDetails = document.getElementById('label-details');
 if (data.type === 'object') {
 labelDetails.textContent = 'Object Metadata Details:';
 } else if (data.type === 'report') {
 labelDetails.textContent = 'Report Description:';
 } else {
 labelDetails.textContent = 'Firing Context:';
 }

 document.getElementById('row-details').classList.remove('d-none');
 hasData = true;
 }

 if (data.sql) {
 document.getElementById('ctx-sql').textContent = data.sql;
 document.getElementById('row-sql').classList.remove('d-none');
 const copyBtn = document.getElementById('btn-copy-sql');
 if (copyBtn &amp;&amp; navigator.clipboard) {
 copyBtn.addEventListener('click', function () {
 navigator.clipboard.writeText(data.sql).then(function () {
 copyBtn.innerHTML = '&lt;i class="bi bi-check2 me-1"&gt;&lt;/i&gt;Copied';
 setTimeout(function () {
 copyBtn.innerHTML = '&lt;i class="bi bi-clipboard me-1"&gt;&lt;/i&gt;Copy SQL';
 }, 2000);
 });
 });
 }
 hasData = true;
 }

 if (hasData) {
 document.getElementById('pslens-context-panel').classList.remove('d-none');
 }
 }
 } catch (e) {
 console.error('Failed to parse operational context metadata:', e);
 }
 })();
&lt;/script&gt;
&lt;h2 id="search-indexing-errors-alert"&gt;Search Indexing Errors Alert&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Alert ID:&lt;/strong&gt; &lt;code&gt;ptsf_indexing_errors&lt;/code&gt;
&lt;strong&gt;Category:&lt;/strong&gt; Search Framework
&lt;strong&gt;Default lookback:&lt;/strong&gt; 24 hours
&lt;strong&gt;Runs:&lt;/strong&gt; every 15 minutes&lt;/p&gt;</description></item></channel></rss>