You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ct...@apache.org on 2021/01/28 16:33:32 UTC

svn commit: r1070647 [7/35] - in /websites/production/lucene/content/solr/guide/8_8: ./ images/math-expressions/ meta-docs/

Modified: websites/production/lucene/content/solr/guide/8_8/dsp.html
==============================================================================
--- websites/production/lucene/content/solr/guide/8_8/dsp.html (original)
+++ websites/production/lucene/content/solr/guide/8_8/dsp.html Thu Jan 28 16:33:25 2021
@@ -8,7 +8,7 @@
 <meta name="description" content="">
 <meta name="keywords" content=" ">
 
-<title>Digital Signal Processing | Apache Solr Reference Guide 8.8-DRAFT</title>
+<title>Digital Signal Processing | Apache Solr Reference Guide 8.8</title>
 
 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
 <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
@@ -68,7 +68,7 @@
 
     </script>
 </head>
-<body class="DRAFT" id="dsp">
+<body class="" id="dsp">
 <div class="container-fluid">
   <div class="row">
   <nav id="sidebar" class="col-2 d-none d-md-block">
@@ -76,11 +76,6 @@
 <div class="sidebar-header">
   <div class="sidebarTitle text-center">Apache Solr Reference Guide</div>
   
-  <p class="draft-notice">
-    This is an unofficial DRAFT of the Guide for 8.8.
-    <a href="https://lucene.apache.org/solr/guide/">Official releases are available from the Solr website</a>.
-  </p>
-  
 
   <!--comment out this block if you want to hide search-->
     <!--start search-->
@@ -872,11 +867,36 @@
       </li>
       
       <li class="sb-level2">
-        <a href="math-expressions.html">Math Expressions</a>
+        <a href="math-expressions.html">Streaming Expressions and Math Expressions</a>
         
         <ul>
           
           <li class="sb-level3">
+            <a href="visualization.html">Visualization</a>
+            
+          </li>
+          
+          <li class="sb-level3">
+            <a href="math-start.html">Getting Started</a>
+            
+          </li>
+          
+          <li class="sb-level3">
+            <a href="loading.html">Loading Data</a>
+            
+          </li>
+          
+          <li class="sb-level3">
+            <a href="search-sample.html">Searching, Sampling and Aggregation</a>
+            
+          </li>
+          
+          <li class="sb-level3">
+            <a href="transform.html">Transforming Data</a>
+            
+          </li>
+          
+          <li class="sb-level3">
             <a href="scalar-math.html">Scalar Math</a>
             
           </li>
@@ -897,12 +917,12 @@
           </li>
           
           <li class="sb-level3">
-            <a href="vectorization.html">Streams and Vectorization</a>
+            <a href="term-vectors.html">Text Analysis and Term Vectors</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="term-vectors.html">Text Analysis and Term Vectors</a>
+            <a href="probability-distributions.html">Probability Distributions</a>
             
           </li>
           
@@ -912,12 +932,12 @@
           </li>
           
           <li class="sb-level3">
-            <a href="probability-distributions.html">Probability Distributions</a>
+            <a href="regression.html">Linear Regression</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="simulations.html">Monte Carlo Simulations</a>
+            <a href="curve-fitting.html">Curve Fitting</a>
             
           </li>
           
@@ -927,32 +947,32 @@
           </li>
           
           <li class="sb-level3">
-            <a href="regression.html">Linear Regression</a>
+            <a href="numerical-analysis.html">Interpolation, Derivatives and Integrals</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="numerical-analysis.html">Interpolation, Derivatives and Integrals</a>
+            <a href="dsp.html">Digital Signal Processing</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="curve-fitting.html">Curve Fitting</a>
+            <a href="simulations.html">Monte Carlo Simulations</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="dsp.html">Digital Signal Processing</a>
+            <a href="machine-learning.html">Machine Learning</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="machine-learning.html">Machine Learning</a>
+            <a href="computational-geometry.html">Computational Geometry</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="computational-geometry.html">Computational Geometry</a>
+            <a href="logs.html">Log Analytics</a>
             
           </li>
           
@@ -1654,12 +1674,6 @@
   
   <nav class="toc float-right justify-content-end">
     <ul class="sectlevel1">
-<li><a href="#dot-product">Dot Product</a>
-<ul class="sectlevel2">
-<li><a href="#representing-linear-combinations">Representing Linear Combinations</a></li>
-<li><a href="#representing-correlation">Representing Correlation</a></li>
-</ul>
-</li>
 <li><a href="#convolution">Convolution</a>
 <ul class="sectlevel2">
 <li><a href="#moving-average-function">Moving Average Function</a></li>
@@ -1670,7 +1684,7 @@
 <li><a href="#find-delay">Find Delay</a></li>
 <li><a href="#oscillate-sine-wave">Oscillate (Sine Wave)</a>
 <ul class="sectlevel2">
-<li><a href="#sine-wave-interpolation-extrapolation">Sine Wave Interpolation, Extrapolation</a></li>
+<li><a href="#sine-wave-interpolation-extrapolation">Sine Wave Interpolation &amp; Extrapolation</a></li>
 </ul>
 </li>
 <li><a href="#autocorrelation">Autocorrelation</a></li>
@@ -1687,307 +1701,51 @@
   <section class="content">
      <section id="preamble" aria-label="Preamble"><p>This section of the user guide explores functions that are commonly used in the field of
 Digital Signal Processing (DSP).</p></section>
-<section class="sect1"><h2 id="dot-product">Dot Product</h2><p>The <code>dotProduct</code> function is used to calculate the dot product of two numeric arrays.
-The dot product is a fundamental calculation for the DSP functions discussed in this section. Before diving into
-the more advanced DSP functions its useful to develop a deeper intuition of the dot product.</p>
-<p>The dot product operation is performed in two steps:</p>
-<div class="olist arabic"><ol class="arabic"><li>Element-by-element multiplication of two vectors which produces a vector of products.</li><li>Sum the vector of products to produce a scalar result.</li></ol></div>
-<p>This simple bit of math has a number of important applications.</p>
-<section class="sect2"><h3 id="representing-linear-combinations">Representing Linear Combinations</h3><p>The <code>dotProduct</code> performs the math of a <em>linear combination</em>. A linear combination has the following form:</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-text" data-lang="text"><pre class="highlight"><code>(a1*v1)+(a2*v2)...</code></pre></code></pre></div>
-<p>In the above example <code>a1</code> and <code>a2</code> are random variables that change. <code>v1</code> and <code>v2</code> are constant values.</p>
-<p>When computing the dot product the elements of two vectors are multiplied together and the results are added.
-If the first vector contains random variables and the second vector contains constant values
-then the dot product is performing a linear combination.</p>
-<p>This scenario comes up again and again in machine learning. For example both linear and logistic regression
-solve for a vector of constant weights. In order to perform a prediction, a dot product is calculated
-between a random observation vector and the constant weight vector. That dot product is a linear combination because
-one of the vectors holds constant weights.</p>
-<p>Lets look at simple example of how a linear combination can be used to find the mean of a vector of numbers.</p>
-<p>In the example below two arrays are set to variables <strong><code>a</code></strong> and <strong><code>b</code></strong> and then operated on by the <code>dotProduct</code> function.
-The output of the <code>dotProduct</code> function is set to variable <strong><code>c</code></strong>.</p>
-<p>The <code>mean</code> function is then used to compute the mean of the first array which is set to the variable <strong><code>d</code></strong>.</p>
-<p>Both the dot product and the mean are included in the output.</p>
-<p>When we look at the output of this expression we see that the dot product and the mean of the first array
-are both 30.</p>
-<p>The <code>dotProduct</code> function calculated the mean of the first array.</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-text" data-lang="text"><pre class="highlight"><code>let(echo="c, d",
-    a=array(10, 20, 30, 40, 50),
-    b=array(.2, .2, .2, .2, .2),
-    c=dotProduct(a, b),
-    d=mean(a))</code></pre></code></pre></div>
-<p>When this expression is sent to the <code>/stream</code> handler it responds with:</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-json" data-lang="json"><pre class="highlight"><code><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-  </span><span style="color: #000080">"result-set"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-    </span><span style="color: #000080">"docs"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">[</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"c"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #009999">30</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"d"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #009999">30</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">},</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"EOF"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #000000;font-weight: bold">true</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"RESPONSE_TIME"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #009999">0</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
-    </span><span style="background-color: #f8f8f8">]</span><span style="color: #bbbbbb">
-  </span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
-</span><span style="background-color: #f8f8f8">}</span></code></pre></code></pre></div>
-<p>To get a better understanding of how the dot product calculated the mean we can perform the steps of the
-calculation using vector math and look at the output of each step.</p>
-<p>In the example below the <code>ebeMultiply</code> function performs an element-by-element multiplication of
-two arrays. This is the first step of the dot product calculation. The result of the element-by-element
-multiplication is assigned to variable <strong><code>c</code></strong>.</p>
-<p>In the next step the <code>add</code> function adds all the elements of the array in variable <strong><code>c</code></strong>.</p>
-<p>Notice that multiplying each element of the first array by .2 and then adding the results is
-equivalent to the formula for computing the mean of the first array. The formula for computing the mean
-of an array is to add all the elements and divide by the number of elements.</p>
-<p>The output includes the output of both the <code>ebeMultiply</code> function and the <code>add</code> function.</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-text" data-lang="text"><pre class="highlight"><code>let(echo="c, d",
-    a=array(10, 20, 30, 40, 50),
-    b=array(.2, .2, .2, .2, .2),
-    c=ebeMultiply(a, b),
-    d=add(c))</code></pre></code></pre></div>
-<p>When this expression is sent to the <code>/stream</code> handler it responds with:</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-json" data-lang="json"><pre class="highlight"><code><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-  </span><span style="color: #000080">"result-set"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-    </span><span style="color: #000080">"docs"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">[</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"c"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">[</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">2</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">4</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">6</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">8</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">10</span><span style="color: #bbbbbb">
-        </span><span style="background-color: #f8f8f8">],</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"d"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #009999">30</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">},</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"EOF"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #000000;font-weight: bold">true</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"RESPONSE_TIME"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #009999">0</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
-    </span><span style="background-color: #f8f8f8">]</span><span style="color: #bbbbbb">
-  </span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
-</span><span style="background-color: #f8f8f8">}</span></code></pre></code></pre></div>
-<p>In the example above two arrays were combined in a way that produced the mean of the first. In the second array
-each value was set to .2. Another way of looking at this is that each value in the second array is
-applying the same weight to the values in the first array.
-By varying the weights in the second array we can produce a different result.
-For example if the first array represents a time series,
-the weights in the second array can be set to add more weight to a particular element in the first array.</p>
-<p>The example below creates a weighted average with the weight decreasing from right to left.
-Notice that the weighted mean
-of 36.666 is larger than the previous mean which was 30. This is because more weight was given to last element in the
-array.</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-text" data-lang="text"><pre class="highlight"><code>let(echo="c, d",
-    a=array(10, 20, 30, 40, 50),
-    b=array(.066666666666666,.133333333333333,.2, .266666666666666, .33333333333333),
-    c=ebeMultiply(a, b),
-    d=add(c))</code></pre></code></pre></div>
-<p>When this expression is sent to the <code>/stream</code> handler it responds with:</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-json" data-lang="json"><pre class="highlight"><code><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-  </span><span style="color: #000080">"result-set"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-    </span><span style="color: #000080">"docs"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">[</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"c"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">[</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">0.66666666666666</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">2.66666666666666</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">6</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">10.66666666666664</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">16.6666666666665</span><span style="color: #bbbbbb">
-        </span><span style="background-color: #f8f8f8">],</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"d"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #009999">36.66666666666646</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">},</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"EOF"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #000000;font-weight: bold">true</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"RESPONSE_TIME"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #009999">0</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
-    </span><span style="background-color: #f8f8f8">]</span><span style="color: #bbbbbb">
-  </span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
-</span><span style="background-color: #f8f8f8">}</span></code></pre></code></pre></div></section>
-<section class="sect2"><h3 id="representing-correlation">Representing Correlation</h3><p>Often when we think of correlation, we are thinking of <em>Pearson correlation</em> in the field of statistics. But the definition of
-correlation is actually more general: a mutual relationship or connection between two or more things.
-In the field of digital signal processing the dot product is used to represent correlation. The examples below demonstrates
-how the dot product can be used to represent correlation.</p>
-<p>In the example below the dot product is computed for two vectors. Notice that the vectors have different values that fluctuate
-together. The output of the dot product is 190, which is hard to reason about because it&#8217;s not scaled.</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-text" data-lang="text"><pre class="highlight"><code>let(echo="c, d",
-    a=array(10, 20, 30, 20, 10),
-    b=array(1, 2, 3, 2, 1),
-    c=dotProduct(a, b))</code></pre></code></pre></div>
-<p>When this expression is sent to the <code>/stream</code> handler it responds with:</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-json" data-lang="json"><pre class="highlight"><code><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-  </span><span style="color: #000080">"result-set"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-    </span><span style="color: #000080">"docs"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">[</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"c"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #009999">190</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">},</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"EOF"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #000000;font-weight: bold">true</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"RESPONSE_TIME"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #009999">0</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
-    </span><span style="background-color: #f8f8f8">]</span><span style="color: #bbbbbb">
-  </span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
-</span><span style="background-color: #f8f8f8">}</span></code></pre></code></pre></div>
-<p>One approach to scaling the dot product is to first scale the vectors so that both vectors have a magnitude of 1. Vectors with a
-magnitude of 1, also called unit vectors, are used when comparing only the angle between vectors rather than the magnitude.
-The <code>unitize</code> function can be used to unitize the vectors before calculating the dot product.</p>
-<p>Notice in the example below the dot product result, set to variable <strong><code>e</code></strong>, is effectively 1. When applied to unit vectors the dot product
-will be scaled between 1 and -1. Also notice in the example <code>cosineSimilarity</code> is calculated on the unscaled vectors and the
-answer is also effectively 1. This is because cosine similarity is a scaled dot product.</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-text" data-lang="text"><pre class="highlight"><code>let(echo="e, f",
-    a=array(10, 20, 30, 20, 10),
-    b=array(1, 2, 3, 2, 1),
-    c=unitize(a),
-    d=unitize(b),
-    e=dotProduct(c, d),
-    f=cosineSimilarity(a, b))</code></pre></code></pre></div>
-<p>When this expression is sent to the <code>/stream</code> handler it responds with:</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-json" data-lang="json"><pre class="highlight"><code><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-  </span><span style="color: #000080">"result-set"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-    </span><span style="color: #000080">"docs"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">[</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"e"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #009999">0.9999999999999998</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"f"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #009999">0.9999999999999999</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">},</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"EOF"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #000000;font-weight: bold">true</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"RESPONSE_TIME"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #009999">0</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
-    </span><span style="background-color: #f8f8f8">]</span><span style="color: #bbbbbb">
-  </span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
-</span><span style="background-color: #f8f8f8">}</span></code></pre></code></pre></div>
-<p>If we transpose the first two numbers in the first array, so that the vectors
-are not perfectly correlated, we see that the cosine similarity drops. This illustrates
-how the dot product represents correlation.</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-text" data-lang="text"><pre class="highlight"><code>let(echo="c, d",
-    a=array(20, 10, 30, 20, 10),
-    b=array(1, 2, 3, 2, 1),
-    c=cosineSimilarity(a, b))</code></pre></code></pre></div>
-<p>When this expression is sent to the <code>/stream</code> handler it responds with:</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-json" data-lang="json"><pre class="highlight"><code><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-  </span><span style="color: #000080">"result-set"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-    </span><span style="color: #000080">"docs"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">[</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"c"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #009999">0.9473684210526314</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">},</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"EOF"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #000000;font-weight: bold">true</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"RESPONSE_TIME"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #009999">0</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
-    </span><span style="background-color: #f8f8f8">]</span><span style="color: #bbbbbb">
-  </span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
-</span><span style="background-color: #f8f8f8">}</span></code></pre></code></pre></div></section></section>
-<section class="sect1"><h2 id="convolution">Convolution</h2><p>The <code>conv</code> function calculates the convolution of two vectors. The convolution is calculated by reversing
+<section class="sect1"><h2 id="convolution">Convolution</h2><p>The <code>conv</code> function calculates the convolution of two vectors. The convolution is calculated by <strong>reversing</strong>
 the second vector and sliding it across the first vector. The dot product of the two vectors
 is calculated at each point as the second vector is slid across the first vector.
 The dot products are collected in a third vector which is the convolution of the two vectors.</p>
-<section class="sect2"><h3 id="moving-average-function">Moving Average Function</h3><p>Before looking at an example of convolution its useful to review the <code>movingAvg</code> function. The moving average
+<section class="sect2"><h3 id="moving-average-function">Moving Average Function</h3><p>Before looking at an example of convolution it&#8217;s useful to review the <code>movingAvg</code> function. The moving average
 function computes a moving average by sliding a window across a vector and computing
-the average of the window at each shift. If that sounds similar to convolution, that&#8217;s because the <code>movingAvg</code> function
-is syntactic sugar for convolution.</p>
-<p>Below is an example of a moving average with a window size of 5. Notice that original vector has 13 elements
+the average of the window at each shift. If that sounds similar to convolution, that&#8217;s because the <code>movingAvg</code>
+function involves a sliding window approach similar to convolution.</p>
+<p>Below is an example of a moving average with a window size of 5. Notice that the original vector has 13 elements
 but the result of the moving average has only 9 elements. This is because the <code>movingAvg</code> function
-only begins generating results when it has a full window. In this case because the window size is 5 so the
-moving average starts generating results from the 4<sup>th</sup> index of the original array.</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-text" data-lang="text"><pre class="highlight"><code>let(a=array(1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1),
-    b=movingAvg(a, 5))</code></pre></code></pre></div>
-<p>When this expression is sent to the <code>/stream</code> handler it responds with:</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-json" data-lang="json"><pre class="highlight"><code><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-  </span><span style="color: #000080">"result-set"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-    </span><span style="color: #000080">"docs"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">[</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"b"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">[</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">3</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">4</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">5</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">5.6</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">5.8</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">5.6</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">5</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">4</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">3</span><span style="color: #bbbbbb">
-        </span><span style="background-color: #f8f8f8">]</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">},</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"EOF"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #000000;font-weight: bold">true</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"RESPONSE_TIME"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #009999">0</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
-    </span><span style="background-color: #f8f8f8">]</span><span style="color: #bbbbbb">
-  </span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
-</span><span style="background-color: #f8f8f8">}</span></code></pre></code></pre></div></section>
+only begins generating results when it has a full window. The <code>ltrim</code> function is used to trim the
+first four elements from the original <code>y</code> array to line up with the moving average.</p>
+<div class="imageblock"><img src="images/math-expressions/conv1.png" alt="conv1"></div></section>
 <section class="sect2"><h3 id="convolutional-smoothing">Convolutional Smoothing</h3><p>The moving average can also be computed using convolution. In the example
 below the <code>conv</code> function is used to compute the moving average of the first array
-by applying the second array as the filter.</p>
-<p>Looking at the result, we see that it is not exactly the same as the result
-of the <code>movingAvg</code> function. That is because the <code>conv</code> pads zeros
+by applying the second array as a filter.</p>
+<p>Looking at the result, we see that the convolution produced an array with 17 values instead of the 9 values created by the
+moving average. That is because the <code>conv</code> function pads zeros
 to the front and back of the first vector so that the window size is always full.</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-text" data-lang="text"><pre class="highlight"><code>let(a=array(1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1),
-    b=array(.2, .2, .2, .2, .2),
-    c=conv(a, b))</code></pre></code></pre></div>
-<p>When this expression is sent to the <code>/stream</code> handler it responds with:</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-json" data-lang="json"><pre class="highlight"><code><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-  </span><span style="color: #000080">"result-set"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-    </span><span style="color: #000080">"docs"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">[</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"c"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">[</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">0.2</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">0.6000000000000001</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">1.2</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">2.0000000000000004</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">3.0000000000000004</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">4</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">5</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">5.6000000000000005</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">5.800000000000001</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">5.6000000000000005</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">5.000000000000001</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">4</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">3</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">2</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">1.2000000000000002</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">0.6000000000000001</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">0.2</span><span style="color: #bbbbbb">
-        </span><span style="background-color: #f8f8f8">]</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">},</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"EOF"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #000000;font-weight: bold">true</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"RESPONSE_TIME"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #009999">0</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
-    </span><span style="background-color: #f8f8f8">]</span><span style="color: #bbbbbb">
-  </span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
-</span><span style="background-color: #f8f8f8">}</span></code></pre></code></pre></div>
-<p>We achieve the same result as the <code>movingAvg</code> function by using the <code>copyOfRange</code> function to copy a range of
-the result that drops the first and last 4 values of
-the convolution result. In the example below the <code>precision</code> function is also also used to remove floating point errors from the
-convolution result. When this is added the output is exactly the same as the <code>movingAvg</code> function.</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-text" data-lang="text"><pre class="highlight"><code>let(a=array(1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1),
-    b=array(.2, .2, .2, .2, .2),
-    c=conv(a, b),
-    d=copyOfRange(c, 4, 13),
-    e=precision(d, 2))</code></pre></code></pre></div>
-<p>When this expression is sent to the <code>/stream</code> handler it responds with:</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-json" data-lang="json"><pre class="highlight"><code><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-  </span><span style="color: #000080">"result-set"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-    </span><span style="color: #000080">"docs"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">[</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"e"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">[</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">3</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">4</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">5</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">5.6</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">5.8</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">5.6</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">5</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">4</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">3</span><span style="color: #bbbbbb">
-        </span><span style="background-color: #f8f8f8">]</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">},</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"EOF"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #000000;font-weight: bold">true</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"RESPONSE_TIME"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #009999">0</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
-    </span><span style="background-color: #f8f8f8">]</span><span style="color: #bbbbbb">
-  </span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
-</span><span style="background-color: #f8f8f8">}</span></code></pre></code></pre></div></section></section>
+<div class="imageblock"><img src="images/math-expressions/conv2.png" alt="conv2"></div>
+<p>We achieve the same result as the <code>movingAvg</code> function by trimming the first and last 4 values of
+the convolution result using the <code>ltrim</code> and <code>rtrim</code> functions.</p>
+<p>The example below plots both the trimmed convolution and the moving average on the same plot. Notice that
+they perfectly overlap.</p>
+<div class="imageblock"><img src="images/math-expressions/conv3.png" alt="conv3"></div>
+<p>This demonstrates how convolution can be used to smooth a signal by sliding a filter across the signal and
+computing the dot product at each point. The smoothing effect is caused by the design of the filter.
+In the example, the filter length is 5 and each value in the filter is .2. This filter calculates a
+simple moving average with a window size of 5.</p>
+<p>The formula for computing a simple moving average using convolution is to make the filter length the window
+size and make the values of the filter all the same and sum to 1. A moving average with a window size of 4
+can be computed by changing the filter to a length of 4 with each value being .25.</p>
+<section class="sect3"><h4 id="changing-the-weights">Changing the Weights</h4><p>The filter, which is sometimes called the <strong>kernel</strong>, can be viewed as a vector of weights. In the initial
+example all values in the filter have the same weight (.2). The weights in the filter can be changed to
+produce different smoothing effects. This is demonstrated in the example below.</p>
+<p>In this example the filter increases in weight from .1 to .3. This places more weight towards the front
+of the filter. Notice that the filter is reversed with the <code>rev</code> function before the <code>conv</code> function applies it.
+This is done because convolution will reverse
+the filter. In this case we reverse it ahead of time and when convolution reverses it back, it is the same
+as the original filter.</p>
+<p>The plot shows the effect of the different weights in the filter. The dark blue line is the initial array.
+The light blue line is the convolution and the orange line is the moving average. Notice that the convolution
+responds quicker to the movements in the underlying array. This is because more weight has been placed
+at the front of the filter.</p>
+<div class="imageblock"><img src="images/math-expressions/conv4.png" alt="conv4"></div></section></section></section>
 <section class="sect1"><h2 id="cross-correlation">Cross-Correlation</h2><p>Cross-correlation is used to determine the delay between two signals. This is accomplished by sliding one signal across another
 and calculating the dot product at each shift. The dot products are collected into a vector which represents the correlation
 at each shift. The highest dot product in the cross-correlation vector is the point where the two signals are most closely correlated.</p>
@@ -1997,104 +1755,36 @@ difference in the formula when represent
 The <code>conv</code> function reverses the second vector so it will be flipped back to its original order to perform the correlation calculation
 rather than the convolution calculation.</p>
 <p>Notice in the result the highest value is 217. This is the point where the two vectors have the highest correlation.</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-text" data-lang="text"><pre class="highlight"><code>let(a=array(1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1),
-    b=array(4, 5, 6, 7, 6, 5, 4, 3, 2, 1),
-    c=conv(a, rev(b)))</code></pre></code></pre></div>
-<p>When this expression is sent to the <code>/stream</code> handler it responds with:</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-json" data-lang="json"><pre class="highlight"><code><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-  </span><span style="color: #000080">"result-set"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-    </span><span style="color: #000080">"docs"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">[</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"c"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">[</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">1</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">4</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">10</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">20</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">35</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">56</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">84</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">116</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">149</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">180</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">203</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">216</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">217</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">204</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">180</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">148</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">111</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">78</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">50</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">28</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">13</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-          </span><span style="color: #009999">4</span><span style="color: #bbbbbb">
-        </span><span style="background-color: #f8f8f8">]</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">},</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"EOF"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #000000;font-weight: bold">true</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"RESPONSE_TIME"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #009999">0</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
-    </span><span style="background-color: #f8f8f8">]</span><span style="color: #bbbbbb">
-  </span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
-</span><span style="background-color: #f8f8f8">}</span></code></pre></code></pre></div></section>
+<div class="imageblock"><img src="images/math-expressions/crosscorr.png" alt="crosscorr"></div></section>
 <section class="sect1"><h2 id="find-delay">Find Delay</h2><p>It is fairly simple to compute the delay from the cross-correlation result, but a convenience function called <code>finddelay</code> can
 be used to find the delay directly. Under the covers <code>finddelay</code> uses convolutional math to compute the cross-correlation vector
 and then computes the delay between the two signals.</p>
 <p>Below is an example of the <code>finddelay</code> function. Notice that the <code>finddelay</code> function reports a 3 period delay between the first
 and second signal.</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-text" data-lang="text"><pre class="highlight"><code>let(a=array(1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1),
-    b=array(4, 5, 6, 7, 6, 5, 4, 3, 2, 1),
-    c=finddelay(a, b))</code></pre></code></pre></div>
-<p>When this expression is sent to the <code>/stream</code> handler it responds with:</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-json" data-lang="json"><pre class="highlight"><code><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-  </span><span style="color: #000080">"result-set"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-    </span><span style="color: #000080">"docs"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="background-color: #f8f8f8">[</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"c"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #009999">3</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">},</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">{</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"EOF"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #000000;font-weight: bold">true</span><span style="background-color: #f8f8f8">,</span><span style="color: #bbbbbb">
-        </span><span style="color: #000080">"RESPONSE_TIME"</span><span style="background-color: #f8f8f8">:</span><span style="color: #bbbbbb"> </span><span style="color: #009999">0</span><span style="color: #bbbbbb">
-      </span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
-    </span><span style="background-color: #f8f8f8">]</span><span style="color: #bbbbbb">
-  </span><span style="background-color: #f8f8f8">}</span><span style="color: #bbbbbb">
-</span><span style="background-color: #f8f8f8">}</span></code></pre></code></pre></div></section>
+<div class="imageblock"><img src="images/math-expressions/delay.png" alt="delay"></div></section>
 <section class="sect1"><h2 id="oscillate-sine-wave">Oscillate (Sine Wave)</h2><p>The <code>oscillate</code> function generates a periodic oscillating signal which can be used to model and study sine waves.</p>
-<p>The <code>oscillate</code> function takes three parameters: <strong>amplitude</strong>, <strong>angular frequency</strong>
-and <strong>phase</strong> and returns a vector containing the y-axis points of a sine wave.</p>
+<p>The <code>oscillate</code> function takes three parameters: <code>amplitude</code>, <code>angular frequency</code>, and <code>phase</code> and returns a vector containing the y-axis points of a sine wave.</p>
 <p>The y-axis points were generated from an x-axis sequence of 0-127.</p>
 <p>Below is an example of the <code>oscillate</code> function called with an amplitude of
 1, and angular frequency of .28 and phase of 1.57.</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-text" data-lang="text"><pre class="highlight"><code>oscillate(1, 0.28, 1.57)</code></pre></code></pre></div>
-<p>The result of the <code>oscillate</code> function is plotted below:</p>
 <div class="imageblock"><img src="images/math-expressions/sinewave.png" alt="sinewave"></div>
-<section class="sect2"><h3 id="sine-wave-interpolation-extrapolation">Sine Wave Interpolation, Extrapolation</h3><p>The <code>oscillate</code> function returns a function which can be used by the <code>predict</code> function to interpolate or extrapolate a sine wave.
-The example below extrapolates the sine wave to an x-axis sequence of 0-256.</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-text" data-lang="text"><pre class="highlight"><code>let(a=oscillate(1, 0.28, 1.57),
-    b=predict(a, sequence(256, 0, 1)))</code></pre></code></pre></div>
-<p>The extrapolated sine wave is plotted below:</p>
+<section class="sect2"><h3 id="sine-wave-interpolation-extrapolation">Sine Wave Interpolation &amp; Extrapolation</h3><p>The <code>oscillate</code> function returns a function which can be used by the <code>predict</code> function to interpolate or extrapolate a sine wave.</p>
+<p>The example below extrapolates the sine wave to an x-axis sequence of 0-256.</p>
 <div class="imageblock"><img src="images/math-expressions/sinewave256.png" alt="sinewave256"></div></section></section>
 <section class="sect1"><h2 id="autocorrelation">Autocorrelation</h2><p>Autocorrelation measures the degree to which a signal is correlated with itself. Autocorrelation is used to determine
 if a vector contains a signal or is purely random.</p>
 <p>A few examples, with plots, will help to understand the concepts.</p>
 <p>The first example simply revisits the example above of an extrapolated sine wave. The result of this
 is plotted in the image below. Notice that there is a structure to the plot that is clearly not random.</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-text" data-lang="text"><pre class="highlight"><code>let(a=oscillate(1, 0.28, 1.57),
-    b=predict(a, sequence(256, 0, 1)))</code></pre></code></pre></div>
 <div class="imageblock"><img src="images/math-expressions/sinewave256.png" alt="sinewave256"></div>
 <p>In the next example the <code>sample</code> function is used to draw 256 samples from a <code>uniformDistribution</code> to create a
 vector of random data. The result of this is plotted in the image below. Notice that there is no clear structure to the
 data and the data appears to be random.</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-text" data-lang="text"><pre class="highlight"><code>sample(uniformDistribution(-1.5, 1.5), 256)</code></pre></code></pre></div>
 <div class="imageblock"><img src="images/math-expressions/noise.png" alt="noise"></div>
 <p>In the next example the random noise is added to the sine wave using the <code>ebeAdd</code> function.
 The result of this is plotted in the image below. Notice that the sine wave has been hidden
 somewhat within the noise. Its difficult to say for sure if there is structure. As plots
 becomes more dense it can become harder to see a pattern hidden within noise.</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-text" data-lang="text"><pre class="highlight"><code>let(a=oscillate(1, 0.28, 1.57),
-    b=predict(a, sequence(256, 0, 1)),
-    c=sample(uniformDistribution(-1.5, 1.5), 256),
-    d=ebeAdd(b,c))</code></pre></code></pre></div>
 <div class="imageblock"><img src="images/math-expressions/hidden-signal.png" alt="hidden signal"></div>
 <p>In the next examples autocorrelation is performed with each of the vectors shown above to see what the
 autocorrelation plots look like.</p>
@@ -2105,32 +1795,22 @@ moves up and down in increasing intensit
 the point where the sine waves are directly lined up. Following the peak the correlation moves up and down in decreasing
 intensity as the sine wave slides farther away from being directly lined up.</p>
 <p>This is the autocorrelation plot of a pure signal.</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-text" data-lang="text"><pre class="highlight"><code>let(a=oscillate(1, 0.28, 1.57),
-    b=predict(a, sequence(256, 0, 1)),
-    c=conv(b, rev(b)))</code></pre></code></pre></div>
 <div class="imageblock"><img src="images/math-expressions/signal-autocorrelation.png" alt="signal autocorrelation"></div>
 <p>In the example below autocorrelation is performed with the vector of pure noise. Notice that the autocorrelation
 plot has a very different plot then the sine wave. In this plot there is long period of low intensity correlation that appears
 to be random. Then in the center a peak of high intensity correlation where the vectors are directly lined up.
 This is followed by another long period of low intensity correlation.</p>
 <p>This is the autocorrelation plot of pure noise.</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-text" data-lang="text"><pre class="highlight"><code>let(a=sample(uniformDistribution(-1.5, 1.5), 256),
-    b=conv(a, rev(a)),</code></pre></code></pre></div>
 <div class="imageblock"><img src="images/math-expressions/noise-autocorrelation.png" alt="noise autocorrelation"></div>
 <p>In the example below autocorrelation is performed on the vector with the sine wave hidden within the noise.
 Notice that this plot shows very clear signs of structure which is similar to autocorrelation plot of the
 pure signal. The correlation is less intense due to noise but the shape of the correlation plot suggests
 strongly that there is an underlying signal hidden within the noise.</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-text" data-lang="text"><pre class="highlight"><code>let(a=oscillate(1, 0.28, 1.57),
-    b=predict(a, sequence(256, 0, 1)),
-    c=sample(uniformDistribution(-1.5, 1.5), 256),
-    d=ebeAdd(b, c),
-    e=conv(d, rev(d)))</code></pre></code></pre></div>
 <div class="imageblock"><img src="images/math-expressions/hidden-signal-autocorrelation.png" alt="hidden signal autocorrelation"></div></section>
-<section class="sect1"><h2 id="discrete-fourier-transform">Discrete Fourier Transform</h2><p>The convolution based functions described above are operating on signals in the time domain. In the time
-domain the X axis is time and the Y axis is the quantity of some value at a specific point in time.</p>
+<section class="sect1"><h2 id="discrete-fourier-transform">Discrete Fourier Transform</h2><p>The convolution-based functions described above are operating on signals in the time domain. In the time
+domain the x-axis is time and the y-axis is the quantity of some value at a specific point in time.</p>
 <p>The discrete Fourier Transform translates a time domain signal into the frequency domain.
-In the frequency domain the X axis is frequency, and Y axis is the accumulated power at a specific frequency.</p>
+In the frequency domain the x-axis is frequency, and y-axis is the accumulated power at a specific frequency.</p>
 <p>The basic principle is that every time domain signal is composed of one or more signals (sine waves)
 at different frequencies. The discrete Fourier transform decomposes a time domain signal into its component
 frequencies and measures the power at each frequency.</p>
@@ -2138,19 +1818,15 @@ frequencies and measures the power at ea
 to determine if a signal has structure or if it is purely random.</p>
 <section class="sect2"><h3 id="complex-result">Complex Result</h3><p>The <code>fft</code> function performs the discrete Fourier Transform on a vector of <strong>real</strong> data. The result
 of the <code>fft</code> function is returned as <strong>complex</strong> numbers. A complex number has two parts, <strong>real</strong> and <strong>imaginary</strong>.
-The imaginary part of the complex number is ignored in the examples below, but there
-are many tutorials on the FFT and that include complex numbers available online.</p>
-<p>But before diving into the examples it is important to understand how the <code>fft</code> function formats the
-complex numbers in the result.</p>
+The <strong>real</strong> part of the result describes the magnitude of the signal at different frequencies.
+The <strong>imaginary</strong> part of the result describes the <strong>phase</strong>. The examples below deal only with the <strong>real</strong>
+part of the result.</p>
 <p>The <code>fft</code> function returns a <code>matrix</code> with two rows. The first row in the matrix is the <strong>real</strong>
-part of the complex result. The second row in the matrix is the <strong>imaginary</strong> part of the complex result.</p>
-<p>The <code>rowAt</code> function can be used to access the rows so they can be processed as vectors.
-This approach was taken because all of the vector math functions operate on vectors of real numbers.
-Rather then introducing a complex number abstraction into the expression language, the <code>fft</code> result is
-represented as two vectors of real numbers.</p></section>
+part of the complex result. The second row in the matrix is the <strong>imaginary</strong> part of the complex result.
+The <code>rowAt</code> function can be used to access the rows so they can be processed as vectors.</p></section>
 <section class="sect2"><h3 id="fast-fourier-transform-examples">Fast Fourier Transform Examples</h3><p>In the first example the <code>fft</code> function is called on the sine wave used in the autocorrelation example.</p>
 <p>The results of the <code>fft</code> function is a matrix. The <code>rowAt</code> function is used to return the first row of
-the matrix which is a vector containing the real values of the fft response.</p>
+the matrix which is a vector containing the real values of the <code>fft</code> response.</p>
 <p>The plot of the real values of the <code>fft</code> response is shown below. Notice there are two
 peaks on opposite sides of the plot. The plot is actually showing a mirrored response. The right side
 of the plot is an exact mirror of the left side. This is expected when the <code>fft</code> is run on real rather than
@@ -2158,30 +1834,17 @@ complex data.</p>
 <p>Also notice that the <code>fft</code> has accumulated significant power in a single peak. This is the power associated with
 the specific frequency of the sine wave. The vast majority of frequencies in the plot have close to 0 power
 associated with them. This <code>fft</code> shows a clear signal with very low levels of noise.</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-text" data-lang="text"><pre class="highlight"><code>let(a=oscillate(1, 0.28, 1.57),
-    b=predict(a, sequence(256, 0, 1)),
-    c=fft(b),
-    d=rowAt(c, 0))</code></pre></code></pre></div>
 <div class="imageblock"><img src="images/math-expressions/signal-fft.png" alt="signal fft"></div>
 <p>In the second example the <code>fft</code> function is called on a vector of random data similar to one used in the
 autocorrelation example. The plot of the real values of the <code>fft</code> response is shown below.</p>
 <p>Notice that in is this response there is no clear peak. Instead all frequencies have accumulated a random level of
 power. This <code>fft</code> shows no clear sign of signal and appears to be noise.</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-text" data-lang="text"><pre class="highlight"><code>let(a=sample(uniformDistribution(-1.5, 1.5), 256),
-    b=fft(a),
-    c=rowAt(b, 0))</code></pre></code></pre></div>
 <div class="imageblock"><img src="images/math-expressions/noise-fft.png" alt="noise fft"></div>
 <p>In the third example the <code>fft</code> function is called on the same signal hidden within noise that was used for
 the autocorrelation example. The plot of the real values of the <code>fft</code> response is shown below.</p>
 <p>Notice that there are two clear mirrored peaks, at the same locations as the <code>fft</code> of the pure signal. But
 there is also now considerable noise on the frequencies. The <code>fft</code> has found the signal and but also
 shows that there is considerable noise along with the signal.</p>
-<div class="listingblock"><pre class="rouge highlight"><code class="language-text" data-lang="text"><pre class="highlight"><code>let(a=oscillate(1, 0.28, 1.57),
-    b=predict(a, sequence(256, 0, 1)),
-    c=sample(uniformDistribution(-1.5, 1.5), 256),
-    d=ebeAdd(b, c),
-    e=fft(d),
-    f=rowAt(e, 0))</code></pre></code></pre></div>
 <div class="imageblock"><img src="images/math-expressions/hidden-signal-fft.png" alt="hidden signal fft"></div></section></section>
   </section>
 
@@ -2197,10 +1860,10 @@ shows that there is considerable noise a
     <nav class="scrollnav row">
       <div class="col-lg-12">
       
-      <a class="btn btn-primary prev float-left" href="curve-fitting.html">Curve Fitting</a>
+      <a class="btn btn-primary prev float-left" href="numerical-analysis.html">Interpolation, Derivatives and Integrals</a>
       
       
-      <a class="btn btn-primary next float-right" href="machine-learning.html">Machine Learning</a>
+      <a class="btn btn-primary next float-right" href="simulations.html">Monte Carlo Simulations</a>
       
       </div>
    </nav>
@@ -2212,7 +1875,7 @@ shows that there is considerable noise a
             <div class="row">
                 <div class="col-lg-12 footer">
                &copy;2021 Apache Software Foundation. All rights reserved. <br />
- Site Version: 8.8-DRAFT <br />Site last generated: 2021-01-19 <br />
+ Site Version: 8.8 <br />Site last generated: 2021-01-28 <br />
 <p><img src="images/solr-sunOnly-small.png" alt="Apache Solr"/></p>
                 </div>
             </div>

Modified: websites/production/lucene/content/solr/guide/8_8/dynamic-fields.html
==============================================================================
--- websites/production/lucene/content/solr/guide/8_8/dynamic-fields.html (original)
+++ websites/production/lucene/content/solr/guide/8_8/dynamic-fields.html Thu Jan 28 16:33:25 2021
@@ -8,7 +8,7 @@
 <meta name="description" content="">
 <meta name="keywords" content=" ">
 
-<title>Dynamic Fields | Apache Solr Reference Guide 8.8-DRAFT</title>
+<title>Dynamic Fields | Apache Solr Reference Guide 8.8</title>
 
 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
 <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
@@ -68,7 +68,7 @@
 
     </script>
 </head>
-<body class="DRAFT" id="dynamic-fields">
+<body class="" id="dynamic-fields">
 <div class="container-fluid">
   <div class="row">
   <nav id="sidebar" class="col-2 d-none d-md-block">
@@ -76,11 +76,6 @@
 <div class="sidebar-header">
   <div class="sidebarTitle text-center">Apache Solr Reference Guide</div>
   
-  <p class="draft-notice">
-    This is an unofficial DRAFT of the Guide for 8.8.
-    <a href="https://lucene.apache.org/solr/guide/">Official releases are available from the Solr website</a>.
-  </p>
-  
 
   <!--comment out this block if you want to hide search-->
     <!--start search-->
@@ -872,11 +867,36 @@
       </li>
       
       <li class="sb-level2">
-        <a href="math-expressions.html">Math Expressions</a>
+        <a href="math-expressions.html">Streaming Expressions and Math Expressions</a>
         
         <ul>
           
           <li class="sb-level3">
+            <a href="visualization.html">Visualization</a>
+            
+          </li>
+          
+          <li class="sb-level3">
+            <a href="math-start.html">Getting Started</a>
+            
+          </li>
+          
+          <li class="sb-level3">
+            <a href="loading.html">Loading Data</a>
+            
+          </li>
+          
+          <li class="sb-level3">
+            <a href="search-sample.html">Searching, Sampling and Aggregation</a>
+            
+          </li>
+          
+          <li class="sb-level3">
+            <a href="transform.html">Transforming Data</a>
+            
+          </li>
+          
+          <li class="sb-level3">
             <a href="scalar-math.html">Scalar Math</a>
             
           </li>
@@ -897,12 +917,12 @@
           </li>
           
           <li class="sb-level3">
-            <a href="vectorization.html">Streams and Vectorization</a>
+            <a href="term-vectors.html">Text Analysis and Term Vectors</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="term-vectors.html">Text Analysis and Term Vectors</a>
+            <a href="probability-distributions.html">Probability Distributions</a>
             
           </li>
           
@@ -912,12 +932,12 @@
           </li>
           
           <li class="sb-level3">
-            <a href="probability-distributions.html">Probability Distributions</a>
+            <a href="regression.html">Linear Regression</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="simulations.html">Monte Carlo Simulations</a>
+            <a href="curve-fitting.html">Curve Fitting</a>
             
           </li>
           
@@ -927,32 +947,32 @@
           </li>
           
           <li class="sb-level3">
-            <a href="regression.html">Linear Regression</a>
+            <a href="numerical-analysis.html">Interpolation, Derivatives and Integrals</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="numerical-analysis.html">Interpolation, Derivatives and Integrals</a>
+            <a href="dsp.html">Digital Signal Processing</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="curve-fitting.html">Curve Fitting</a>
+            <a href="simulations.html">Monte Carlo Simulations</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="dsp.html">Digital Signal Processing</a>
+            <a href="machine-learning.html">Machine Learning</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="machine-learning.html">Machine Learning</a>
+            <a href="computational-geometry.html">Computational Geometry</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="computational-geometry.html">Computational Geometry</a>
+            <a href="logs.html">Log Analytics</a>
             
           </li>
           
@@ -1694,7 +1714,7 @@
             <div class="row">
                 <div class="col-lg-12 footer">
                &copy;2021 Apache Software Foundation. All rights reserved. <br />
- Site Version: 8.8-DRAFT <br />Site last generated: 2021-01-19 <br />
+ Site Version: 8.8 <br />Site last generated: 2021-01-28 <br />
 <p><img src="images/solr-sunOnly-small.png" alt="Apache Solr"/></p>
                 </div>
             </div>

Modified: websites/production/lucene/content/solr/guide/8_8/enabling-ssl.html
==============================================================================
--- websites/production/lucene/content/solr/guide/8_8/enabling-ssl.html (original)
+++ websites/production/lucene/content/solr/guide/8_8/enabling-ssl.html Thu Jan 28 16:33:25 2021
@@ -8,7 +8,7 @@
 <meta name="description" content="">
 <meta name="keywords" content=" ">
 
-<title>Enabling SSL | Apache Solr Reference Guide 8.8-DRAFT</title>
+<title>Enabling SSL | Apache Solr Reference Guide 8.8</title>
 
 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
 <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
@@ -68,7 +68,7 @@
 
     </script>
 </head>
-<body class="DRAFT" id="enabling-ssl">
+<body class="" id="enabling-ssl">
 <div class="container-fluid">
   <div class="row">
   <nav id="sidebar" class="col-2 d-none d-md-block">
@@ -76,11 +76,6 @@
 <div class="sidebar-header">
   <div class="sidebarTitle text-center">Apache Solr Reference Guide</div>
   
-  <p class="draft-notice">
-    This is an unofficial DRAFT of the Guide for 8.8.
-    <a href="https://lucene.apache.org/solr/guide/">Official releases are available from the Solr website</a>.
-  </p>
-  
 
   <!--comment out this block if you want to hide search-->
     <!--start search-->
@@ -872,11 +867,36 @@
       </li>
       
       <li class="sb-level2">
-        <a href="math-expressions.html">Math Expressions</a>
+        <a href="math-expressions.html">Streaming Expressions and Math Expressions</a>
         
         <ul>
           
           <li class="sb-level3">
+            <a href="visualization.html">Visualization</a>
+            
+          </li>
+          
+          <li class="sb-level3">
+            <a href="math-start.html">Getting Started</a>
+            
+          </li>
+          
+          <li class="sb-level3">
+            <a href="loading.html">Loading Data</a>
+            
+          </li>
+          
+          <li class="sb-level3">
+            <a href="search-sample.html">Searching, Sampling and Aggregation</a>
+            
+          </li>
+          
+          <li class="sb-level3">
+            <a href="transform.html">Transforming Data</a>
+            
+          </li>
+          
+          <li class="sb-level3">
             <a href="scalar-math.html">Scalar Math</a>
             
           </li>
@@ -897,12 +917,12 @@
           </li>
           
           <li class="sb-level3">
-            <a href="vectorization.html">Streams and Vectorization</a>
+            <a href="term-vectors.html">Text Analysis and Term Vectors</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="term-vectors.html">Text Analysis and Term Vectors</a>
+            <a href="probability-distributions.html">Probability Distributions</a>
             
           </li>
           
@@ -912,12 +932,12 @@
           </li>
           
           <li class="sb-level3">
-            <a href="probability-distributions.html">Probability Distributions</a>
+            <a href="regression.html">Linear Regression</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="simulations.html">Monte Carlo Simulations</a>
+            <a href="curve-fitting.html">Curve Fitting</a>
             
           </li>
           
@@ -927,32 +947,32 @@
           </li>
           
           <li class="sb-level3">
-            <a href="regression.html">Linear Regression</a>
+            <a href="numerical-analysis.html">Interpolation, Derivatives and Integrals</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="numerical-analysis.html">Interpolation, Derivatives and Integrals</a>
+            <a href="dsp.html">Digital Signal Processing</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="curve-fitting.html">Curve Fitting</a>
+            <a href="simulations.html">Monte Carlo Simulations</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="dsp.html">Digital Signal Processing</a>
+            <a href="machine-learning.html">Machine Learning</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="machine-learning.html">Machine Learning</a>
+            <a href="computational-geometry.html">Computational Geometry</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="computational-geometry.html">Computational Geometry</a>
+            <a href="logs.html">Log Analytics</a>
             
           </li>
           
@@ -1952,7 +1972,7 @@ java -Djavax.net.ssl.keyStorePassword<sp
             <div class="row">
                 <div class="col-lg-12 footer">
                &copy;2021 Apache Software Foundation. All rights reserved. <br />
- Site Version: 8.8-DRAFT <br />Site last generated: 2021-01-19 <br />
+ Site Version: 8.8 <br />Site last generated: 2021-01-28 <br />
 <p><img src="images/solr-sunOnly-small.png" alt="Apache Solr"/></p>
                 </div>
             </div>

Modified: websites/production/lucene/content/solr/guide/8_8/errata.html
==============================================================================
--- websites/production/lucene/content/solr/guide/8_8/errata.html (original)
+++ websites/production/lucene/content/solr/guide/8_8/errata.html Thu Jan 28 16:33:25 2021
@@ -8,7 +8,7 @@
 <meta name="description" content="">
 <meta name="keywords" content=" ">
 
-<title>Errata | Apache Solr Reference Guide 8.8-DRAFT</title>
+<title>Errata | Apache Solr Reference Guide 8.8</title>
 
 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
 <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
@@ -68,7 +68,7 @@
 
     </script>
 </head>
-<body class="DRAFT" id="errata">
+<body class="" id="errata">
 <div class="container-fluid">
   <div class="row">
   <nav id="sidebar" class="col-2 d-none d-md-block">
@@ -76,11 +76,6 @@
 <div class="sidebar-header">
   <div class="sidebarTitle text-center">Apache Solr Reference Guide</div>
   
-  <p class="draft-notice">
-    This is an unofficial DRAFT of the Guide for 8.8.
-    <a href="https://lucene.apache.org/solr/guide/">Official releases are available from the Solr website</a>.
-  </p>
-  
 
   <!--comment out this block if you want to hide search-->
     <!--start search-->
@@ -872,11 +867,36 @@
       </li>
       
       <li class="sb-level2">
-        <a href="math-expressions.html">Math Expressions</a>
+        <a href="math-expressions.html">Streaming Expressions and Math Expressions</a>
         
         <ul>
           
           <li class="sb-level3">
+            <a href="visualization.html">Visualization</a>
+            
+          </li>
+          
+          <li class="sb-level3">
+            <a href="math-start.html">Getting Started</a>
+            
+          </li>
+          
+          <li class="sb-level3">
+            <a href="loading.html">Loading Data</a>
+            
+          </li>
+          
+          <li class="sb-level3">
+            <a href="search-sample.html">Searching, Sampling and Aggregation</a>
+            
+          </li>
+          
+          <li class="sb-level3">
+            <a href="transform.html">Transforming Data</a>
+            
+          </li>
+          
+          <li class="sb-level3">
             <a href="scalar-math.html">Scalar Math</a>
             
           </li>
@@ -897,12 +917,12 @@
           </li>
           
           <li class="sb-level3">
-            <a href="vectorization.html">Streams and Vectorization</a>
+            <a href="term-vectors.html">Text Analysis and Term Vectors</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="term-vectors.html">Text Analysis and Term Vectors</a>
+            <a href="probability-distributions.html">Probability Distributions</a>
             
           </li>
           
@@ -912,12 +932,12 @@
           </li>
           
           <li class="sb-level3">
-            <a href="probability-distributions.html">Probability Distributions</a>
+            <a href="regression.html">Linear Regression</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="simulations.html">Monte Carlo Simulations</a>
+            <a href="curve-fitting.html">Curve Fitting</a>
             
           </li>
           
@@ -927,32 +947,32 @@
           </li>
           
           <li class="sb-level3">
-            <a href="regression.html">Linear Regression</a>
+            <a href="numerical-analysis.html">Interpolation, Derivatives and Integrals</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="numerical-analysis.html">Interpolation, Derivatives and Integrals</a>
+            <a href="dsp.html">Digital Signal Processing</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="curve-fitting.html">Curve Fitting</a>
+            <a href="simulations.html">Monte Carlo Simulations</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="dsp.html">Digital Signal Processing</a>
+            <a href="machine-learning.html">Machine Learning</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="machine-learning.html">Machine Learning</a>
+            <a href="computational-geometry.html">Computational Geometry</a>
             
           </li>
           
           <li class="sb-level3">
-            <a href="computational-geometry.html">Computational Geometry</a>
+            <a href="logs.html">Log Analytics</a>
             
           </li>
           
@@ -1695,7 +1715,7 @@
             <div class="row">
                 <div class="col-lg-12 footer">
                &copy;2021 Apache Software Foundation. All rights reserved. <br />
- Site Version: 8.8-DRAFT <br />Site last generated: 2021-01-19 <br />
+ Site Version: 8.8 <br />Site last generated: 2021-01-28 <br />
 <p><img src="images/solr-sunOnly-small.png" alt="Apache Solr"/></p>
                 </div>
             </div>