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 2017/05/09 19:22:32 UTC

svn commit: r1011953 [20/32] - in /websites/production/lucene/content/solr/guide/test-10290: ./ fonts/mplus1mn/ images/a-quick-overview/ images/other-parsers/

Modified: websites/production/lucene/content/solr/guide/test-10290/other-schema-elements.html
==============================================================================
--- websites/production/lucene/content/solr/guide/test-10290/other-schema-elements.html (original)
+++ websites/production/lucene/content/solr/guide/test-10290/other-schema-elements.html Tue May  9 19:22:29 2017
@@ -1280,7 +1280,7 @@ $('#toc').on('click', 'a', function() {
   <div id="preamble">
 <div class="sectionbody">
 <div class="paragraph">
-<p>This section describes several other important elements of <code>schema.xml</code>.</p>
+<p>This section describes several other important elements of <code>schema.xml</code> not covered in earlier sections.</p>
 </div>
 </div>
 </div>
@@ -1302,7 +1302,7 @@ $('#toc').on('click', 'a', function() {
 <p>Schema defaults and <code>copyFields</code> cannot be used to populate the <code>uniqueKey</code> field. The <code>fieldType</code> of <code>uniqueKey</code> must not be analyzed. You can use <code>UUIDUpdateProcessorFactory</code> to have <code>uniqueKey</code> values generated automatically.</p>
 </div>
 <div class="paragraph">
-<p>Further, the operation will fail if the <code>uniqueKey</code> field is used, but is multivalued (or inherits the multivalueness from the <code>fieldtype</code>). However, <code>uniqueKey</code> will continue to work, as long as the field is properly used.</p>
+<p>Further, the operation will fail if the <code>uniqueKey</code> field is used, but is multivalued (or inherits the multivalue-ness from the <code>fieldtype</code>). However, <code>uniqueKey</code> will continue to work, as long as the field is properly used.</p>
 </div>
 </div>
 </div>
@@ -1424,7 +1424,7 @@ $('#toc').on('click', 'a', function() {
             <div class="row">
                 <div class="col-lg-12 footer">
                &copy;2017 Apache Software Foundation. All rights reserved. <br />
- Site last generated: 2017-05-03 <br />
+ Site last generated: 2017-05-09 <br />
 <p><img src="solr-sunOnly-small.png" alt="Apache Solr"/></p>
                 </div>
             </div>

Modified: websites/production/lucene/content/solr/guide/test-10290/overview-of-documents-fields-and-schema-design.html
==============================================================================
--- websites/production/lucene/content/solr/guide/test-10290/overview-of-documents-fields-and-schema-design.html (original)
+++ websites/production/lucene/content/solr/guide/test-10290/overview-of-documents-fields-and-schema-design.html Tue May  9 19:22:29 2017
@@ -1294,7 +1294,7 @@ $('#toc').on('click', 'a', function() {
 </div>
 </div>
 <div class="sect1">
-<h2 id="OverviewofDocuments_Fields_andSchemaDesign-HowSolrSeestheWorld">How Solr Sees the World</h2>
+<h2 id="how-solr-sees-the-world">How Solr Sees the World</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>Solr&#8217;s basic unit of information is a <em>document</em>, which is a set of data that describes something. A recipe document would contain the ingredients, the instructions, the preparation time, the cooking time, the tools needed, and so on. A document about a person, for example, might contain the person&#8217;s name, biography, favorite color, and shoe size. A document about a book could contain the title, author, year of publication, number of pages, and so on.</p>
@@ -1314,7 +1314,7 @@ $('#toc').on('click', 'a', function() {
 </div>
 </div>
 <div class="sect1">
-<h2 id="OverviewofDocuments_Fields_andSchemaDesign-FieldAnalysis">Field Analysis</h2>
+<h2 id="field-analysis">Field Analysis</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p><em>Field analysis</em> tells Solr what to do with incoming data when building an index. A more accurate name for this process would be <em>processing</em> or even <em>digestion</em>, but the official name is <em>analysis</em>.</p>
@@ -1334,7 +1334,7 @@ $('#toc').on('click', 'a', function() {
 </div>
 </div>
 <div class="sect1">
-<h2 id="OverviewofDocuments_Fields_andSchemaDesign-Solr_sSchemaFile">Solr&#8217;s Schema File</h2>
+<h2 id="solr-s-schema-file">Solr&#8217;s Schema File</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>Solr stores details about the field types and fields it is expected to understand in a schema file. The name and location of this file may vary depending on how you initially configured Solr or if you modified it later.</p>
@@ -1353,7 +1353,7 @@ $('#toc').on('click', 'a', function() {
 </ul>
 </div>
 <div class="paragraph">
-<p>Whichever name of the file is being used in your installation, the structure of the file is not changed. However, the way you interact with the file will change. If you are using the managed schema, it is expected that you only interact with the file with the Schema API, and never make manual edits. If you do not use the managed schema, you will only be able to make manual edits to the file, the Schema API will not support any modifications.</p>
+<p>Whichever name of the file in use in your installation, the structure of the file is not changed. However, the way you interact with the file will change. If you are using the managed schema, it is expected that you only interact with the file with the Schema API, and never make manual edits. If you do not use the managed schema, you will only be able to make manual edits to the file, the Schema API will not support any modifications.</p>
 </div>
 <div class="paragraph">
 <p>Note that if you are not using the Schema API yet you do use SolrCloud, you will need to interact with <code>schema.xml</code> through ZooKeeper using upconfig and downconfig commands to make a local copy and upload your changes. The options for doing this are described in <a href="solr-control-script-reference.html#solr-control-script-reference">Solr Control Script Reference</a> and <a href="using-zookeeper-to-manage-configuration-files.html#using-zookeeper-to-manage-configuration-files">Using ZooKeeper to Manage Configuration Files</a>.</p>
@@ -1396,7 +1396,7 @@ $('#toc').on('click', 'a', function() {
             <div class="row">
                 <div class="col-lg-12 footer">
                &copy;2017 Apache Software Foundation. All rights reserved. <br />
- Site last generated: 2017-05-03 <br />
+ Site last generated: 2017-05-09 <br />
 <p><img src="solr-sunOnly-small.png" alt="Apache Solr"/></p>
                 </div>
             </div>

Modified: websites/production/lucene/content/solr/guide/test-10290/overview-of-searching-in-solr.html
==============================================================================
--- websites/production/lucene/content/solr/guide/test-10290/overview-of-searching-in-solr.html (original)
+++ websites/production/lucene/content/solr/guide/test-10290/overview-of-searching-in-solr.html Tue May  9 19:22:29 2017
@@ -1387,7 +1387,7 @@ $('#toc').on('click', 'a', function() {
             <div class="row">
                 <div class="col-lg-12 footer">
                &copy;2017 Apache Software Foundation. All rights reserved. <br />
- Site last generated: 2017-05-03 <br />
+ Site last generated: 2017-05-09 <br />
 <p><img src="solr-sunOnly-small.png" alt="Apache Solr"/></p>
                 </div>
             </div>

Modified: websites/production/lucene/content/solr/guide/test-10290/overview-of-the-solr-admin-ui.html
==============================================================================
--- websites/production/lucene/content/solr/guide/test-10290/overview-of-the-solr-admin-ui.html (original)
+++ websites/production/lucene/content/solr/guide/test-10290/overview-of-the-solr-admin-ui.html Tue May  9 19:22:29 2017
@@ -1277,21 +1277,20 @@ $('#toc').on('click', 'a', function() {
     
 
 <div id="main-content">
-  <div id="preamble">
-<div class="sectionbody">
-<div class="paragraph">
+  <div class="paragraph">
 <p>Solr features a Web interface that makes it easy for Solr administrators and programmers to view <a href="files-screen.html#files-screen">Solr configuration</a> details, run <a href="query-screen.html#query-screen">queries and analyze</a> document fields in order to fine-tune a Solr configuration and access <a href="getting-assistance.html#getting-assistance">online documentation</a> and other help.</p>
 </div>
 <div class="imageblock">
 <div class="content">
 <img src="images/overview-of-the-solr-admin-ui/dashboard.png" alt="image" height="400">
 </div>
+<div class="title">Figure 1. Solr Dashboard</div>
 </div>
 <div class="paragraph">
-<p>Accessing the URL <code><a href="http://hostname:8983/solr/" class="bare">http://hostname:8983/solr/</a></code> will show the main dashboard, which is divided into two parts.</p>
+<p>Accessing the URL <code>http://hostname:8983/solr/</code> will show the main dashboard, which is divided into two parts.</p>
 </div>
 <div class="paragraph">
-<p>A left-side of the screen is a menu under the Solr logo that provides the navigation through the screens of the UI. The first set of links are for system-level information and configuration and provide access to <a href="logging.html#logging">Logging</a>,<a href="collections-core-admin.html#collections-core-admin">Collection/Core Administration</a> and <a href="java-properties.html#java-properties">Java Properties</a>, among other things. At the end of this information is at least one pulldown listing Solr cores configured for this instance. On <a href="solrcloud.html#solrcloud">SolrCloud</a> nodes, an additional pulldown list shows all collections in this cluster. Clicking on a collection or core name shows secondary menus of information for the specified collection or core, such as a <a href="schema-browser-screen.html#schema-browser-screen">Schema Browser</a>, <a href="files-screen.html#files-screen">Config Files</a>, <a href="plugins-stats-screen.html#plugins-stats-screen">Pl
 ugins &amp; Statistics</a>, and an ability to perform <a href="query-screen.html#query-screen">Queries</a> on indexed data.</p>
+<p>A left-side of the screen is a menu under the Solr logo that provides the navigation through the screens of the UI. The first set of links are for system-level information and configuration and provide access to <a href="logging.html#logging">Logging</a>, <a href="collections-core-admin.html#collections-core-admin">Collection/Core Administration</a>, and <a href="java-properties.html#java-properties">Java Properties</a>, among other things. At the end of this information is at least one pulldown listing Solr cores configured for this instance. On <a href="solrcloud.html#solrcloud">SolrCloud</a> nodes, an additional pulldown list shows all collections in this cluster. Clicking on a collection or core name shows secondary menus of information for the specified collection or core, such as a <a href="schema-browser-screen.html#schema-browser-screen">Schema Browser</a>, <a href="files-screen.html#files-screen">Config Files</a>, <a href="plugins-stats-screen.html#plugins-stats-screen">
 Plugins &amp; Statistics</a>, and an ability to perform <a href="query-screen.html#query-screen">Queries</a> on indexed data.</p>
 </div>
 <div class="paragraph">
 <p>The center of the screen shows the detail of the option selected. This may include a sub-navigation for the option or text or graphical representation of the requested data. See the sections in this guide for each screen for more details.</p>
@@ -1307,27 +1306,13 @@ $('#toc').on('click', 'a', function() {
 </td>
 <td class="content">
 <div class="paragraph">
-<p>The path to the Solr Admin UI given above is <code><a href="http://hostname:port/solr" class="bare">http://hostname:port/solr</a></code>, which redirects to <code><a href="http://hostname:port/solr/" class="bare">http://hostname:port/solr/</a><mark>/</code> in the current version. A convenience redirect is also supported, so simply accessing the Admin UI at <code><a href="http://hostname:port/" class="bare">http://hostname:port/</a></code> will also redirect to <code><a href="http://hostname:port/solr/" class="bare">http://hostname:port/solr/</a></mark>/</code>.</p>
+<p>The path to the Solr Admin UI given above is <code>http://hostname:port/solr</code>, which redirects to <code>http://hostname:port/solr/#/</code> in the current version. A convenience redirect is also supported, so simply accessing the Admin UI at <code>http://hostname:port/</code> will also redirect to <code>http://hostname:port/solr/#/</code>.</p>
 </div>
 </td>
 </tr>
 </table>
 </div>
 </div>
-</div>
-<div class="sect1">
-<h2 id="OverviewoftheSolrAdminUI-RelatedTopics">Related Topics</h2>
-<div class="sectionbody">
-<div class="ulist">
-<ul>
-<li>
-<p><a href="configuring-solrconfig-xml.html#configuring-solrconfig-xml">Configuring solrconfig.xml</a></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-</div>
 
 <!-- Adds tags, if any -->
     <div class="tags">
@@ -1363,7 +1348,7 @@ $('#toc').on('click', 'a', function() {
             <div class="row">
                 <div class="col-lg-12 footer">
                &copy;2017 Apache Software Foundation. All rights reserved. <br />
- Site last generated: 2017-05-03 <br />
+ Site last generated: 2017-05-09 <br />
 <p><img src="solr-sunOnly-small.png" alt="Apache Solr"/></p>
                 </div>
             </div>

Modified: websites/production/lucene/content/solr/guide/test-10290/pagination-of-results.html
==============================================================================
--- websites/production/lucene/content/solr/guide/test-10290/pagination-of-results.html (original)
+++ websites/production/lucene/content/solr/guide/test-10290/pagination-of-results.html Tue May  9 19:22:29 2017
@@ -1277,59 +1277,78 @@ $('#toc').on('click', 'a', function() {
     
 
 <div id="main-content">
-  <div class="sect1">
-<h2 id="PaginationofResults-BasicPagination">Basic Pagination</h2>
+  <div id="preamble">
 <div class="sectionbody">
 <div class="paragraph">
-<p>In most search application usage, the "top" matching results (sorted by score, or some other criteria) are then displayed to some human user. In many applications the UI for these sorted results are displayed to the user in "pages" containing a fixed number of matching results, and users don&#8217;t typically look at results past the first few pages worth of results. In Solr, this basic paginated searching is supported using the <strong><code>start</code></strong> and <strong><code>rows</code></strong> parameters, and performance of this common behaviour can be tuned by utilizing the <a href="query-settings-in-solrconfig.html#QuerySettingsinSolrConfig-queryResultCache"><code>queryResultCache</code></a> and adjusting the <a href="query-settings-in-solrconfig.html#QuerySettingsinSolrConfig-queryResultWindowSize"><code>queryResultWindowSize</code></a> configuration options based on your expected page sizes.</p>
+<p>In most search applications, the "top" matching results (sorted by score, or some other criteria) are displayed to some human user.</p>
 </div>
-<div class="sect2">
-<h3 id="PaginationofResults-BasicPaginationExamples">Basic Pagination Examples</h3>
 <div class="paragraph">
-<p>The easiest way to think about simple pagination, is to simply multiply the page number you want (treating the "first" page number as "0") by the number of rows per page; such as in the following psuedo-code:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="pygments highlight"><code data-lang="plain">function fetch_solr_page($page_number, $rows_per_page) {
-  $start = $page_number * $rows_per_page
-  $params = [ q = $some_query, rows = $rows_per_page, start = $start ]
-  return fetch_solr($params)
-}</code></pre>
+<p>In many applications the UI for these sorted results are displayed to the user in "pages" containing a fixed number of matching results, and users don&#8217;t typically look at results past the first few pages worth of results.</p>
 </div>
 </div>
 </div>
-<div class="sect2">
-<h3 id="PaginationofResults-HowBasicPaginationisAffectedbyIndexUpdates">How Basic Pagination is Affected by Index Updates</h3>
-<div class="paragraph">
-<p>The <code>start</code> param specified in a request to Solr indicates an <strong>absolute</strong> "offset" in the complete sorted list of matches that the client wants Solr to use as the beginning of the current "page". If an index modification (such as adding or removing documents) which affects the sequence of ordered documents matching a query occurs in between two requests from a client for subsequent pages of results, then it is possible that these modifications can result in the same document being returned on multiple pages, or documents being "skipped" as the result set shrinks or grows. For example: consider an index containing 26 documents like so:</p>
-</div>
-<div class="paragraph">
-<p>id</p>
-</div>
+<div class="sect1">
+<h2 id="basic-pagination">Basic Pagination</h2>
+<div class="sectionbody">
 <div class="paragraph">
-<p>name</p>
+<p>In Solr, this basic paginated searching is supported using the <code>start</code> and <code>rows</code> parameters, and performance of this common behaviour can be tuned by utilizing the <a href="query-settings-in-solrconfig.html#QuerySettingsinSolrConfig-queryResultCache"><code>queryResultCache</code></a> and adjusting the <a href="query-settings-in-solrconfig.html#QuerySettingsinSolrConfig-queryResultWindowSize"><code>queryResultWindowSize</code></a> configuration options based on your expected page sizes.</p>
 </div>
+<div class="sect2">
+<h3 id="basic-pagination-examples">Basic Pagination Examples</h3>
 <div class="paragraph">
-<p>1</p>
+<p>The easiest way to think about simple pagination, is to simply multiply the page number you want (treating the "first" page number as "0") by the number of rows per page; such as in the following pseudo-code:</p>
 </div>
-<div class="paragraph">
-<p>A</p>
+<div class="listingblock">
+<div class="content">
+<pre class="pygments highlight"><code data-lang="java">function <span style="color: #0000FF">fetch_solr_page</span><span style="color: #666666">(</span>$page_number<span style="color: #666666">,</span> $rows_per_page<span style="color: #666666">)</span> <span style="color: #666666">{</span>
+  $start <span style="color: #666666">=</span> $page_number <span style="color: #666666">*</span> $rows_per_page
+  $params <span style="color: #666666">=</span> <span style="color: #666666">[</span> q <span style="color: #666666">=</span> $some_query<span style="color: #666666">,</span> rows <span style="color: #666666">=</span> $rows_per_page<span style="color: #666666">,</span> start <span style="color: #666666">=</span> $start <span style="color: #666666">]</span>
+  <span style="color: #008000; font-weight: bold">return</span> fetch_solr<span style="color: #666666">(</span>$params<span style="color: #666666">)</span>
+<span style="color: #666666">}</span></code></pre>
 </div>
-<div class="paragraph">
-<p>2</p>
 </div>
-<div class="paragraph">
-<p>B</p>
 </div>
+<div class="sect2">
+<h3 id="how-basic-pagination-is-affected-by-index-updates">How Basic Pagination is Affected by Index Updates</h3>
 <div class="paragraph">
-<p>&#8230;&#8203;</p>
+<p>The <code>start</code> param specified in a request to Solr indicates an <strong>absolute</strong> "offset" in the complete sorted list of matches that the client wants Solr to use as the beginning of the current "page".</p>
 </div>
 <div class="paragraph">
-<p>26</p>
+<p>If an index modification (such as adding or removing documents) which affects the sequence of ordered documents matching a query occurs in between two requests from a client for subsequent pages of results, then it is possible that these modifications can result in the same document being returned on multiple pages, or documents being "skipped" as the result set shrinks or grows.</p>
 </div>
 <div class="paragraph">
-<p>Z</p>
+<p>For example, consider an index containing 26 documents like so:</p>
 </div>
+<table class="tableblock frame-all grid-all" style="width: 30%;">
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">id</th>
+<th class="tableblock halign-left valign-top">name</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">A</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">2</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">B</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">&#8230;&#8203;</p></td>
+<td class="tableblock halign-left valign-top"></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">26</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Z</p></td>
+</tr>
+</tbody>
+</table>
 <div class="paragraph">
 <p>Followed by the following requests &amp; index modifications interleaved:</p>
 </div>
@@ -1384,34 +1403,49 @@ $('#toc').on('click', 'a', function() {
 </div>
 </div>
 <div class="sect2">
-<h3 id="PaginationofResults-PerformanceProblemswith_DeepPaging_">Performance Problems with "Deep Paging"</h3>
+<h3 id="performance-problems-with-deep-paging">Performance Problems with "Deep Paging"</h3>
+<div class="paragraph">
+<p>In some situations, the results of a Solr search are not destined for a simple paginated user interface.</p>
+</div>
+<div class="paragraph">
+<p>When you wish to fetch a very large number of sorted results from Solr to feed into an external system, using very large values for the <code>start</code> or <code>rows</code> parameters can be very inefficient. Pagination using <code>start</code> and <code>rows</code> not only require Solr to compute (and sort) in memory all of the matching documents that should be fetched for the current page, but also all of the documents that would have appeared on previous pages.</p>
+</div>
 <div class="paragraph">
-<p>In some situations, the results of a Solr search are not destined for a simple paginated user interface. When you wish to fetch a very large number of sorted results from Solr to feed into an external system, using very large values for the <code>start</code> or <code>rows</code> parameters can be very inefficient. Pagination using <code>start</code> and <code>rows</code> not only require Solr to compute (and sort) in memory all of the matching documents that should be fetched for the current page, but also all of the documents that would have appeared on previous pages. So while a request for <code>start=0&amp;rows=1000000</code> may be obviously inefficient because it requires Solr to maintain &amp; sort in memory a set of 1 million documents, likewise a request for <code>start=999000&amp;rows=1000</code> is equally inefficient for the same reasons. Solr can&#8217;t compute which matching document is the 999001st result in sorted order, without first determining what the first 
 999000 matching sorted results are. If the index is distributed, which is common when running in SolrCloud mode, then 1 million documents are retrieved from <strong>each shard</strong>. For a ten shard index, ten million entries must be retrieved and sorted to figure out the 1000 documents that match those query parameters.</p>
+<p>While a request for <code>start=0&amp;rows=1000000</code> may be obviously inefficient because it requires Solr to maintain &amp; sort in memory a set of 1 million documents, likewise a request for <code>start=999000&amp;rows=1000</code> is equally inefficient for the same reasons. Solr can&#8217;t compute which matching document is the 999001st result in sorted order, without first determining what the first 999000 matching sorted results are.</p>
+</div>
+<div class="paragraph">
+<p>If the index is distributed, which is common when running in SolrCloud mode, then 1 million documents are retrieved from <strong>each shard</strong>. For a ten shard index, ten million entries must be retrieved and sorted to figure out the 1000 documents that match those query parameters.</p>
 </div>
 </div>
 </div>
 </div>
 <div class="sect1">
-<h2 id="PaginationofResults-FetchingALargeNumberofSortedResults_Cursors">Fetching A Large Number of Sorted Results: Cursors</h2>
+<h2 id="fetching-a-large-number-of-sorted-results-cursors">Fetching A Large Number of Sorted Results: Cursors</h2>
 <div class="sectionbody">
 <div class="paragraph">
-<p>As an alternative to increasing the "start" parameter to request subsequent pages of sorted results, Solr supports using a "Cursor" to scan through results. Cursors in Solr are a logical concept, that doesn&#8217;t involve caching any state information on the server. Instead the sort values of the last document returned to the client are used to compute a "mark" representing a logical point in the ordered space of sort values. That "mark" can be specified in the parameters of subsequent requests to tell Solr where to continue.</p>
+<p>As an alternative to increasing the "start" parameter to request subsequent pages of sorted results, Solr supports using a "Cursor" to scan through results.</p>
+</div>
+<div class="paragraph">
+<p>Cursors in Solr are a logical concept that doesn&#8217;t involve caching any state information on the server. Instead the sort values of the last document returned to the client are used to compute a "mark" representing a logical point in the ordered space of sort values. That "mark" can be specified in the parameters of subsequent requests to tell Solr where to continue.</p>
 </div>
 <div class="sect2">
-<h3 id="PaginationofResults-UsingCursors">Using Cursors</h3>
+<h3 id="using-cursors">Using Cursors</h3>
+<div class="paragraph">
+<p>To use a cursor with Solr, specify a <code>cursorMark</code> parameter with the value of <code>\*</code>. You can think of this being analogous to <code>start=0</code> as a way to tell Solr "start at the beginning of my sorted results" except that it also informs Solr that you want to use a Cursor.</p>
+</div>
 <div class="paragraph">
-<p>To use a cursor with Solr, specify a <strong><code>cursorMark</code></strong> parameter with the value of <code>" * "</code>. You can think of this being analogous to <code>start=0</code> as a way to tell Solr "start at the beginning of my sorted results" except that it also informs Solr that you want to use a Cursor. So in addition to returning the top N sorted results (where you can control N using the <code>rows</code> parameter) the Solr response will also include an encoded String named <strong><code>nextCursorMark</code></strong> . You then take the <code>nextCursorMark</code> String value from the response, and pass it back to Solr as the <code>cursorMark</code> parameter for your next request. You can repeat this process until you&#8217;ve fetched as many docs as you want, or until the <code>nextCursorMark</code> returned matches the <code>cursorMark</code> you&#8217;ve already specified&#8201;&#8212;&#8201;indicating that there are no more results.</p>
+<p>In addition to returning the top N sorted results (where you can control N using the <code>rows</code> parameter) the Solr response will also include an encoded String named <code>nextCursorMark</code>. You then take the <code>nextCursorMark</code> String value from the response, and pass it back to Solr as the <code>cursorMark</code> parameter for your next request. You can repeat this process until you&#8217;ve fetched as many docs as you want, or until the <code>nextCursorMark</code> returned matches the <code>cursorMark</code> you&#8217;ve already specified&#8201;&#8212;&#8201;indicating that there are no more results.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="PaginationofResults-ConstraintswhenusingCursors">Constraints when using Cursors</h3>
+<h3 id="constraints-when-using-cursors">Constraints when using Cursors</h3>
 <div class="paragraph">
 <p>There are a few important constraints to be aware of when using <code>cursorMark</code> parameter in a Solr request</p>
 </div>
 <div class="olist arabic">
 <ol class="arabic">
 <li>
-<p><code>cursorMark</code> and <code>start</code> are mutually exclusive parameters</p>
+<p><code>cursorMark</code> and <code>start</code> are mutually exclusive parameters.</p>
 <div class="ulist">
 <ul>
 <li>
@@ -1421,7 +1455,7 @@ $('#toc').on('click', 'a', function() {
 </div>
 </li>
 <li>
-<p><code>sort</code> clauses must include the uniqueKey field (either &#8220;<code>asc</code>&#8221; or `"desc`")</p>
+<p><code>sort</code> clauses must include the uniqueKey field (either <code>asc</code> or <code>desc</code>).</p>
 <div class="ulist">
 <ul>
 <li>
@@ -1431,7 +1465,10 @@ $('#toc').on('click', 'a', function() {
 </div>
 </li>
 <li>
-<p>Sorts including <a href="working-with-dates.html#working-with-dates">Date Math</a> based functions that involve calculations relative to <code>NOW</code> will cause confusing results, since every document will get a new sort value on every subsequent request. This can easily result in cursors that never end, and constantly return the same documents over and over – even if the documents are never updated. In this situation, choose &amp; re-use a fixed value for the <a href="working-with-dates.html#WorkingwithDates-NOW"><code>NOW</code> request param</a> in all of your cursor requests.</p>
+<p>Sorts including <a href="working-with-dates.html#working-with-dates">Date Math</a> based functions that involve calculations relative to <code>NOW</code> will cause confusing results, since every document will get a new sort value on every subsequent request. This can easily result in cursors that never end, and constantly return the same documents over and over – even if the documents are never updated.</p>
+<div class="paragraph">
+<p>In this situation, choose &amp; re-use a fixed value for the <a href="working-with-dates.html#WorkingwithDates-NOW"><code>NOW</code> request param</a> in all of your cursor requests.</p>
+</div>
 </li>
 </ol>
 </div>
@@ -1440,11 +1477,11 @@ $('#toc').on('click', 'a', function() {
 </div>
 </div>
 <div class="sect2">
-<h3 id="PaginationofResults-CursorExamples">Cursor Examples</h3>
+<h3 id="cursor-examples">Cursor Examples</h3>
 <div class="sect3">
-<h4 id="PaginationofResults-FetchAllDocs">Fetch All Docs</h4>
+<h4 id="fetch-all-docs">Fetch All Docs</h4>
 <div class="paragraph">
-<p>The psuedo-code shown here shows the basic logic involved in fetching all documents matching a query using a cursor:</p>
+<p>The pseudo-code shown here shows the basic logic involved in fetching all documents matching a query using a cursor:</p>
 </div>
 <div class="listingblock">
 <div class="content">
@@ -1463,7 +1500,7 @@ while (not $done) {
 </div>
 </div>
 <div class="paragraph">
-<p>Using SolrJ, this psuedo-code would be:</p>
+<p>Using SolrJ, this pseudo-code would be:</p>
 </div>
 <div class="listingblock">
 <div class="content">
@@ -1487,42 +1524,42 @@ String cursorMark <span style="color: #6
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="pygments highlight"><code data-lang="java">$ curl <span style="border: 1px solid #FF0000">&#39;</span><span style="color: #666666">...&amp;</span>rows<span style="color: #666666">=10&amp;</span>sort<span style="color: #666666">=</span>id<span style="color: #666666">+</span>asc<span style="color: #666666">&amp;</span>cursorMark<span style="color: #666666">=*</span><span style="border: 1px solid #FF0000">&#39;</span>
-<span style="color: #666666">{</span>
-  <span style="color: #BA2121">&quot;response&quot;</span><span style="color: #666666">:{</span><span style="color: #BA2121">&quot;numFound&quot;</span><span style="color: #666666">:32,</span><span style="color: #BA2121">&quot;start&quot;</span><span style="color: #666666">:0,</span><span style="color: #BA2121">&quot;docs&quot;</span><span style="color: #666666">:[</span>
-    <span style="color: #408080; font-style: italic">// ... 10 docs here ...</span>
-  <span style="color: #666666">]},</span>
-  <span style="color: #BA2121">&quot;nextCursorMark&quot;</span><span style="color: #666666">:</span><span style="color: #BA2121">&quot;AoEjR0JQ&quot;</span><span style="color: #666666">}</span>
-$ curl <span style="border: 1px solid #FF0000">&#39;</span><span style="color: #666666">...&amp;</span>rows<span style="color: #666666">=10&amp;</span>sort<span style="color: #666666">=</span>id<span style="color: #666666">+</span>asc<span style="color: #666666">&amp;</span>cursorMark<span style="color: #666666">=</span>AoEjR0JQ<span style="border: 1px solid #FF0000">&#39;</span>
-<span style="color: #666666">{</span>
-  <span style="color: #BA2121">&quot;response&quot;</span><span style="color: #666666">:{</span><span style="color: #BA2121">&quot;numFound&quot;</span><span style="color: #666666">:32,</span><span style="color: #BA2121">&quot;start&quot;</span><span style="color: #666666">:0,</span><span style="color: #BA2121">&quot;docs&quot;</span><span style="color: #666666">:[</span>
-    <span style="color: #408080; font-style: italic">// ... 10 more docs here ...</span>
-  <span style="color: #666666">]},</span>
-  <span style="color: #BA2121">&quot;nextCursorMark&quot;</span><span style="color: #666666">:</span><span style="color: #BA2121">&quot;AoEpVkRCREIxQTE2&quot;</span><span style="color: #666666">}</span>
-$ curl <span style="border: 1px solid #FF0000">&#39;</span><span style="color: #666666">...&amp;</span>rows<span style="color: #666666">=10&amp;</span>sort<span style="color: #666666">=</span>id<span style="color: #666666">+</span>asc<span style="color: #666666">&amp;</span>cursorMark<span style="color: #666666">=</span>AoEpVkRCREIxQTE2<span style="border: 1px solid #FF0000">&#39;</span>
-<span style="color: #666666">{</span>
-  <span style="color: #BA2121">&quot;response&quot;</span><span style="color: #666666">:{</span><span style="color: #BA2121">&quot;numFound&quot;</span><span style="color: #666666">:32,</span><span style="color: #BA2121">&quot;start&quot;</span><span style="color: #666666">:0,</span><span style="color: #BA2121">&quot;docs&quot;</span><span style="color: #666666">:[</span>
-    <span style="color: #408080; font-style: italic">// ... 10 more docs here ...</span>
-  <span style="color: #666666">]},</span>
-  <span style="color: #BA2121">&quot;nextCursorMark&quot;</span><span style="color: #666666">:</span><span style="color: #BA2121">&quot;AoEmbWF4dG9y&quot;</span><span style="color: #666666">}</span>
-$ curl <span style="border: 1px solid #FF0000">&#39;</span><span style="color: #666666">...&amp;</span>rows<span style="color: #666666">=10&amp;</span>sort<span style="color: #666666">=</span>id<span style="color: #666666">+</span>asc<span style="color: #666666">&amp;</span>cursorMark<span style="color: #666666">=</span>AoEmbWF4dG9y<span style="border: 1px solid #FF0000">&#39;</span>
-<span style="color: #666666">{</span>
-  <span style="color: #BA2121">&quot;response&quot;</span><span style="color: #666666">:{</span><span style="color: #BA2121">&quot;numFound&quot;</span><span style="color: #666666">:32,</span><span style="color: #BA2121">&quot;start&quot;</span><span style="color: #666666">:0,</span><span style="color: #BA2121">&quot;docs&quot;</span><span style="color: #666666">:[</span>
-    <span style="color: #408080; font-style: italic">// ... 2 docs here because we&#39;ve reached the end.</span>
-  <span style="color: #666666">]},</span>
-  <span style="color: #BA2121">&quot;nextCursorMark&quot;</span><span style="color: #666666">:</span><span style="color: #BA2121">&quot;AoEpdmlld3Nvbmlj&quot;</span><span style="color: #666666">}</span>
-$ curl <span style="border: 1px solid #FF0000">&#39;</span><span style="color: #666666">...&amp;</span>rows<span style="color: #666666">=10&amp;</span>sort<span style="color: #666666">=</span>id<span style="color: #666666">+</span>asc<span style="color: #666666">&amp;</span>cursorMark<span style="color: #666666">=</span>AoEpdmlld3Nvbmlj<span style="border: 1px solid #FF0000">&#39;</span>
-<span style="color: #666666">{</span>
-  <span style="color: #BA2121">&quot;response&quot;</span><span style="color: #666666">:{</span><span style="color: #BA2121">&quot;numFound&quot;</span><span style="color: #666666">:32,</span><span style="color: #BA2121">&quot;start&quot;</span><span style="color: #666666">:0,</span><span style="color: #BA2121">&quot;docs&quot;</span><span style="color: #666666">:[</span>
-    <span style="color: #408080; font-style: italic">// no more docs here, and note that the nextCursorMark</span>
-    <span style="color: #408080; font-style: italic">// matches the cursorMark param we used</span>
-  <span style="color: #666666">]},</span>
-  <span style="color: #BA2121">&quot;nextCursorMark&quot;</span><span style="color: #666666">:</span><span style="color: #BA2121">&quot;AoEpdmlld3Nvbmlj&quot;</span><span style="color: #666666">}</span></code></pre>
+<pre class="pygments highlight"><code data-lang="plain">$ curl &#39;...&amp;rows=10&amp;sort=id+asc&amp;cursorMark=*&#39;
+{
+  &quot;response&quot;:{&quot;numFound&quot;:32,&quot;start&quot;:0,&quot;docs&quot;:[
+    // ... 10 docs here ...
+  ]},
+  &quot;nextCursorMark&quot;:&quot;AoEjR0JQ&quot;}
+$ curl &#39;...&amp;rows=10&amp;sort=id+asc&amp;cursorMark=AoEjR0JQ&#39;
+{
+  &quot;response&quot;:{&quot;numFound&quot;:32,&quot;start&quot;:0,&quot;docs&quot;:[
+    // ... 10 more docs here ...
+  ]},
+  &quot;nextCursorMark&quot;:&quot;AoEpVkRCREIxQTE2&quot;}
+$ curl &#39;...&amp;rows=10&amp;sort=id+asc&amp;cursorMark=AoEpVkRCREIxQTE2&#39;
+{
+  &quot;response&quot;:{&quot;numFound&quot;:32,&quot;start&quot;:0,&quot;docs&quot;:[
+    // ... 10 more docs here ...
+  ]},
+  &quot;nextCursorMark&quot;:&quot;AoEmbWF4dG9y&quot;}
+$ curl &#39;...&amp;rows=10&amp;sort=id+asc&amp;cursorMark=AoEmbWF4dG9y&#39;
+{
+  &quot;response&quot;:{&quot;numFound&quot;:32,&quot;start&quot;:0,&quot;docs&quot;:[
+    // ... 2 docs here because we&#39;ve reached the end.
+  ]},
+  &quot;nextCursorMark&quot;:&quot;AoEpdmlld3Nvbmlj&quot;}
+$ curl &#39;...&amp;rows=10&amp;sort=id+asc&amp;cursorMark=AoEpdmlld3Nvbmlj&#39;
+{
+  &quot;response&quot;:{&quot;numFound&quot;:32,&quot;start&quot;:0,&quot;docs&quot;:[
+    // no more docs here, and note that the nextCursorMark
+    // matches the cursorMark param we used
+  ]},
+  &quot;nextCursorMark&quot;:&quot;AoEpdmlld3Nvbmlj&quot;}</code></pre>
 </div>
 </div>
 </div>
 <div class="sect3">
-<h4 id="PaginationofResults-FetchfirstNdocs_BasedonPostProcessing">Fetch first N docs, Based on Post Processing</h4>
+<h4 id="fetch-first-em-n-em-docs-based-on-post-processing">Fetch First <em>N</em> docs, Based on Post Processing</h4>
 <div class="paragraph">
 <p>Since the cursor is stateless from Solr&#8217;s perspective, your client code can stop fetching additional results as soon as you have decided you have enough information:</p>
 </div>
@@ -1543,37 +1580,40 @@ $ curl <span style="border: 1px solid #F
 </div>
 </div>
 <div class="sect2">
-<h3 id="PaginationofResults-HowcursorsareAffectedbyIndexUpdates">How cursors are Affected by Index Updates</h3>
+<h3 id="how-cursors-are-affected-by-index-updates">How Cursors are Affected by Index Updates</h3>
 <div class="paragraph">
 <p>Unlike basic pagination, Cursor pagination does not rely on using an absolute "offset" into the completed sorted list of matching documents. Instead, the <code>cursorMark</code> specified in a request encapsulates information about the <strong>relative</strong> position of the last document returned, based on the <strong>absolute</strong> sort values of that document. This means that the impact of index modifications is much smaller when using a cursor compared to basic pagination. Consider the same example index described when discussing basic pagination:</p>
 </div>
-<div class="paragraph">
-<p>id</p>
-</div>
-<div class="paragraph">
-<p>name</p>
-</div>
-<div class="paragraph">
-<p>1</p>
-</div>
-<div class="paragraph">
-<p>A</p>
-</div>
-<div class="paragraph">
-<p>2</p>
-</div>
-<div class="paragraph">
-<p>B</p>
-</div>
-<div class="paragraph">
-<p>&#8230;&#8203;</p>
-</div>
-<div class="paragraph">
-<p>26</p>
-</div>
-<div class="paragraph">
-<p>Z</p>
-</div>
+<table class="tableblock frame-all grid-all" style="width: 30%;">
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">id</th>
+<th class="tableblock halign-left valign-top">name</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">A</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">2</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">B</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">&#8230;&#8203;</p></td>
+<td class="tableblock halign-left valign-top"></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">26</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Z</p></td>
+</tr>
+</tbody>
+</table>
 <div class="ulist">
 <ul>
 <li>
@@ -1658,9 +1698,18 @@ $ curl <span style="border: 1px solid #F
 </div>
 </div>
 <div class="sect2">
-<h3 id="PaginationofResults-_Tailing_aCursor">"Tailing" a Cursor</h3>
+<h3 id="tailing-a-cursor">"Tailing" a Cursor</h3>
+<div class="paragraph">
+<p>Because Cursor requests are stateless, and the cursorMark values encapsulate the absolute sort values of the last document returned from a search, it&#8217;s possible to "continue" fetching additional results from a cursor that has already reached its end. If new documents are added (or existing documents are updated) to the end of the results.</p>
+</div>
+<div class="paragraph">
+<p>You can think of this as similar to using something like "tail -f" in Unix. The most common examples of how this can be useful is when you have a "timestamp" field recording when a document has been added/updated in your index. Client applications can continuously poll a cursor using a <code>sort=timestamp asc, id asc</code> for documents matching a query, and always be notified when a document is added or updated matching the request criteria.</p>
+</div>
+<div class="paragraph">
+<p>Another common example is when you have uniqueKey values that always increase as new documents are created, and you can continuously poll a cursor using <code>sort=id asc</code> to be notified about new documents.</p>
+</div>
 <div class="paragraph">
-<p>Because Cursor requests are stateless, and the <code>cursorMark</code> values encapsulate the <strong>absolute</strong> sort values of the last document returned from a search, it&#8217;s possible to "continue" fetching additional results from a cursor that has already reached its end&#8201;&#8212;&#8201;if new documents are added (or existing documents are updated) to the end of the results. You can think of this as similar to using something like "`tail -f"` in Unix. The most common examples of how this can be useful is when you have a "timestamp" field recording when a document has been added/updated in your index. Client applications can continuously poll a cursor using a <code>sort=timestamp asc, id asc</code> for documents matching a query, and always be notified when a document is added or updated matching the request criteria. Another common example is when you have uniqueKey values that always increase as new documents are created, and you can continuously poll a cursor 
 using <code>sort=id asc</code> to be notified about new documents. The psuedo-code for tailing a cursor is only a slight modification from our early example for processing all docs matching a query:</p>
+<p>The pseudo-code for tailing a cursor is only a slight modification from our early example for processing all docs matching a query:</p>
 </div>
 <div class="listingblock">
 <div class="content">
@@ -1685,9 +1734,7 @@ $ curl <span style="border: 1px solid #F
 <i class="fa icon-tip" title="Tip"></i>
 </td>
 <td class="content">
-<div class="paragraph">
-<p>For certain specialized cases, the <a href="exporting-result-sets.html#exporting-result-sets">/export handler</a> may be an option.</p>
-</div>
+For certain specialized cases, the <a href="exporting-result-sets.html#exporting-result-sets">/export handler</a> may be an option.
 </td>
 </tr>
 </table>
@@ -1731,7 +1778,7 @@ $ curl <span style="border: 1px solid #F
             <div class="row">
                 <div class="col-lg-12 footer">
                &copy;2017 Apache Software Foundation. All rights reserved. <br />
- Site last generated: 2017-05-03 <br />
+ Site last generated: 2017-05-09 <br />
 <p><img src="solr-sunOnly-small.png" alt="Apache Solr"/></p>
                 </div>
             </div>