You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by sv...@apache.org on 2023/07/21 18:07:51 UTC
svn commit: r1083697 [39/43] - in /sites/solr/guide: ./ solr/9_0/ solr/9_0/configuration-guide/ solr/9_0/deployment-guide/ solr/9_0/getting-started/ solr/9_0/indexing-guide/ solr/9_0/query-guide/ solr/9_0/upgrade-notes/ solr/9_1/ solr/9_1/configuration...
Modified: sites/solr/guide/solr/latest/query-guide/learning-to-rank.html
URL: http://svn.apache.org/viewvc/sites/solr/guide/solr/latest/query-guide/learning-to-rank.html?rev=1083697&r1=1083696&r2=1083697&view=diff
==============================================================================
--- sites/solr/guide/solr/latest/query-guide/learning-to-rank.html (original)
+++ sites/solr/guide/solr/latest/query-guide/learning-to-rank.html Fri Jul 21 18:07:42 2023
@@ -39,7 +39,7 @@
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link" href="#">Resources</a>
<div class="navbar-dropdown">
- <a class="navbar-item" href="https://solr.apache.org/docs/9_2_1/index.html" target="_blank" rel="noreferrer nopener">Solr Javadocs</a>
+ <a class="navbar-item" href="https://solr.apache.org/docs/9_3_0/index.html" target="_blank" rel="noreferrer nopener">Solr Javadocs</a>
<a class="navbar-item" href="https://solr.apache.org/community.html#version-control" target="_blank" rel="noreferrer nopener">Source Code</a>
<a class="navbar-item" href="https://solr.apache.org/community.html" target="_blank" rel="noreferrer nopener">Community Links</a>
<a class="navbar-item" href="https://github.com/apache/solr/tree/main/dev-docs/ref-guide" target="_blank" rel="noreferrer nopener">Contribute</a>
@@ -56,25 +56,25 @@
</nav>
</header>
<div class="body">
-<div class="nav-container" data-component="solr" data-version="9_2">
+<div class="nav-container" data-component="solr" data-version="9_3">
<aside class="nav">
<div class="panels">
<!-- Solr Changes - Start -->
<div class="nav-panel-explore" data-panel="explore">
<div class="context">
<span class="title">Solr Reference Guide</span>
- <span class="version">9.2</span>
+ <span class="version">9.3</span>
</div>
<!-- Programmatically creates the component and version list -->
<ul class="components">
<li class="component is-current">
<a class="title" href="../index.html">Solr Reference Guide</a>
<ul class="versions">
- <li class="version">
- <a href="../../9_3/index.html">9.3-beta</a>
- </li>
<li class="version is-current is-latest">
- <a href="../index.html">9.2</a>
+ <a href="../index.html">9.3</a>
+ </li>
+ <li class="version">
+ <a href="../../9_2/index.html">9.2</a>
</li>
<li class="version">
<a href="../../9_1/index.html">9.1</a>
@@ -211,7 +211,7 @@
<a class="nav-link" href="../getting-started/tutorial-films.html">Exercise 2: Index Films Data</a>
</li>
<li class="nav-item" data-depth="2">
- <a class="nav-link" href="../getting-started/tutorial-diy.html">Exercise 3 Index Your Own Data</a>
+ <a class="nav-link" href="../getting-started/tutorial-diy.html">Exercise 3: Index Your Own Data</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../getting-started/tutorial-solrcloud.html">Getting Started with SolrCloud</a>
@@ -718,6 +718,9 @@
</ul>
</li>
<li class="nav-item" data-depth="2">
+ <a class="nav-link" href="../indexing-guide/indexing-with-cbor.html">Indexing with Update CBOR data format</a>
+ </li>
+ <li class="nav-item" data-depth="2">
<a class="nav-link" href="../indexing-guide/indexing-with-tika.html">Indexing with Solr Cell and Apache Tika</a>
</li>
<li class="nav-item" data-depth="2">
@@ -1070,17 +1073,17 @@
</ul>
</nav>
<div class="page-versions">
- <button class="version-menu-toggle" title="Show other versions of page">9.2</button>
+ <button class="version-menu-toggle" title="Show other versions of page">9.3</button>
<div class="version-menu">
- <a class="version" href="../../9_3/query-guide/learning-to-rank.html">9.3-beta</a>
- <a class="version is-current" href="learning-to-rank.html">9.2</a>
+ <a class="version is-current" href="learning-to-rank.html">9.3</a>
+ <a class="version" href="../../9_2/query-guide/learning-to-rank.html">9.2</a>
<a class="version" href="../../9_1/query-guide/learning-to-rank.html">9.1</a>
<a class="version" href="../../9_0/query-guide/learning-to-rank.html">9.0</a>
</div>
</div>
<!-- Solr Additions - Start -->
<!-- Solr New File -->
-<span class="perma-link-copy" version="9_2">
+<span class="perma-link-copy" version="9_3">
</span><!-- Solr Additions - End -->
<div class="edit-this-page"><a href="https://github.com/apache/solr/tree/main/solr/solr-ref-guide/modules/query-guide/pages/learning-to-rank.adoc">Edit this Page</a></div>
</div>
@@ -1097,7 +1100,7 @@
<p>With the <strong>Learning To Rank</strong> (or <strong>LTR</strong> for short) module you can configure and run machine learned ranking models in Solr.</p>
</div>
<div class="paragraph">
-<p>The module also supports feature extraction inside Solr.
+<p>The module also supports feature logging inside Solr.
The only thing you need to do outside Solr is train your own ranking model.</p>
</div>
</div>
@@ -1193,49 +1196,49 @@ The process of <a href="https://en.wikip
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">field length</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/feature/FieldLengthFeature.html">FieldLengthFeature</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/feature/FieldLengthFeature.html">FieldLengthFeature</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>{"field":"title"}</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">not (yet) supported</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">field value</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/feature/FieldValueFeature.html">FieldValueFeature</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/feature/FieldValueFeature.html">FieldValueFeature</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>{"field":"hits"}</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">not (yet) supported</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">original score</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/feature/OriginalScoreFeature.html">OriginalScoreFeature</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/feature/OriginalScoreFeature.html">OriginalScoreFeature</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>{}</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">not applicable</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">solr query</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/feature/SolrFeature.html">SolrFeature</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/feature/SolrFeature.html">SolrFeature</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>{"q":"{!func}</code> <code>recip(ms(NOW,last_modified)</code> <code>,3.16e-11,1,1)"}</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">supported</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">solr filter query</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/feature/SolrFeature.html">SolrFeature</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/feature/SolrFeature.html">SolrFeature</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>{"fq":["{!terms f=category}book"]}</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">supported</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">solr query + filter query</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/feature/SolrFeature.html">SolrFeature</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/feature/SolrFeature.html">SolrFeature</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>{"q":"{!func}</code> <code>recip(ms(NOW,last_modified),</code> <code>3.16e-11,1,1)",</code> <code>"fq":["{!terms f=category}book"]}</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">supported</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">value</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/feature/ValueFeature.html">ValueFeature</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/feature/ValueFeature.html">ValueFeature</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>{"value":"${userFromMobile}","required":true}</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">supported</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">(custom)</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">(custom class extending <a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/feature/Feature.html">Feature</a>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">(custom class extending <a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/feature/Feature.html">Feature</a>)</p></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
@@ -1257,29 +1260,29 @@ The process of <a href="https://en.wikip
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Identity</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/norm/IdentityNormalizer.html">IdentityNormalizer</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/norm/IdentityNormalizer.html">IdentityNormalizer</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>{}</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">MinMax</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/norm/MinMaxNormalizer.html">MinMaxNormalizer</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/norm/MinMaxNormalizer.html">MinMaxNormalizer</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>{"min":"0", "max":"50" }</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Standard</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/norm/StandardNormalizer.html">StandardNormalizer</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/norm/StandardNormalizer.html">StandardNormalizer</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>{"avg":"42","std":"6"}</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">(custom)</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">(custom class extending <a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/norm/Normalizer.html">Normalizer</a>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">(custom class extending <a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/norm/Normalizer.html">Normalizer</a>)</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
</tbody>
</table>
</div>
<div class="sect3">
-<h4 id="feature-extraction"><a class="anchor" href="#feature-extraction"></a>Feature Extraction</h4>
+<h4 id="feature-logging"><a class="anchor" href="#feature-logging"></a>Feature Logging</h4>
<div class="paragraph">
<p>The ltr module includes a <a href="document-transformers.html" class="xref page"><code>[features]</code> transformer</a> to support the calculation and return of feature values for <a href="https://en.wikipedia.org/wiki/Feature_extraction">feature extraction</a> purposes including and especially when you do not yet have an actual reranking model.</p>
</div>
@@ -1308,32 +1311,32 @@ In the form of JSON files your trained m
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Linear</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/model/LinearModel.html">LinearModel</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/model/LinearModel.html">LinearModel</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">RankSVM, Pranking</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Multiple Additive Trees</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/model/MultipleAdditiveTreesModel.html">MultipleAdditiveTreesModel</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/model/MultipleAdditiveTreesModel.html">MultipleAdditiveTreesModel</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">LambdaMART, Gradient Boosted Regression Trees (GBRT)</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Neural Network</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/model/NeuralNetworkModel.html">NeuralNetworkModel</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/model/NeuralNetworkModel.html">NeuralNetworkModel</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">RankNet</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">(wrapper)</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/model/DefaultWrapperModel.html">DefaultWrapperModel</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/model/DefaultWrapperModel.html">DefaultWrapperModel</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">(not applicable)</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">(custom)</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">(custom class extending <a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/model/AdapterModel.html">AdapterModel</a>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">(custom class extending <a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/model/AdapterModel.html">AdapterModel</a>)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">(not applicable)</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">(custom)</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">(custom class extending <a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/model/LTRScoringModel.html">LTRScoringModel</a>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">(custom class extending <a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/model/LTRScoringModel.html">LTRScoringModel</a>)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">(not applicable)</p></td>
</tr>
</tbody>
@@ -1351,6 +1354,273 @@ In the form of JSON files your trained m
</div>
</div>
<div class="sect1">
+<h2 id="installation-of-ltr"><a class="anchor" href="#installation-of-ltr"></a>Installation of LTR</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The ltr module requires the <code>modules/ltr/lib/solr-ltr-*.jar</code> JARs.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="ltr-configuration"><a class="anchor" href="#ltr-configuration"></a>LTR Configuration</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Learning-To-Rank is a module and therefore its plugins must be configured in <code>solrconfig.xml</code>.</p>
+</div>
+<div class="sect2">
+<h3 id="minimum-requirements"><a class="anchor" href="#minimum-requirements"></a>Minimum Requirements</h3>
+<div class="ulist">
+<ul>
+<li>
+<p>Include the required module JARs.
+Note that by default paths are relative to the Solr core, so they may need adjustments to your configuration, or an explicit specification of the <code>$solr.install.dir</code>.</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml"><lib dir="${solr.install.dir:../../../..}/modules/ltr/lib/" regex=".*\.jar" /></code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>Declaration of the <code>ltr</code> query parser.</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml"><queryParser name="ltr" class="org.apache.solr.ltr.search.LTRQParserPlugin"/></code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>Configuration of the feature values cache.</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml"><cache name="QUERY_DOC_FV"
+ class="solr.search.CaffeineCache"
+ size="4096"
+ initialSize="2048"
+ autowarmCount="4096"
+ regenerator="solr.search.NoOpRegenerator" /></code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>Declaration of the <code>[features]</code> transformer.</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml"><transformer name="features" class="org.apache.solr.ltr.response.transform.LTRFeatureLoggerTransformerFactory">
+ <str name="fvCacheName">QUERY_DOC_FV</str>
+</transformer></code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>Declaration of the <code>[interleaving]</code> transformer.</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml"><transformer name="interleaving" class="org.apache.solr.ltr.response.transform.LTRInterleavingTransformerFactory"/></code></pre>
+</div>
+</div>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="ltr-lifecycle"><a class="anchor" href="#ltr-lifecycle"></a>LTR Lifecycle</h2>
+<div class="sectionbody">
+<div class="sect2">
+<h3 id="feature-stores"><a class="anchor" href="#feature-stores"></a>Feature Stores</h3>
+<div class="paragraph">
+<p>It is recommended that you organise all your features into stores which are akin to namespaces:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Features within a store must be named uniquely.</p>
+</li>
+<li>
+<p>Across stores identical or similar features can share the same name.</p>
+</li>
+<li>
+<p>If no store name is specified then the default <code>_DEFAULT_</code> feature store will be used.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>To discover the names of all your feature stores:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-text hljs" data-lang="text">http://localhost:8983/solr/techproducts/schema/feature-store</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>To inspect the content of the <code>commonFeatureStore</code> feature store:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-text hljs" data-lang="text">http://localhost:8983/solr/techproducts/schema/feature-store/commonFeatureStore</code></pre>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="models"><a class="anchor" href="#models"></a>Models</h3>
+<div class="ulist">
+<ul>
+<li>
+<p>A model uses features from exactly one feature store.</p>
+</li>
+<li>
+<p>If no store is specified then the default <code>_DEFAULT_</code> feature store will be used.</p>
+</li>
+<li>
+<p>A model need not use all the features defined in a feature store.</p>
+</li>
+<li>
+<p>Multiple models can use the same feature store.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>To log features for <code>currentFeatureStore</code> 's features:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-text hljs" data-lang="text">http://localhost:8983/solr/techproducts/query?q=test&fl=id,score,[features store=currentFeatureStore]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>To log features for <code>nextFeatureStore</code> features whilst reranking with <code>currentModel</code> based on <code>currentFeatureStore</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-text hljs" data-lang="text">http://localhost:8983/solr/techproducts/query?q=test&rq={!ltr model=currentModel reRankDocs=100}&fl=id,score,[features store=nextFeatureStore]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>To view all models:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-text hljs" data-lang="text">http://localhost:8983/solr/techproducts/schema/model-store</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>To delete the <code>currentModel</code> model:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-bash hljs" data-lang="bash">curl -XDELETE 'http://localhost:8983/solr/techproducts/schema/model-store/currentModel'</code></pre>
+</div>
+</div>
+<div class="admonitionblock important">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-important" title="Important"></i>
+</td>
+<td class="content">
+A feature store may be deleted only when there are no models using it.
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>To delete the <code>currentFeatureStore</code> feature store:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-bash hljs" data-lang="bash">curl -XDELETE 'http://localhost:8983/solr/techproducts/schema/feature-store/currentFeatureStore'</code></pre>
+</div>
+</div>
+<div class="sect3">
+<h4 id="using-large-models"><a class="anchor" href="#using-large-models"></a>Using Large Models</h4>
+<div class="paragraph">
+<p>With SolrCloud, large models may fail to upload due to the limitation of ZooKeeper’s buffer.
+In this case, <code>DefaultWrapperModel</code> may help you to separate the model definition from uploaded file.</p>
+</div>
+<div class="paragraph">
+<p>Assuming that you consider to use a large model placed at <code>/path/to/models/myModel.json</code> through <code>DefaultWrapperModel</code>.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-json hljs" data-lang="json">{
+ "store" : "largeModelsFeatureStore",
+ "name" : "myModel",
+ "class" : "...",
+ "features" : [
+ "..."
+ ],
+ "params" : {
+ "...": "..."
+ }
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>First, add the directory to Solr’s resource paths with a <a href="../configuration-guide/libs.html#lib-directives-in-solrconfig" class="xref page"><code><lib/></code> directive</a>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml"> <lib dir="/path/to" regex="models" /></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Then, configure <code>DefaultWrapperModel</code> to wrap <code>myModel.json</code>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-json hljs" data-lang="json">{
+ "store" : "largeModelsFeatureStore",
+ "name" : "myWrapperModel",
+ "class" : "org.apache.solr.ltr.model.DefaultWrapperModel",
+ "params" : {
+ "resource" : "myModel.json"
+ }
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p><code>myModel.json</code> will be loaded during the initialization and be able to use by specifying <code>model=myWrapperModel</code>.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+No <code>"features"</code> are configured in <code>myWrapperModel</code> because the features of the wrapped model (<code>myModel</code>) will be used; also note that the <code>"store"</code> configured for the wrapper model must match that of the wrapped model i.e., in this example the feature store called <code>largeModelsFeatureStore</code> is used.
+</td>
+</tr>
+</table>
+</div>
+<div class="admonitionblock caution">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-caution" title="Caution"></i>
+</td>
+<td class="content">
+<code><lib dir="/path/to/models" regex=".*\.json" /></code> doesn’t work as expected in this case, because <code>SolrResourceLoader</code> considers given resources as JAR if <code><lib /></code> indicates files.
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>As an alternative to the above-described <code>DefaultWrapperModel</code>, it is possible to <a href="../deployment-guide/zookeeper-ensemble.html#increasing-the-file-size-limit" class="xref page">increase ZooKeeper’s file size limit</a>.</p>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="applying-changes"><a class="anchor" href="#applying-changes"></a>Applying Changes</h3>
+<div class="paragraph">
+<p>The feature store and the model store are both <a href="../configuration-guide/managed-resources.html" class="xref page">Managed Resources</a>.
+Changes made to managed resources are not applied to the active Solr components until the Solr collection (or Solr core in single server mode) is reloaded.</p>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
<h2 id="quick-start-with-ltr"><a class="anchor" href="#quick-start-with-ltr"></a>Quick Start with LTR</h2>
<div class="sectionbody">
<div class="paragraph">
@@ -1410,9 +1680,9 @@ In the form of JSON files your trained m
</div>
</div>
<div class="sect2">
-<h3 id="extracting-features"><a class="anchor" href="#extracting-features"></a>Extracting Features</h3>
+<h3 id="logging-features"><a class="anchor" href="#logging-features"></a>Logging Features</h3>
<div class="paragraph">
-<p>To extract features as part of a query, add <code>[features]</code> to the <code>fl</code> parameter, for example:</p>
+<p>To log features as part of a query, add <code>[features]</code> to the <code>fl</code> parameter, for example:</p>
</div>
<div class="listingblock">
<div class="content">
@@ -1443,6 +1713,147 @@ In the form of JSON files your trained m
}}</code></pre>
</div>
</div>
+<div class="sect3">
+<h4 id="feature-logging-parameters"><a class="anchor" href="#feature-logging-parameters"></a>Feature Logging Parameters</h4>
+<div class="paragraph">
+<p>The feature logger transformer accepts the parameters described below.
+Examples on how to use them can be found in the <a href="#ltr-examples">LTR Examples</a> section below.</p>
+</div>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><code>store</code></dt>
+<dd>
+<table class="tableblock frame-none grid-all fit-content">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">No Re-Ranking</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Default: <code>_DEFAULT_</code></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Re-Ranking</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Default: model feature store</p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p>This parameter specifies the feature store to use for logging features.</p>
+</div>
+<div class="paragraph">
+<p>In a reranking query, the default feature store used is the model feature store (e.g. <code>[features]</code>).</p>
+</div>
+</dd>
+<dt class="hdlist1"><code>logAll</code></dt>
+<dd>
+<table class="tableblock frame-none grid-all fit-content">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">No Re-Ranking</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Default: <code>true</code></p></td>
+</tr>
+</tbody>
+</table>
+<table class="tableblock frame-none grid-all fit-content">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Re-Ranking</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Logger and Model have same feature store</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Default: <code>false</code></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Re-Ranking</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Logger and Model have different feature store</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Default: <code>true</code></p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p>This parameter specifies the features to log.</p>
+</div>
+<div class="paragraph">
+<p>If set to <code>true</code> all the features from the feature store are printed.</p>
+</div>
+</dd>
+</dl>
+</div>
+<div class="paragraph">
+<p>If set to <code>false</code> only the features used by the model are printed.</p>
+</div>
+<div class="admonitionblock caution">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-caution" title="Caution"></i>
+</td>
+<td class="content">
+When no re-ranking query is passed, only <code>logAll</code> = 'true' is supported. Passing <code>false</code> will cause a Solr exception.
+</td>
+</tr>
+</table>
+</div>
+<div class="admonitionblock caution">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-caution" title="Caution"></i>
+</td>
+<td class="content">
+In a logging scenario where a re-ranking query is passed, if the logger <code>store</code> is different from the model <code>store</code>, only <code>logAll</code> = 'true' is supported. Passing <code>false</code> will cause a Solr exception.
+</td>
+</tr>
+</table>
+</div>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><code>format</code></dt>
+<dd>
+<table class="tableblock frame-none grid-all fit-content">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Default: <code>dense</code></p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p>This parameter specifies the format to use for logging features. The supported values are: <code>dense</code> and <code>sparse</code>.</p>
+</div>
+<div class="paragraph">
+<p>You can change the default behavior to be sparse, putting <code><str name="defaultFormat">sparse</str></code> in the <a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/response/transform/LTRFeatureLoggerTransformerFactory.html">feature logger transformer</a> declaration in <code>solrconfig.xml</code> as follows:</p>
+</div>
+</dd>
+</dl>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml"><transformer name="features" class="org.apache.solr.ltr.response.transform.LTRFeatureLoggerTransformerFactory">
+ <str name="fvCacheName">QUERY_DOC_FV</str>
+ <str name="defaultFormat">sparse</str>
+ <str name="csvKeyValueDelimiter">:</str>
+ <str name="csvFeatureSeparator"> </str>
+</transformer></code></pre>
+</div>
+</div>
+</div>
</div>
<div class="sect2">
<h3 id="uploading-a-model"><a class="anchor" href="#uploading-a-model"></a>Uploading a Model</h3>
@@ -1634,13 +2045,13 @@ To rerank the results of a query, interl
</div>
</div>
<div class="paragraph">
-<p>Currently the only (and default) algorithm supported is 'TeamDraft'.</p>
+<p>Currently, the only (and default) algorithm supported is 'TeamDraft'.</p>
</div>
</div>
<div class="sect2">
<h3 id="external-feature-information"><a class="anchor" href="#external-feature-information"></a>External Feature Information</h3>
<div class="paragraph">
-<p>The <a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/feature/ValueFeature.html">ValueFeature</a> and <a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/feature/SolrFeature.html">SolrFeature</a> classes support the use of external feature information, <code>efi</code> for short.</p>
+<p>The <a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/feature/ValueFeature.html">ValueFeature</a> and <a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/feature/SolrFeature.html">SolrFeature</a> classes support the use of external feature information, <code>efi</code> for short.</p>
</div>
<div class="sect3">
<h4 id="uploading-features-2"><a class="anchor" href="#uploading-features-2"></a>Uploading Features</h4>
@@ -1691,14 +2102,11 @@ To rerank the results of a query, interl
]</code></pre>
</div>
</div>
-<div class="paragraph">
-<p>As an aside, you may have noticed that the <code>myEfiFeatures.json</code> example uses <code>"store":"myEfiFeatureStore"</code> attributes: read more about feature <code>store</code> in the <a href="#ltr-lifecycle">LTR Lifecycle</a> section of this page.</p>
-</div>
</div>
<div class="sect3">
-<h4 id="extracting-features-2"><a class="anchor" href="#extracting-features-2"></a>Extracting Features</h4>
+<h4 id="logging-features-2"><a class="anchor" href="#logging-features-2"></a>Logging Features</h4>
<div class="paragraph">
-<p>To extract <code>myEfiFeatureStore</code> features as part of a query, add <code>efi.*</code> parameters to the <code>[features]</code> part of the <code>fl</code> parameter, for example:</p>
+<p>To log <code>myEfiFeatureStore</code> features as part of a query, add <code>efi.*</code> parameters to the <code>[features]</code> part of the <code>fl</code> parameter, for example:</p>
</div>
<div class="listingblock">
<div class="content">
@@ -1774,9 +2182,9 @@ To rerank the results of a query, interl
</div>
</div>
<div class="sect3">
-<h4 id="extracting-features-while-reranking"><a class="anchor" href="#extracting-features-while-reranking"></a>Extracting Features While Reranking</h4>
+<h4 id="logging-features-while-reranking"><a class="anchor" href="#logging-features-while-reranking"></a>Logging Features While Reranking</h4>
<div class="paragraph">
-<p>To extract features for <code>myEfiFeatureStore</code> features while still reranking with <code>myModel</code>:</p>
+<p>To log features for <code>myEfiFeatureStore</code> features while still reranking with <code>myModel</code>:</p>
</div>
<div class="listingblock">
<div class="content">
@@ -1786,130 +2194,37 @@ To rerank the results of a query, interl
<div class="paragraph">
<p>Notice the absence of <code>efi.*</code> parameters in the <code>rq</code> parameter (because <code>myModel</code> does not use <code>efi</code> feature) and the presence of <code>efi.*</code> parameters in the <code>[features]</code> part of the <code>fl</code> parameter (because <code>myEfiFeatureStore</code> contains <code>efi</code> features).</p>
</div>
-<div class="paragraph">
-<p>Read more about model evolution in the <a href="#ltr-lifecycle">LTR Lifecycle</a> section of this page.</p>
-</div>
</div>
</div>
<div class="sect2">
<h3 id="training-example"><a class="anchor" href="#training-example"></a>Training Example</h3>
<div class="paragraph">
-<p>Example training data and a demo <code>train_and_upload_demo_model.py</code> script can be found in the <code>solr/modules/ltr/example</code> folder in the <a href="https://gitbox.apache.org/repos/asf?p=solr.git;a=tree;f=solr/modules/ltr/example">Apache Solr Git repository</a> (mirrored on <a href="https://github.com/apache/solr/tree/releases/solr/9.2.1/solr/modules/ltr/example">github.com</a>).
+<p>Example training data and a demo <code>train_and_upload_demo_model.py</code> script can be found in the <code>solr/modules/ltr/example</code> folder in the <a href="https://gitbox.apache.org/repos/asf?p=solr.git;a=tree;f=solr/modules/ltr/example">Apache Solr Git repository</a> (mirrored on <a href="https://github.com/apache/solr/tree/releases/solr/9.3.0/solr/modules/ltr/example">github.com</a>).
This example folder is not shipped in the Solr binary release.</p>
</div>
</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="installation-of-ltr"><a class="anchor" href="#installation-of-ltr"></a>Installation of LTR</h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p>The ltr module requires the <code>modules/ltr/lib/solr-ltr-*.jar</code> JARs.</p>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="ltr-configuration"><a class="anchor" href="#ltr-configuration"></a>LTR Configuration</h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p>Learning-To-Rank is a module and therefore its plugins must be configured in <code>solrconfig.xml</code>.</p>
-</div>
-<div class="sect2">
-<h3 id="minimum-requirements"><a class="anchor" href="#minimum-requirements"></a>Minimum Requirements</h3>
-<div class="ulist">
-<ul>
-<li>
-<p>Include the required module JARs.
-Note that by default paths are relative to the Solr core so they may need adjustments to your configuration, or an explicit specification of the <code>$solr.install.dir</code>.</p>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml"><lib dir="${solr.install.dir:../../../..}/modules/ltr/lib/" regex=".*\.jar" /></code></pre>
-</div>
-</div>
-</li>
-<li>
-<p>Declaration of the <code>ltr</code> query parser.</p>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml"><queryParser name="ltr" class="org.apache.solr.ltr.search.LTRQParserPlugin"/></code></pre>
-</div>
-</div>
-</li>
-<li>
-<p>Configuration of the feature values cache.</p>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml"><cache name="QUERY_DOC_FV"
- class="solr.search.CaffeineCache"
- size="4096"
- initialSize="2048"
- autowarmCount="4096"
- regenerator="solr.search.NoOpRegenerator" /></code></pre>
-</div>
-</div>
-</li>
-<li>
-<p>Declaration of the <code>[features]</code> transformer.</p>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml"><transformer name="features" class="org.apache.solr.ltr.response.transform.LTRFeatureLoggerTransformerFactory">
- <str name="fvCacheName">QUERY_DOC_FV</str>
-</transformer></code></pre>
-</div>
-</div>
-</li>
-<li>
-<p>Declaration of the <code>[interleaving]</code> transformer.</p>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml"><transformer name="interleaving" class="org.apache.solr.ltr.response.transform.LTRInterleavingTransformerFactory"/></code></pre>
-</div>
-</div>
-</li>
-</ul>
-</div>
-</div>
<div class="sect2">
<h3 id="advanced-options"><a class="anchor" href="#advanced-options"></a>Advanced Options</h3>
<div class="sect3">
<h4 id="ltrthreadmodule"><a class="anchor" href="#ltrthreadmodule"></a>LTRThreadModule</h4>
<div class="paragraph">
<p>A thread module can be configured for the query parser and/or the transformer to parallelize the creation of feature weights.
-For details, please refer to the <a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/LTRThreadModule.html">LTRThreadModule</a> javadocs.</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="feature-vector-customization"><a class="anchor" href="#feature-vector-customization"></a>Feature Vector Customization</h4>
-<div class="paragraph">
-<p>The features transformer returns dense CSV values such as <code>featureA=0.1,featureB=0.2,featureC=0.3,featureD=0.0</code>.</p>
-</div>
-<div class="paragraph">
-<p>For sparse CSV output such as <code>featureA:0.1 featureB:0.2 featureC:0.3</code> you can customize the <a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/response/transform/LTRFeatureLoggerTransformerFactory.html">feature logger transformer</a> declaration in <code>solrconfig.xml</code> as follows:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml"><transformer name="features" class="org.apache.solr.ltr.response.transform.LTRFeatureLoggerTransformerFactory">
- <str name="fvCacheName">QUERY_DOC_FV</str>
- <str name="defaultFormat">sparse</str>
- <str name="csvKeyValueDelimiter">:</str>
- <str name="csvFeatureSeparator"> </str>
-</transformer></code></pre>
-</div>
+For details, please refer to the <a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/LTRThreadModule.html">LTRThreadModule</a> javadocs.</p>
</div>
</div>
<div class="sect3">
<h4 id="models-handling-features-null-values"><a class="anchor" href="#models-handling-features-null-values"></a>Models handling features' null values</h4>
<div class="paragraph">
-<p>This feature is available only for <a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/model/MultipleAdditiveTreesModel.html">MultipleAdditiveTreesModel</a>.</p>
+<p>This feature is available only for <a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/model/MultipleAdditiveTreesModel.html">MultipleAdditiveTreesModel</a>.</p>
</div>
<div class="paragraph">
-<p>In some scenarios a null value for a feature has a different meaning than a zero value. There are models that are trained to distinguish the two (e.g. <a href="https://xgboost.readthedocs.io/en/stable/faq.html#how-to-deal-with-missing-values" class="bare">https://xgboost.readthedocs.io/en/stable/faq.html#how-to-deal-with-missing-values</a>), in Solr an additional <code>"missing"</code> branch parameter has been introduced to support this feature.</p>
+<p>In some scenarios a null value for a feature has a different meaning than a zero value. There are models that are trained to distinguish the two (e.g. <a href="https://xgboost.readthedocs.io/en/stable/faq.html#how-to-deal-with-missing-values" class="bare">https://xgboost.readthedocs.io/en/stable/faq.html#how-to-deal-with-missing-values</a>), in Solr an additional <code>missing</code> branch parameter has been introduced to support this feature.</p>
</div>
<div class="paragraph">
<p>This defines the branch to follow when the corresponding feature value is null. With the default configuration a null and a zero value have the same meaning.</p>
</div>
<div class="paragraph">
-<p>To handle null values, the <code>"myFeatures.json"</code> file needs to be modified. A <code>"defaultValue"</code> parameter with a <code>"NaN"</code> value needs to be added to each feature that can assume a null value.</p>
+<p>To handle null values, the <code>myFeatures.json</code> file needs to be modified. A <code>defaultValue</code> parameter with a <code>NaN</code> value needs to be added to each feature that can assume a null value.</p>
</div>
<div class="listingblock">
<div class="title">Example: /path/myFeatures.json</div>
@@ -1939,10 +2254,10 @@ For details, please refer to the <a href
<div class="ulist">
<ul>
<li>
-<p><code>"isNullSameAsZero"</code> needs to be defined in the model <code>"params"</code> and set to <code>"false"</code>;</p>
+<p><code>isNullSameAsZero</code> needs to be defined in the model <code>params</code> and set to <code>false</code>;</p>
</li>
<li>
-<p>the <code>"missing"</code> parameter needs to be added to each branch where the corresponding feature supports null values. This can assume one value between <code>"left"</code> and <code>"right"</code>.</p>
+<p>the <code>missing</code> parameter needs to be added to each branch where the corresponding feature supports null values. This can assume one value between <code>left</code> and <code>right</code>.</p>
</li>
</ul>
</div>
@@ -1986,7 +2301,7 @@ For details, please refer to the <a href
</div>
</div>
<div class="paragraph">
-<p>When isNullSameAsZero is <code>"false"</code> for your model, the feature vector changes.</p>
+<p>When <code>isNullSameAsZero</code> is <code>false</code> for your model, the feature vector changes.</p>
</div>
<div class="ulist">
<ul>
@@ -2002,8 +2317,7 @@ For details, please refer to the <a href
<p>e.g.</p>
</div>
<div class="paragraph">
-<p>given the features defined in <a href="#models-handling-features-null-values">Models handling features' null values</a>.
-If their values are <code>matchedTitle=0</code> and <code>productReviewScore=0</code>, the sparse format will return <code>productReviewScore:0</code> (0 is the default value of <code>matchedTitle=0</code> and therefore it is not returned, 0 is not the default value of <code>productReviewScore=0</code> and therefore it is returned).</p>
+<p>given the features defined before; if their values are <code>matchedTitle=0</code> and <code>productReviewScore=0</code>, the sparse format will return <code>productReviewScore:0</code> (0 is the default value of <code>matchedTitle=0</code> and therefore it is not returned, 0 is not the default value of <code>productReviewScore=0</code> and therefore it is returned).</p>
</div>
</div>
<div class="sect3">
@@ -2012,7 +2326,7 @@ If their values are <code>matchedTitle=0
<dl>
<dt class="hdlist1">How does Solr Learning-To-Rank work under the hood?</dt>
<dd>
-<p>Please refer to the <code>ltr</code> <a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/package-summary.html">javadocs</a> for an implementation overview.</p>
+<p>Please refer to the <code>ltr</code> <a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/package-summary.html">javadocs</a> for an implementation overview.</p>
</dd>
<dt class="hdlist1">How could I write additional models and/or features?</dt>
<dd>
@@ -2021,16 +2335,16 @@ Related links:</p>
<div class="ulist">
<ul>
<li>
-<p><a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/model/LTRScoringModel.html">LTRScoringModel javadocs</a></p>
+<p><a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/model/LTRScoringModel.html">LTRScoringModel javadocs</a></p>
</li>
<li>
-<p><a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/feature/Feature.html">Feature javadocs</a></p>
+<p><a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/feature/Feature.html">Feature javadocs</a></p>
</li>
<li>
-<p><a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/norm/Normalizer.html">Normalizer javadocs</a></p>
+<p><a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/norm/Normalizer.html">Normalizer javadocs</a></p>
</li>
<li>
-<p><a href="https://solr.apache.org/docs/9_2_1/modules/ltr/org/apache/solr/ltr/interleaving/Interleaving.html">Interleaving javadocs</a></p>
+<p><a href="https://solr.apache.org/docs/9_3_0/modules/ltr/org/apache/solr/ltr/interleaving/Interleaving.html">Interleaving javadocs</a></p>
</li>
<li>
<p><a href="https://cwiki.apache.org/confluence/display/solr/HowToContribute" class="bare">https://cwiki.apache.org/confluence/display/solr/HowToContribute</a></p>
@@ -2048,203 +2362,10 @@ Related links:</p>
</div>
</div>
<div class="sect1">
-<h2 id="ltr-lifecycle"><a class="anchor" href="#ltr-lifecycle"></a>LTR Lifecycle</h2>
+<h2 id="ltr-examples"><a class="anchor" href="#ltr-examples"></a>LTR Examples</h2>
<div class="sectionbody">
<div class="sect2">
-<h3 id="feature-stores"><a class="anchor" href="#feature-stores"></a>Feature Stores</h3>
-<div class="paragraph">
-<p>It is recommended that you organise all your features into stores which are akin to namespaces:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>Features within a store must be named uniquely.</p>
-</li>
-<li>
-<p>Across stores identical or similar features can share the same name.</p>
-</li>
-<li>
-<p>If no store name is specified then the default <code>_DEFAULT_</code> feature store will be used.</p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>To discover the names of all your feature stores:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-text hljs" data-lang="text">http://localhost:8983/solr/techproducts/schema/feature-store</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>To inspect the content of the <code>commonFeatureStore</code> feature store:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-text hljs" data-lang="text">http://localhost:8983/solr/techproducts/schema/feature-store/commonFeatureStore</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="models"><a class="anchor" href="#models"></a>Models</h3>
-<div class="ulist">
-<ul>
-<li>
-<p>A model uses features from exactly one feature store.</p>
-</li>
-<li>
-<p>If no store is specified then the default <code>_DEFAULT_</code> feature store will be used.</p>
-</li>
-<li>
-<p>A model need not use all the features defined in a feature store.</p>
-</li>
-<li>
-<p>Multiple models can use the same feature store.</p>
-</li>
-</ul>
-</div>
-<div class="paragraph">
-<p>To extract features for <code>currentFeatureStore</code> 's features:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-text hljs" data-lang="text">http://localhost:8983/solr/techproducts/query?q=test&fl=id,score,[features store=currentFeatureStore]</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>To extract features for <code>nextFeatureStore</code> features whilst reranking with <code>currentModel</code> based on <code>currentFeatureStore</code>:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-text hljs" data-lang="text">http://localhost:8983/solr/techproducts/query?q=test&rq={!ltr model=currentModel reRankDocs=100}&fl=id,score,[features store=nextFeatureStore]</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>To view all models:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-text hljs" data-lang="text">http://localhost:8983/solr/techproducts/schema/model-store</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>To delete the <code>currentModel</code> model:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-bash hljs" data-lang="bash">curl -XDELETE 'http://localhost:8983/solr/techproducts/schema/model-store/currentModel'</code></pre>
-</div>
-</div>
-<div class="admonitionblock important">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-important" title="Important"></i>
-</td>
-<td class="content">
-A feature store may be deleted only when there are no models using it.
-</td>
-</tr>
-</table>
-</div>
-<div class="paragraph">
-<p>To delete the <code>currentFeatureStore</code> feature store:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-bash hljs" data-lang="bash">curl -XDELETE 'http://localhost:8983/solr/techproducts/schema/feature-store/currentFeatureStore'</code></pre>
-</div>
-</div>
-<div class="sect3">
-<h4 id="using-large-models"><a class="anchor" href="#using-large-models"></a>Using Large Models</h4>
-<div class="paragraph">
-<p>With SolrCloud, large models may fail to upload due to the limitation of ZooKeeper’s buffer.
-In this case, <code>DefaultWrapperModel</code> may help you to separate the model definition from uploaded file.</p>
-</div>
-<div class="paragraph">
-<p>Assuming that you consider to use a large model placed at <code>/path/to/models/myModel.json</code> through <code>DefaultWrapperModel</code>.</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-json hljs" data-lang="json">{
- "store" : "largeModelsFeatureStore",
- "name" : "myModel",
- "class" : ...,
- "features" : [
- ...
- ],
- "params" : {
- ...
- }
-}</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>First, add the directory to Solr’s resource paths with a <a href="../configuration-guide/libs.html#lib-directives-in-solrconfig" class="xref page"><code><lib/></code> directive</a>:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml"> <lib dir="/path/to" regex="models" /></code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>Then, configure <code>DefaultWrapperModel</code> to wrap <code>myModel.json</code>:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-json hljs" data-lang="json">{
- "store" : "largeModelsFeatureStore",
- "name" : "myWrapperModel",
- "class" : "org.apache.solr.ltr.model.DefaultWrapperModel",
- "params" : {
- "resource" : "myModel.json"
- }
-}</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p><code>myModel.json</code> will be loaded during the initialization and be able to use by specifying <code>model=myWrapperModel</code>.</p>
-</div>
-<div class="admonitionblock note">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-note" title="Note"></i>
-</td>
-<td class="content">
-No <code>"features"</code> are configured in <code>myWrapperModel</code> because the features of the wrapped model (<code>myModel</code>) will be used; also note that the <code>"store"</code> configured for the wrapper model must match that of the wrapped model i.e., in this example the feature store called <code>largeModelsFeatureStore</code> is used.
-</td>
-</tr>
-</table>
-</div>
-<div class="admonitionblock caution">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-caution" title="Caution"></i>
-</td>
-<td class="content">
-<code><lib dir="/path/to/models" regex=".*\.json" /></code> doesn’t work as expected in this case, because <code>SolrResourceLoader</code> considers given resources as JAR if <code><lib /></code> indicates files.
-</td>
-</tr>
-</table>
-</div>
-<div class="paragraph">
-<p>As an alternative to the above-described <code>DefaultWrapperModel</code>, it is possible to <a href="../deployment-guide/zookeeper-ensemble.html#increasing-the-file-size-limit" class="xref page">increase ZooKeeper’s file size limit</a>.</p>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="applying-changes"><a class="anchor" href="#applying-changes"></a>Applying Changes</h3>
-<div class="paragraph">
-<p>The feature store and the model store are both <a href="../configuration-guide/managed-resources.html" class="xref page">Managed Resources</a>.
-Changes made to managed resources are not applied to the active Solr components until the Solr collection (or Solr core in single server mode) is reloaded.</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="ltr-examples"><a class="anchor" href="#ltr-examples"></a>LTR Examples</h3>
-<div class="sect3">
-<h4 id="one-feature-store-multiple-ranking-models"><a class="anchor" href="#one-feature-store-multiple-ranking-models"></a>One Feature Store, Multiple Ranking Models</h4>
+<h3 id="one-feature-store-multiple-ranking-models"><a class="anchor" href="#one-feature-store-multiple-ranking-models"></a>One Feature Store, Multiple Ranking Models</h3>
<div class="ulist">
<ul>
<li>
@@ -2348,8 +2469,8 @@ Changes made to managed resources are no
</div>
</div>
</div>
-<div class="sect3">
-<h4 id="model-evolution"><a class="anchor" href="#model-evolution"></a>Model Evolution</h4>
+<div class="sect2">
+<h3 id="model-evolution"><a class="anchor" href="#model-evolution"></a>Model Evolution</h3>
<div class="ulist">
<ul>
<li>
@@ -2499,6 +2620,301 @@ Changes made to managed resources are no
</div>
</div>
</div>
+<div class="sect2">
+<h3 id="features-logging"><a class="anchor" href="#features-logging"></a>Features Logging</h3>
+<div class="sect3">
+<h4 id="logall-parameter"><a class="anchor" href="#logall-parameter"></a>logAll parameter</h4>
+<div class="paragraph">
+<p>Suppose to have a complete feature store like:</p>
+</div>
+<div class="listingblock">
+<div class="title">Example: /path/completeFeaturesStore.json</div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-json hljs" data-lang="json">[
+ {
+ "store" : "completeFeaturesStore",
+ "name" : "documentRecency",
+ "class" : "org.apache.solr.ltr.feature.SolrFeature",
+ "params" : {
+ "q" : "{!func}recip( ms(NOW,last_modified), 3.16e-11, 1, 1)"
+ }
+ },
+ {
+ "store" : "completeFeaturesStore",
+ "name" : "isBook",
+ "class" : "org.apache.solr.ltr.feature.SolrFeature",
+ "params" : {
+ "fq": ["{!terms f=cat}book"]
+ }
+ },
+ {
+ "store" : "completeFeaturesStore",
+ "name" : "originalScore",
+ "class" : "org.apache.solr.ltr.feature.OriginalScoreFeature",
+ "params" : {}
+ }
+]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>And suppose to have a simple linear model that uses just two of the <code>completeFeaturesStore</code> 's features:</p>
+</div>
+<div class="listingblock">
+<div class="title">Example: /path/linearModel.json</div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-json hljs" data-lang="json">{
+ "store" : "completeFeaturesStore",
+ "name" : "linearModel",
+ "class" : "org.apache.solr.ltr.model.LinearModel",
+ "features" : [
+ { "name" : "isBook" },
+ { "name" : "originalScore" }
+ ],
+ "params" : {
+ "weights" : {
+ "isBook" : 1.0,
+ "originalScore" : 0.5
+ }
+ }
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Making a logging + re-ranking query without defining the <code>store</code> and <code>logAll</code> parameters will print only the model features (default: <code>store=model store</code> and <code>logAll=false</code>).</p>
+</div>
+<div class="paragraph">
+<p>The query:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-text hljs" data-lang="text">http://localhost:8983/solr/techproducts/query?q=test&rq={!ltr model=linearModel reRankDocs=100}&fl=id,score,[features]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The output:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-json hljs" data-lang="json">{
+ "responseHeader":{
+ "status":0,
+ "QTime":0,
+ "params":{
+ "q":"test",
+ "fl":"id,score,[features]",
+ "rq":"{!ltr model=linearModel reRankDocs=100}"}},
+ "response":{"numFound":2,"start":0,"maxScore":1.0005897,"docs":[
+ {
+ "id":"GB18030TEST",
+ "score":1.0005897,
+ "[features]":"isBook=0.0,originalScore=1.959392"},
+ {
+ "id":"UTF8TEST",
+ "score":0.79656565,
+ "[features]":"isBook=0.0,originalScore=1.5513437"}]
+ }}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Making a logging + re-ranking query without defining the <code>store</code> parameter and setting <code>logAll = true</code> will print all the features from the model store.</p>
+</div>
+<div class="paragraph">
+<p>The query:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-text hljs" data-lang="text">http://localhost:8983/solr/techproducts/query?q=test&rq={!ltr model=linearModel reRankDocs=100}&fl=id,score,[features logAll=true]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The output:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-json hljs" data-lang="json">{
+ "responseHeader":{
+ "status":0,
+ "QTime":0,
+ "params":{
+ "q":"test",
+ "fl":"id,score,[features logAll=true]",
+ "rq":"{!ltr model=linearModel reRankDocs=100}"}},
+ "response":{"numFound":2,"start":0,"maxScore":1.0005897,"docs":[
+ {
+ "id":"GB18030TEST",
+ "score":1.0005897,
+ "[features]":"documentRecency=0.020893792,isBook=0.0,originalScore=1.959392"},
+ {
+ "id":"UTF8TEST",
+ "score":0.79656565,
+ "[features]":"documentRecency=0.020893792,isBook=0.0,originalScore=1.5513437"}]
+ }}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Suppose to have a different feature store like:</p>
+</div>
+<div class="listingblock">
+<div class="title">Example: /path/differentFeaturesStore.json</div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-json hljs" data-lang="json">[
+ {
+ "store": "differentFeaturesStore",
+ "name": "valueFeature1",
+ "class": "org.apache.solr.ltr.feature.FieldValueFeature",
+ "params": {
+ "field": "field1"
+ }
+ },
+ {
+ "store": "differentFeaturesStore",
+ "name": "valueFeature2",
+ "class": "org.apache.solr.ltr.feature.FieldValueFeature",
+ "params": {
+ "field": "field2"
+ }
+ }
+]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Making a logging + re-ranking query defining a <code>store</code> parameter different from the model store without defining the <code>logAll</code> parameter will print all the features from the selected feature store (default: <code>logAll=true</code>).</p>
+</div>
+<div class="paragraph">
+<p>The query:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-text hljs" data-lang="text">http://localhost:8983/solr/techproducts/query?q=test&rq={!ltr model=linearModel reRankDocs=100}&fl=id,score,[features store=differentFeaturesStore]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The output:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-json hljs" data-lang="json">{
+ "responseHeader":{
+ "status":0,
+ "QTime":0,
+ "params":{
+ "q":"test",
+ "fl":"id,score,[features store=differentFeaturesStore]",
+ "rq":"{!ltr model=linearModel reRankDocs=100}"}},
+ "response":{"numFound":2,"start":0,"maxScore":1.0005897,"docs":[
+ {
+ "id":"GB18030TEST",
+ "score":1.0005897,
+ "[features]":"valueFeature1=0.1,valueFeature2=2.0"},
+ {
+ "id":"UTF8TEST",
+ "score":0.79656565,
+ "[features]":"valueFeature1=1.3,valueFeature2=4.0"}]
+ }}</code></pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="format-parameter"><a class="anchor" href="#format-parameter"></a>format parameter</h4>
+<div class="paragraph">
+<p>Suppose to have a feature store like:</p>
+</div>
+<div class="listingblock">
+<div class="title">Example: /path/myFeaturesStore.json</div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-json hljs" data-lang="json">[
+ {
+ "store": "myFeaturesStore",
+ "name": "featureA",
+ "class": "org.apache.solr.ltr.feature.FieldValueFeature",
+ "params": {
+ "field": "field1"
+ }
+ },
+ {
+ "store": "myFeaturesStore",
+ "name": "featureB",
+ "class": "org.apache.solr.ltr.feature.FieldValueFeature",
+ "params": {
+ "field": "field2"
+ }
+ },
+ {
+ "store": "myFeaturesStore",
+ "name": "featureC",
+ "class": "org.apache.solr.ltr.feature.FieldValueFeature",
+ "params": {
+ "field": "field3"
+ }
+ }
+]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>To return dense CSV values such as: <code>featureA=0.1,featureB=0.2,featureC=0.0</code>, pass the <code>format=dense</code> parameter to the feature logger transformer:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-text hljs" data-lang="text">http://localhost:8983/solr/techproducts/query?q=test&fl=id,score,[features store=myFeaturesStore format=dense]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The output:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-json hljs" data-lang="json">{
+ "responseHeader":{
+ "status":0,
+ "QTime":0,
+ "params":{
+ "q":"test",
+ "fl":"id,score,[features store=myFeaturesStore format=dense]"}},
+ "response":{"numFound":2,"start":0,"maxScore":1.0005897,"docs":[
+ {
+ "id":"GB18030TEST",
+ "score":1.0005897,
+ "[features]":"featureA=0.1,featureB=0.2,featureC=0.0"},
+ {
+ "id":"UTF8TEST",
+ "score":0.79656565,
+ "[features]":"featureA=1.3,featureB=0.0,featureC=2.1"}]
+ }}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>To return sparse CSV values such as: <code>featureA=0.1,featureB=0.2</code>, pass the <code>format=sparse</code> parameter to the feature logger transformer:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-text hljs" data-lang="text">http://localhost:8983/solr/techproducts/query?q=test&fl=id,score,[features store=myFeaturesStore format=sparse]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The output:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-json hljs" data-lang="json">{
+ "responseHeader":{
+ "status":0,
+ "QTime":0,
+ "params":{
+ "q":"test",
+ "fl":"id,score,[features store=myFeaturesStore format=sparse]"}},
+ "response":{"numFound":2,"start":0,"maxScore":1.0005897,"docs":[
+ {
+ "id":"GB18030TEST",
+ "score":1.0005897,
+ "[features]":"featureA=0.1,featureB=0.2"},
+ {
+ "id":"UTF8TEST",
+ "score":0.79656565,
+ "[features]":"featureA=1.3,featureC=2.1"}]
+ }}</code></pre>
+</div>
+</div>
+</div>
</div>
</div>
</div>
Modified: sites/solr/guide/solr/latest/query-guide/loading.html
URL: http://svn.apache.org/viewvc/sites/solr/guide/solr/latest/query-guide/loading.html?rev=1083697&r1=1083696&r2=1083697&view=diff
==============================================================================
--- sites/solr/guide/solr/latest/query-guide/loading.html (original)
+++ sites/solr/guide/solr/latest/query-guide/loading.html Fri Jul 21 18:07:42 2023
@@ -39,7 +39,7 @@
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link" href="#">Resources</a>
<div class="navbar-dropdown">
- <a class="navbar-item" href="https://solr.apache.org/docs/9_2_1/index.html" target="_blank" rel="noreferrer nopener">Solr Javadocs</a>
+ <a class="navbar-item" href="https://solr.apache.org/docs/9_3_0/index.html" target="_blank" rel="noreferrer nopener">Solr Javadocs</a>
<a class="navbar-item" href="https://solr.apache.org/community.html#version-control" target="_blank" rel="noreferrer nopener">Source Code</a>
<a class="navbar-item" href="https://solr.apache.org/community.html" target="_blank" rel="noreferrer nopener">Community Links</a>
<a class="navbar-item" href="https://github.com/apache/solr/tree/main/dev-docs/ref-guide" target="_blank" rel="noreferrer nopener">Contribute</a>
@@ -56,25 +56,25 @@
</nav>
</header>
<div class="body">
-<div class="nav-container" data-component="solr" data-version="9_2">
+<div class="nav-container" data-component="solr" data-version="9_3">
<aside class="nav">
<div class="panels">
<!-- Solr Changes - Start -->
<div class="nav-panel-explore" data-panel="explore">
<div class="context">
<span class="title">Solr Reference Guide</span>
- <span class="version">9.2</span>
+ <span class="version">9.3</span>
</div>
<!-- Programmatically creates the component and version list -->
<ul class="components">
<li class="component is-current">
<a class="title" href="../index.html">Solr Reference Guide</a>
<ul class="versions">
- <li class="version">
- <a href="../../9_3/index.html">9.3-beta</a>
- </li>
<li class="version is-current is-latest">
- <a href="../index.html">9.2</a>
+ <a href="../index.html">9.3</a>
+ </li>
+ <li class="version">
+ <a href="../../9_2/index.html">9.2</a>
</li>
<li class="version">
<a href="../../9_1/index.html">9.1</a>
@@ -211,7 +211,7 @@
<a class="nav-link" href="../getting-started/tutorial-films.html">Exercise 2: Index Films Data</a>
</li>
<li class="nav-item" data-depth="2">
- <a class="nav-link" href="../getting-started/tutorial-diy.html">Exercise 3 Index Your Own Data</a>
+ <a class="nav-link" href="../getting-started/tutorial-diy.html">Exercise 3: Index Your Own Data</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../getting-started/tutorial-solrcloud.html">Getting Started with SolrCloud</a>
@@ -718,6 +718,9 @@
</ul>
</li>
<li class="nav-item" data-depth="2">
+ <a class="nav-link" href="../indexing-guide/indexing-with-cbor.html">Indexing with Update CBOR data format</a>
+ </li>
+ <li class="nav-item" data-depth="2">
<a class="nav-link" href="../indexing-guide/indexing-with-tika.html">Indexing with Solr Cell and Apache Tika</a>
</li>
<li class="nav-item" data-depth="2">
@@ -1071,17 +1074,17 @@
</ul>
</nav>
<div class="page-versions">
- <button class="version-menu-toggle" title="Show other versions of page">9.2</button>
+ <button class="version-menu-toggle" title="Show other versions of page">9.3</button>
<div class="version-menu">
- <a class="version" href="../../9_3/query-guide/loading.html">9.3-beta</a>
- <a class="version is-current" href="loading.html">9.2</a>
+ <a class="version is-current" href="loading.html">9.3</a>
+ <a class="version" href="../../9_2/query-guide/loading.html">9.2</a>
<a class="version" href="../../9_1/query-guide/loading.html">9.1</a>
<a class="version" href="../../9_0/query-guide/loading.html">9.0</a>
</div>
</div>
<!-- Solr Additions - Start -->
<!-- Solr New File -->
-<span class="perma-link-copy" version="9_2">
+<span class="perma-link-copy" version="9_3">
</span><!-- Solr Additions - End -->
<div class="edit-this-page"><a href="https://github.com/apache/solr/tree/main/solr/solr-ref-guide/modules/query-guide/pages/loading.adoc">Edit this Page</a></div>
</div>
Modified: sites/solr/guide/solr/latest/query-guide/local-params.html
URL: http://svn.apache.org/viewvc/sites/solr/guide/solr/latest/query-guide/local-params.html?rev=1083697&r1=1083696&r2=1083697&view=diff
==============================================================================
--- sites/solr/guide/solr/latest/query-guide/local-params.html (original)
+++ sites/solr/guide/solr/latest/query-guide/local-params.html Fri Jul 21 18:07:42 2023
@@ -39,7 +39,7 @@
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link" href="#">Resources</a>
<div class="navbar-dropdown">
- <a class="navbar-item" href="https://solr.apache.org/docs/9_2_1/index.html" target="_blank" rel="noreferrer nopener">Solr Javadocs</a>
+ <a class="navbar-item" href="https://solr.apache.org/docs/9_3_0/index.html" target="_blank" rel="noreferrer nopener">Solr Javadocs</a>
<a class="navbar-item" href="https://solr.apache.org/community.html#version-control" target="_blank" rel="noreferrer nopener">Source Code</a>
<a class="navbar-item" href="https://solr.apache.org/community.html" target="_blank" rel="noreferrer nopener">Community Links</a>
<a class="navbar-item" href="https://github.com/apache/solr/tree/main/dev-docs/ref-guide" target="_blank" rel="noreferrer nopener">Contribute</a>
@@ -56,25 +56,25 @@
</nav>
</header>
<div class="body">
-<div class="nav-container" data-component="solr" data-version="9_2">
+<div class="nav-container" data-component="solr" data-version="9_3">
<aside class="nav">
<div class="panels">
<!-- Solr Changes - Start -->
<div class="nav-panel-explore" data-panel="explore">
<div class="context">
<span class="title">Solr Reference Guide</span>
- <span class="version">9.2</span>
+ <span class="version">9.3</span>
</div>
<!-- Programmatically creates the component and version list -->
<ul class="components">
<li class="component is-current">
<a class="title" href="../index.html">Solr Reference Guide</a>
<ul class="versions">
- <li class="version">
- <a href="../../9_3/index.html">9.3-beta</a>
- </li>
<li class="version is-current is-latest">
- <a href="../index.html">9.2</a>
+ <a href="../index.html">9.3</a>
+ </li>
+ <li class="version">
+ <a href="../../9_2/index.html">9.2</a>
</li>
<li class="version">
<a href="../../9_1/index.html">9.1</a>
@@ -211,7 +211,7 @@
<a class="nav-link" href="../getting-started/tutorial-films.html">Exercise 2: Index Films Data</a>
</li>
<li class="nav-item" data-depth="2">
- <a class="nav-link" href="../getting-started/tutorial-diy.html">Exercise 3 Index Your Own Data</a>
+ <a class="nav-link" href="../getting-started/tutorial-diy.html">Exercise 3: Index Your Own Data</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../getting-started/tutorial-solrcloud.html">Getting Started with SolrCloud</a>
@@ -718,6 +718,9 @@
</ul>
</li>
<li class="nav-item" data-depth="2">
+ <a class="nav-link" href="../indexing-guide/indexing-with-cbor.html">Indexing with Update CBOR data format</a>
+ </li>
+ <li class="nav-item" data-depth="2">
<a class="nav-link" href="../indexing-guide/indexing-with-tika.html">Indexing with Solr Cell and Apache Tika</a>
</li>
<li class="nav-item" data-depth="2">
@@ -1070,17 +1073,17 @@
</ul>
</nav>
<div class="page-versions">
- <button class="version-menu-toggle" title="Show other versions of page">9.2</button>
+ <button class="version-menu-toggle" title="Show other versions of page">9.3</button>
<div class="version-menu">
- <a class="version" href="../../9_3/query-guide/local-params.html">9.3-beta</a>
- <a class="version is-current" href="local-params.html">9.2</a>
+ <a class="version is-current" href="local-params.html">9.3</a>
+ <a class="version" href="../../9_2/query-guide/local-params.html">9.2</a>
<a class="version" href="../../9_1/query-guide/local-params.html">9.1</a>
<a class="version" href="../../9_0/query-guide/local-params.html">9.0</a>
</div>
</div>
<!-- Solr Additions - Start -->
<!-- Solr New File -->
-<span class="perma-link-copy" version="9_2">
+<span class="perma-link-copy" version="9_3">
</span><!-- Solr Additions - End -->
<div class="edit-this-page"><a href="https://github.com/apache/solr/tree/main/solr/solr-ref-guide/modules/query-guide/pages/local-params.adoc">Edit this Page</a></div>
</div>
Modified: sites/solr/guide/solr/latest/query-guide/logs.html
URL: http://svn.apache.org/viewvc/sites/solr/guide/solr/latest/query-guide/logs.html?rev=1083697&r1=1083696&r2=1083697&view=diff
==============================================================================
--- sites/solr/guide/solr/latest/query-guide/logs.html (original)
+++ sites/solr/guide/solr/latest/query-guide/logs.html Fri Jul 21 18:07:42 2023
@@ -39,7 +39,7 @@
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link" href="#">Resources</a>
<div class="navbar-dropdown">
- <a class="navbar-item" href="https://solr.apache.org/docs/9_2_1/index.html" target="_blank" rel="noreferrer nopener">Solr Javadocs</a>
+ <a class="navbar-item" href="https://solr.apache.org/docs/9_3_0/index.html" target="_blank" rel="noreferrer nopener">Solr Javadocs</a>
<a class="navbar-item" href="https://solr.apache.org/community.html#version-control" target="_blank" rel="noreferrer nopener">Source Code</a>
<a class="navbar-item" href="https://solr.apache.org/community.html" target="_blank" rel="noreferrer nopener">Community Links</a>
<a class="navbar-item" href="https://github.com/apache/solr/tree/main/dev-docs/ref-guide" target="_blank" rel="noreferrer nopener">Contribute</a>
@@ -56,25 +56,25 @@
</nav>
</header>
<div class="body">
-<div class="nav-container" data-component="solr" data-version="9_2">
+<div class="nav-container" data-component="solr" data-version="9_3">
<aside class="nav">
<div class="panels">
<!-- Solr Changes - Start -->
<div class="nav-panel-explore" data-panel="explore">
<div class="context">
<span class="title">Solr Reference Guide</span>
- <span class="version">9.2</span>
+ <span class="version">9.3</span>
</div>
<!-- Programmatically creates the component and version list -->
<ul class="components">
<li class="component is-current">
<a class="title" href="../index.html">Solr Reference Guide</a>
<ul class="versions">
- <li class="version">
- <a href="../../9_3/index.html">9.3-beta</a>
- </li>
<li class="version is-current is-latest">
- <a href="../index.html">9.2</a>
+ <a href="../index.html">9.3</a>
+ </li>
+ <li class="version">
+ <a href="../../9_2/index.html">9.2</a>
</li>
<li class="version">
<a href="../../9_1/index.html">9.1</a>
@@ -211,7 +211,7 @@
<a class="nav-link" href="../getting-started/tutorial-films.html">Exercise 2: Index Films Data</a>
</li>
<li class="nav-item" data-depth="2">
- <a class="nav-link" href="../getting-started/tutorial-diy.html">Exercise 3 Index Your Own Data</a>
+ <a class="nav-link" href="../getting-started/tutorial-diy.html">Exercise 3: Index Your Own Data</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../getting-started/tutorial-solrcloud.html">Getting Started with SolrCloud</a>
@@ -718,6 +718,9 @@
</ul>
</li>
<li class="nav-item" data-depth="2">
+ <a class="nav-link" href="../indexing-guide/indexing-with-cbor.html">Indexing with Update CBOR data format</a>
+ </li>
+ <li class="nav-item" data-depth="2">
<a class="nav-link" href="../indexing-guide/indexing-with-tika.html">Indexing with Solr Cell and Apache Tika</a>
</li>
<li class="nav-item" data-depth="2">
@@ -1071,17 +1074,17 @@
</ul>
</nav>
<div class="page-versions">
- <button class="version-menu-toggle" title="Show other versions of page">9.2</button>
+ <button class="version-menu-toggle" title="Show other versions of page">9.3</button>
<div class="version-menu">
- <a class="version" href="../../9_3/query-guide/logs.html">9.3-beta</a>
- <a class="version is-current" href="logs.html">9.2</a>
+ <a class="version is-current" href="logs.html">9.3</a>
+ <a class="version" href="../../9_2/query-guide/logs.html">9.2</a>
<a class="version" href="../../9_1/query-guide/logs.html">9.1</a>
<a class="version" href="../../9_0/query-guide/logs.html">9.0</a>
</div>
</div>
<!-- Solr Additions - Start -->
<!-- Solr New File -->
-<span class="perma-link-copy" version="9_2">
+<span class="perma-link-copy" version="9_3">
</span><!-- Solr Additions - End -->
<div class="edit-this-page"><a href="https://github.com/apache/solr/tree/main/solr/solr-ref-guide/modules/query-guide/pages/logs.adoc">Edit this Page</a></div>
</div>
Modified: sites/solr/guide/solr/latest/query-guide/machine-learning.html
URL: http://svn.apache.org/viewvc/sites/solr/guide/solr/latest/query-guide/machine-learning.html?rev=1083697&r1=1083696&r2=1083697&view=diff
==============================================================================
--- sites/solr/guide/solr/latest/query-guide/machine-learning.html (original)
+++ sites/solr/guide/solr/latest/query-guide/machine-learning.html Fri Jul 21 18:07:42 2023
@@ -39,7 +39,7 @@
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link" href="#">Resources</a>
<div class="navbar-dropdown">
- <a class="navbar-item" href="https://solr.apache.org/docs/9_2_1/index.html" target="_blank" rel="noreferrer nopener">Solr Javadocs</a>
+ <a class="navbar-item" href="https://solr.apache.org/docs/9_3_0/index.html" target="_blank" rel="noreferrer nopener">Solr Javadocs</a>
<a class="navbar-item" href="https://solr.apache.org/community.html#version-control" target="_blank" rel="noreferrer nopener">Source Code</a>
<a class="navbar-item" href="https://solr.apache.org/community.html" target="_blank" rel="noreferrer nopener">Community Links</a>
<a class="navbar-item" href="https://github.com/apache/solr/tree/main/dev-docs/ref-guide" target="_blank" rel="noreferrer nopener">Contribute</a>
@@ -56,25 +56,25 @@
</nav>
</header>
<div class="body">
-<div class="nav-container" data-component="solr" data-version="9_2">
+<div class="nav-container" data-component="solr" data-version="9_3">
<aside class="nav">
<div class="panels">
<!-- Solr Changes - Start -->
<div class="nav-panel-explore" data-panel="explore">
<div class="context">
<span class="title">Solr Reference Guide</span>
- <span class="version">9.2</span>
+ <span class="version">9.3</span>
</div>
<!-- Programmatically creates the component and version list -->
<ul class="components">
<li class="component is-current">
<a class="title" href="../index.html">Solr Reference Guide</a>
<ul class="versions">
- <li class="version">
- <a href="../../9_3/index.html">9.3-beta</a>
- </li>
<li class="version is-current is-latest">
- <a href="../index.html">9.2</a>
+ <a href="../index.html">9.3</a>
+ </li>
+ <li class="version">
+ <a href="../../9_2/index.html">9.2</a>
</li>
<li class="version">
<a href="../../9_1/index.html">9.1</a>
@@ -211,7 +211,7 @@
<a class="nav-link" href="../getting-started/tutorial-films.html">Exercise 2: Index Films Data</a>
</li>
<li class="nav-item" data-depth="2">
- <a class="nav-link" href="../getting-started/tutorial-diy.html">Exercise 3 Index Your Own Data</a>
+ <a class="nav-link" href="../getting-started/tutorial-diy.html">Exercise 3: Index Your Own Data</a>
</li>
<li class="nav-item" data-depth="2">
<a class="nav-link" href="../getting-started/tutorial-solrcloud.html">Getting Started with SolrCloud</a>
@@ -718,6 +718,9 @@
</ul>
</li>
<li class="nav-item" data-depth="2">
+ <a class="nav-link" href="../indexing-guide/indexing-with-cbor.html">Indexing with Update CBOR data format</a>
+ </li>
+ <li class="nav-item" data-depth="2">
<a class="nav-link" href="../indexing-guide/indexing-with-tika.html">Indexing with Solr Cell and Apache Tika</a>
</li>
<li class="nav-item" data-depth="2">
@@ -1071,17 +1074,17 @@
</ul>
</nav>
<div class="page-versions">
- <button class="version-menu-toggle" title="Show other versions of page">9.2</button>
+ <button class="version-menu-toggle" title="Show other versions of page">9.3</button>
<div class="version-menu">
- <a class="version" href="../../9_3/query-guide/machine-learning.html">9.3-beta</a>
- <a class="version is-current" href="machine-learning.html">9.2</a>
+ <a class="version is-current" href="machine-learning.html">9.3</a>
+ <a class="version" href="../../9_2/query-guide/machine-learning.html">9.2</a>
<a class="version" href="../../9_1/query-guide/machine-learning.html">9.1</a>
<a class="version" href="../../9_0/query-guide/machine-learning.html">9.0</a>
</div>
</div>
<!-- Solr Additions - Start -->
<!-- Solr New File -->
-<span class="perma-link-copy" version="9_2">
+<span class="perma-link-copy" version="9_3">
</span><!-- Solr Additions - End -->
<div class="edit-this-page"><a href="https://github.com/apache/solr/tree/main/solr/solr-ref-guide/modules/query-guide/pages/machine-learning.adoc">Edit this Page</a></div>
</div>