You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by bu...@apache.org on 2016/02/26 13:52:44 UTC

svn commit: r981208 [3/6] - in /websites/staging/lucy/trunk/content: ./ docs/test/ docs/test/Lucy/ docs/test/Lucy/Analysis/ docs/test/Lucy/Docs/ docs/test/Lucy/Docs/Cookbook/ docs/test/Lucy/Docs/Tutorial/ docs/test/Lucy/Document/ docs/test/Lucy/Highlig...

Added: websites/staging/lucy/trunk/content/docs/test/Lucy/Docs/Tutorial/QueryObjectsTutorial.html
==============================================================================
--- websites/staging/lucy/trunk/content/docs/test/Lucy/Docs/Tutorial/QueryObjectsTutorial.html (added)
+++ websites/staging/lucy/trunk/content/docs/test/Lucy/Docs/Tutorial/QueryObjectsTutorial.html Fri Feb 26 12:52:42 2016
@@ -0,0 +1,272 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+    <title>Lucy::Docs::Tutorial::QueryObjectsTutorial - Apache Lucy Documentation</title>
+    <link rel="stylesheet" type="text/css" media="screen" href="http://lucy.apache.org/css/lucy.css">
+  </head>
+
+  <body>
+
+    <div id="lucy-rigid_wrapper">
+
+      <div id="lucy-top" class="container_16 lucy-white_box_3d">
+
+        <div id="lucy-logo_box" class="grid_8">
+          <a href="/"><img src="http://lucy.apache.org/images/lucy_logo_150x100.png" alt="Apache Lucy™"></a>
+        </div> <!-- lucy-logo_box -->
+
+        <div #id="lucy-top_nav_box" class="grid_8">
+          <div id="lucy-top_nav_bar" class="container_8">
+            <ul>
+              <li><a href="http://www.apache.org/" title="Apache Software Foundation">Apache Software Foundation</a></li>
+              <li><a href="http://www.apache.org/licenses/" title="License">License</a></li>
+              <li><a href="http://www.apache.org/foundation/sponsorship.html" title="Sponsorship">Sponsorship</a></li>
+              <li><a href="http://www.apache.org/foundation/thanks.html" title="Thanks">Thanks</a></li>
+              <li><a href="http://www.apache.org/security/ " title="Security">Security</a></li>
+            </ul>
+          </div> <!-- lucy-top_nav_bar -->
+          <p><a href="http://www.apache.org/">Apache</a>&nbsp;&raquo&nbsp;<a href="/">Lucy</a>&nbsp;&raquo&nbsp;<a href="/docs/">Docs</a>&nbsp;&raquo&nbsp;<a href="/docs/test/">Test</a>&nbsp;&raquo&nbsp;<a href="/docs/test/Lucy/">Lucy</a>&nbsp;&raquo&nbsp;<a href="/docs/test/Lucy/Docs/">Docs</a>&nbsp;&raquo&nbsp;<a href="/docs/test/Lucy/Docs/Tutorial/">Tutorial</a></p>
+          <form name="lucy-top_search_box" id="lucy-top_search_box" action="http://www.google.com/search" method="get">
+            <input value="*.apache.org" name="sitesearch" type="hidden"/>
+            <input type="text" name="q" id="query" style="width:85%">
+            <input type="submit" id="submit" value="Search">
+          </form>
+        </div> <!-- lucy-top_nav_box -->
+
+        <div class="clear"></div>
+
+      </div> <!-- lucy-top -->
+
+      <div id="lucy-main_content" class="container_16 lucy-white_box_3d">
+
+        <div class="grid_4" id="lucy-left_nav_box">
+          <h6>About</h6>
+            <ul>
+              <li><a href="/">Welcome</a></li>
+              <li><a href="/clownfish.html">Clownfish</a></li>
+              <li><a href="/faq.html">FAQ</a></li>
+              <li><a href="/people.html">People</a></li>
+            </ul>
+          <h6>Resources</h6>
+            <ul>
+              <li><a href="/download.html">Download</a></li>
+              <li><a href="/mailing_lists.html">Mailing Lists</a></li>
+              <li><a href="/docs/perl/">Documentation</a></li>
+              <li><a href="http://wiki.apache.org/lucy/">Wiki</a></li>
+              <li><a href="https://issues.apache.org/jira/browse/LUCY">Issue Tracker</a></li>
+              <li><a href="/version_control.html">Version Control</a></li>
+            </ul>
+          <h6>Related Projects</h6>
+            <ul>
+              <li><a href="http://lucene.apache.org/java/">Lucene</a></li>
+              <li><a href="http://lucene.apache.org/solr/">Solr</a></li>
+              <li><a href="http://incubator.apache.org/lucene.net/">Lucene.NET</a></li>
+              <li><a href="http://lucene.apache.org/pylucene/">PyLucene</a></li>
+              <li><a href="http://lucene.apache.org/openrelevance/">Open Relevance</a></li>
+            </ul>
+        </div> <!-- lucy-left_nav_box -->
+
+        <div id="lucy-main_content_box" class="grid_9">
+          <div>
+<a name='___top' class='dummyTopAnchor' ></a>
+
+<h2><a class='u'
+name="NAME"
+>NAME</a></h2>
+
+<p>Lucy::Docs::Tutorial::QueryObjectsTutorial - Use Query objects instead of query strings.</p>
+
+<h2><a class='u'
+name="DESCRIPTION"
+>DESCRIPTION</a></h2>
+
+<p>Until now,
+our search app has had only a single search box.
+In this tutorial chapter,
+we&#8217;ll move towards an &#8220;advanced search&#8221; interface,
+by adding a &#8220;category&#8221; drop-down menu.
+Three new classes will be required:</p>
+
+<ul>
+<li><a href="../../../Lucy/Search/QueryParser.html" class="podlinkpod"
+>QueryParser</a> - Turn a query string into a <a href="../../../Lucy/Search/Query.html" class="podlinkpod"
+>Query</a> object.</li>
+
+<li><a href="../../../Lucy/Search/TermQuery.html" class="podlinkpod"
+>TermQuery</a> - Query for a specific term within a specific field.</li>
+
+<li><a href="../../../Lucy/Search/ANDQuery.html" class="podlinkpod"
+>ANDQuery</a> - &#8220;AND&#8221; together multiple Query objects to produce an intersected result set.</li>
+</ul>
+
+<h3><a class='u'
+name="Adaptations_to_indexer.pl"
+>Adaptations to indexer.pl</a></h3>
+
+<p>Our new &#8220;category&#8221; field will be a StringType field rather than a FullTextType field,
+because we will only be looking for exact matches.
+It needs to be indexed,
+but since we won&#8217;t display its value,
+it doesn&#8217;t need to be stored.</p>
+
+<pre>    my $cat_type = Lucy::Plan::StringType-&#62;new( stored =&#62; 0 );
+    $schema-&#62;spec_field( name =&#62; &#39;category&#39;, type =&#62; $cat_type );</pre>
+
+<p>There will be three possible values: &#8220;article&#8221;, &#8220;amendment&#8221;, and &#8220;preamble&#8221;, which we&#8217;ll hack out of the source file&#8217;s name during our <code>parse_file</code> subroutine:</p>
+
+<pre>    my $category
+        = $filename =~ /art/      ? &#39;article&#39;
+        : $filename =~ /amend/    ? &#39;amendment&#39;
+        : $filename =~ /preamble/ ? &#39;preamble&#39;
+        :                           die &#34;Can&#39;t derive category for $filename&#34;;
+    return {
+        title    =&#62; $title,
+        content  =&#62; $bodytext,
+        url      =&#62; &#34;/us_constitution/$filename&#34;,
+        category =&#62; $category,
+    };</pre>
+
+<h3><a class='u'
+name="Adaptations_to_search.cgi"
+>Adaptations to search.cgi</a></h3>
+
+<p>The &#8220;category&#8221; constraint will be added to our search interface using an HTML &#8220;select&#8221; element (this routine will need to be integrated into the HTML generation section of search.cgi):</p>
+
+<pre>    # Build up the HTML &#34;select&#34; object for the &#34;category&#34; field.
+    sub generate_category_select {
+        my $cat = shift;
+        my $select = qq|
+          &#60;select name=&#34;category&#34;&#62;
+            &#60;option value=&#34;&#34;&#62;All Sections&#60;/option&#62;
+            &#60;option value=&#34;article&#34;&#62;Articles&#60;/option&#62;
+            &#60;option value=&#34;amendment&#34;&#62;Amendments&#60;/option&#62;
+          &#60;/select&#62;|;
+        if ($cat) {
+            $select =~ s/&#34;$cat&#34;/&#34;$cat&#34; selected/;
+        }
+        return $select;
+    }</pre>
+
+<p>We&#8217;ll start off by loading our new modules and extracting our new CGI parameter.</p>
+
+<pre>    use Lucy::Search::QueryParser;
+    use Lucy::Search::TermQuery;
+    use Lucy::Search::ANDQuery;
+
+    ... 
+
+    my $category = decode( &#34;UTF-8&#34;, $cgi-&#62;param(&#39;category&#39;) || &#39;&#39; );</pre>
+
+<p>QueryParser&#8217;s constructor requires a &#8220;schema&#8221; argument. We can get that from our IndexSearcher:</p>
+
+<pre>    # Create an IndexSearcher and a QueryParser.
+    my $searcher = Lucy::Search::IndexSearcher-&#62;new( 
+        index =&#62; $path_to_index, 
+    );
+    my $qparser  = Lucy::Search::QueryParser-&#62;new( 
+        schema =&#62; $searcher-&#62;get_schema,
+    );</pre>
+
+<p>Previously, we have been handing raw query strings to IndexSearcher. Behind the scenes, IndexSearcher has been using a QueryParser to turn those query strings into Query objects. Now, we will bring QueryParser into the foreground and parse the strings explicitly.</p>
+
+<pre>    my $query = $qparser-&#62;parse($q);</pre>
+
+<p>If the user has specified a category, we&#8217;ll use an ANDQuery to join our parsed query together with a TermQuery representing the category.</p>
+
+<pre>    if ($category) {
+        my $category_query = Lucy::Search::TermQuery-&#62;new(
+            field =&#62; &#39;category&#39;, 
+            term  =&#62; $category,
+        );
+        $query = Lucy::Search::ANDQuery-&#62;new(
+            children =&#62; [ $query, $category_query ]
+        );
+    }</pre>
+
+<p>Now when we execute the query&#8230;</p>
+
+<pre>    # Execute the Query and get a Hits object.
+    my $hits = $searcher-&#62;hits(
+        query      =&#62; $query,
+        offset     =&#62; $offset,
+        num_wanted =&#62; $page_size,
+    );</pre>
+
+<p>&#8230; we&#8217;ll get a result set which is the intersection of the parsed query and the category query.</p>
+
+<h3><a class='u'
+name="Using_TermQuery_with_full_text_fields"
+>Using TermQuery with full text fields</a></h3>
+
+<p>When querying full text fields, the easiest way is to create query objects using QueryParser. But sometimes you want to create TermQuery for a single term in a FullTextType field directly. In this case, we have to run the search term through the field&#8217;s analyzer to make sure it gets normalized in the same way as the field&#8217;s content.</p>
+
+<pre>    sub make_term_query {
+        my ($field, $term) = @_;
+
+        my $token;
+        my $type = $schema-&#62;fetch_type($field);
+
+        if ( $type-&#62;isa(&#39;Lucy::Plan::FullTextType&#39;) ) {
+            # Run the term through the full text analysis chain.
+            my $analyzer = $type-&#62;get_analyzer;
+            my $tokens   = $analyzer-&#62;split($term);
+
+            if ( @$tokens != 1 ) {
+                # If the term expands to more than one token, or no
+                # tokens at all, it will never match a token in the
+                # full text field.
+                return Lucy::Search::NoMatchQuery-&#62;new;
+            }
+
+            $token = $tokens-&#62;[0];
+        }
+        else {
+            # Exact match for other types.
+            $token = $term;
+        }
+
+        return Lucy::Search::TermQuery-&#62;new(
+            field =&#62; $field,
+            term  =&#62; $token,
+        );
+    }</pre>
+
+<h3><a class='u'
+name="Congratulations!"
+>Congratulations!</a></h3>
+
+<p>You&#8217;ve made it to the end of the tutorial.</p>
+
+<h3><a class='u'
+name="See_Also"
+>See Also</a></h3>
+
+<p>For additional thematic documentation, see the Apache Lucy <a href="../../../Lucy/Docs/Cookbook.html" class="podlinkpod"
+>Cookbook</a>.</p>
+
+<p>ANDQuery has a companion class, <a href="../../../Lucy/Search/ORQuery.html" class="podlinkpod"
+>ORQuery</a>, and a close relative, <a href="../../../Lucy/Search/RequiredOptionalQuery.html" class="podlinkpod"
+>RequiredOptionalQuery</a>.</p>
+
+</div>
+
+        </div> <!-- lucy-main_content_box --> 
+        <div class="clear"></div>
+
+      </div> <!-- lucy-main_content -->
+
+      <div id="lucy-copyright" class="container_16">
+        <p>Copyright &#169; 2010-2015 The Apache Software Foundation, Licensed under the 
+           <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.
+           <br/>
+           Apache Lucy, Lucy, Apache, the Apache feather logo, and the Apache Lucy project logo are trademarks of The
+           Apache Software Foundation.  All other marks mentioned may be trademarks or registered trademarks of their
+           respective owners.
+        </p>
+      </div> <!-- lucy-copyright -->
+
+    </div> <!-- lucy-rigid_wrapper -->
+
+  </body>
+</html>

Added: websites/staging/lucy/trunk/content/docs/test/Lucy/Docs/Tutorial/SimpleTutorial.html
==============================================================================
--- websites/staging/lucy/trunk/content/docs/test/Lucy/Docs/Tutorial/SimpleTutorial.html (added)
+++ websites/staging/lucy/trunk/content/docs/test/Lucy/Docs/Tutorial/SimpleTutorial.html Fri Feb 26 12:52:42 2016
@@ -0,0 +1,377 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+    <title>Lucy::Docs::Tutorial::SimpleTutorial - Apache Lucy Documentation</title>
+    <link rel="stylesheet" type="text/css" media="screen" href="http://lucy.apache.org/css/lucy.css">
+  </head>
+
+  <body>
+
+    <div id="lucy-rigid_wrapper">
+
+      <div id="lucy-top" class="container_16 lucy-white_box_3d">
+
+        <div id="lucy-logo_box" class="grid_8">
+          <a href="/"><img src="http://lucy.apache.org/images/lucy_logo_150x100.png" alt="Apache Lucy™"></a>
+        </div> <!-- lucy-logo_box -->
+
+        <div #id="lucy-top_nav_box" class="grid_8">
+          <div id="lucy-top_nav_bar" class="container_8">
+            <ul>
+              <li><a href="http://www.apache.org/" title="Apache Software Foundation">Apache Software Foundation</a></li>
+              <li><a href="http://www.apache.org/licenses/" title="License">License</a></li>
+              <li><a href="http://www.apache.org/foundation/sponsorship.html" title="Sponsorship">Sponsorship</a></li>
+              <li><a href="http://www.apache.org/foundation/thanks.html" title="Thanks">Thanks</a></li>
+              <li><a href="http://www.apache.org/security/ " title="Security">Security</a></li>
+            </ul>
+          </div> <!-- lucy-top_nav_bar -->
+          <p><a href="http://www.apache.org/">Apache</a>&nbsp;&raquo&nbsp;<a href="/">Lucy</a>&nbsp;&raquo&nbsp;<a href="/docs/">Docs</a>&nbsp;&raquo&nbsp;<a href="/docs/test/">Test</a>&nbsp;&raquo&nbsp;<a href="/docs/test/Lucy/">Lucy</a>&nbsp;&raquo&nbsp;<a href="/docs/test/Lucy/Docs/">Docs</a>&nbsp;&raquo&nbsp;<a href="/docs/test/Lucy/Docs/Tutorial/">Tutorial</a></p>
+          <form name="lucy-top_search_box" id="lucy-top_search_box" action="http://www.google.com/search" method="get">
+            <input value="*.apache.org" name="sitesearch" type="hidden"/>
+            <input type="text" name="q" id="query" style="width:85%">
+            <input type="submit" id="submit" value="Search">
+          </form>
+        </div> <!-- lucy-top_nav_box -->
+
+        <div class="clear"></div>
+
+      </div> <!-- lucy-top -->
+
+      <div id="lucy-main_content" class="container_16 lucy-white_box_3d">
+
+        <div class="grid_4" id="lucy-left_nav_box">
+          <h6>About</h6>
+            <ul>
+              <li><a href="/">Welcome</a></li>
+              <li><a href="/clownfish.html">Clownfish</a></li>
+              <li><a href="/faq.html">FAQ</a></li>
+              <li><a href="/people.html">People</a></li>
+            </ul>
+          <h6>Resources</h6>
+            <ul>
+              <li><a href="/download.html">Download</a></li>
+              <li><a href="/mailing_lists.html">Mailing Lists</a></li>
+              <li><a href="/docs/perl/">Documentation</a></li>
+              <li><a href="http://wiki.apache.org/lucy/">Wiki</a></li>
+              <li><a href="https://issues.apache.org/jira/browse/LUCY">Issue Tracker</a></li>
+              <li><a href="/version_control.html">Version Control</a></li>
+            </ul>
+          <h6>Related Projects</h6>
+            <ul>
+              <li><a href="http://lucene.apache.org/java/">Lucene</a></li>
+              <li><a href="http://lucene.apache.org/solr/">Solr</a></li>
+              <li><a href="http://incubator.apache.org/lucene.net/">Lucene.NET</a></li>
+              <li><a href="http://lucene.apache.org/pylucene/">PyLucene</a></li>
+              <li><a href="http://lucene.apache.org/openrelevance/">Open Relevance</a></li>
+            </ul>
+        </div> <!-- lucy-left_nav_box -->
+
+        <div id="lucy-main_content_box" class="grid_9">
+          <div>
+<a name='___top' class='dummyTopAnchor' ></a>
+
+<h2><a class='u'
+name="NAME"
+>NAME</a></h2>
+
+<p>Lucy::Docs::Tutorial::SimpleTutorial - Bare-bones search app.</p>
+
+<h2><a class='u'
+name="DESCRIPTION"
+>DESCRIPTION</a></h2>
+
+<h3><a class='u'
+name="Setup"
+>Setup</a></h3>
+
+<p>Copy the text presentation of the US Constitution from the <code>sample</code> directory of the Apache Lucy distribution to the base level of your web server&#8217;s <code>htdocs</code> directory.</p>
+
+<pre>    $ cp -R sample/us_constitution /usr/local/apache2/htdocs/</pre>
+
+<h3><a class='u'
+name="Indexing:_indexer.pl"
+>Indexing: indexer.pl</a></h3>
+
+<p>Our first task will be to create an application called <code>indexer.pl</code> which builds a searchable &#8220;inverted index&#8221; from a collection of documents.</p>
+
+<p>After we specify some configuration variables and load all necessary modules&#8230;</p>
+
+<pre>    #!/usr/local/bin/perl
+    use strict;
+    use warnings;
+
+    # (Change configuration variables as needed.)
+    my $path_to_index = &#39;/path/to/index&#39;;
+    my $uscon_source  = &#39;/usr/local/apache2/htdocs/us_constitution&#39;;
+
+    use Lucy::Simple;
+    use File::Spec::Functions qw( catfile );</pre>
+
+<p>&#8230; we&#8217;ll start by creating a <a href="../../../Lucy/Simple.html" class="podlinkpod"
+>Lucy::Simple</a> object, telling it where we&#8217;d like the index to be located and the language of the source material.</p>
+
+<pre>    my $lucy = Lucy::Simple-&#62;new(
+        path     =&#62; $path_to_index,
+        language =&#62; &#39;en&#39;,
+    );</pre>
+
+<p>Next, we&#8217;ll add a subroutine which parses our sample documents.</p>
+
+<pre>    # Parse a file from our US Constitution collection and return a hashref with
+    # the fields title, body, and url.
+    sub parse_file {
+        my $filename = shift;
+        my $filepath = catfile( $uscon_source, $filename );
+        open( my $fh, &#39;&#60;&#39;, $filepath ) or die &#34;Can&#39;t open &#39;$filepath&#39;: $!&#34;;
+        my $text = do { local $/; &#60;$fh&#62; };    # slurp file content
+        $text =~ /\A(.+?)^\s+(.*)/ms
+            or die &#34;Can&#39;t extract title/bodytext from &#39;$filepath&#39;&#34;;
+        my $title    = $1;
+        my $bodytext = $2;
+        return {
+            title    =&#62; $title,
+            content  =&#62; $bodytext,
+            url      =&#62; &#34;/us_constitution/$filename&#34;,
+        };
+    }</pre>
+
+<p>Add some elementary directory reading code&#8230;</p>
+
+<pre>    # Collect names of source files.
+    opendir( my $dh, $uscon_source )
+        or die &#34;Couldn&#39;t opendir &#39;$uscon_source&#39;: $!&#34;;
+    my @filenames = grep { $_ =~ /\.txt/ } readdir $dh;</pre>
+
+<p>&#8230; and now we&#8217;re ready for the meat of indexer.pl &#8211; which occupies exactly one line of code.</p>
+
+<pre>    foreach my $filename (@filenames) {
+        my $doc = parse_file($filename);
+        $lucy-&#62;add_doc($doc);  # ta-da!
+    }</pre>
+
+<h3><a class='u'
+name="Search:_search.cgi"
+>Search: search.cgi</a></h3>
+
+<p>As with our indexing app, the bulk of the code in our search script won&#8217;t be Lucy-specific.</p>
+
+<p>The beginning is dedicated to CGI processing and configuration.</p>
+
+<pre>    #!/usr/local/bin/perl -T
+    use strict;
+    use warnings;
+
+    # (Change configuration variables as needed.)
+    my $path_to_index = &#39;/path/to/index&#39;;
+
+    use CGI;
+    use List::Util qw( max min );
+    use POSIX qw( ceil );
+    use Encode qw( decode );
+    use Lucy::Simple;
+
+    my $cgi       = CGI-&#62;new;
+    my $q         = decode( &#34;UTF-8&#34;, $cgi-&#62;param(&#39;q&#39;) || &#39;&#39; );
+    my $offset    = decode( &#34;UTF-8&#34;, $cgi-&#62;param(&#39;offset&#39;) || 0 );
+    my $page_size = 10;</pre>
+
+<p>Once that&#8217;s out of the way, we create our Lucy::Simple object and feed it a query string.</p>
+
+<pre>    my $lucy = Lucy::Simple-&#62;new(
+        path     =&#62; $path_to_index,
+        language =&#62; &#39;en&#39;,
+    );
+    my $hit_count = $lucy-&#62;search(
+        query      =&#62; $q,
+        offset     =&#62; $offset,
+        num_wanted =&#62; $page_size,
+    );</pre>
+
+<p>The value returned by <a href="../../../Lucy/Simple.html#search" class="podlinkpod"
+>search()</a> is the total number of documents in the collection which matched the query. We&#8217;ll show this hit count to the user, and also use it in conjunction with the parameters <code>offset</code> and <code>num_wanted</code> to break up results into &#8220;pages&#8221; of manageable size.</p>
+
+<p>Calling <a href="../../../Lucy/Simple.html#search" class="podlinkpod"
+>search()</a> on our Simple object turns it into an iterator. Invoking <a href="../../../Lucy/Simple.html#next" class="podlinkpod"
+>next()</a> now returns hits one at a time as <a href="../../../Lucy/Document/HitDoc.html" class="podlinkpod"
+>HitDoc</a> objects, starting with the most relevant.</p>
+
+<pre>    # Create result list.
+    my $report = &#39;&#39;;
+    while ( my $hit = $lucy-&#62;next ) {
+        my $score = sprintf( &#34;%0.3f&#34;, $hit-&#62;get_score );
+        $report .= qq|
+            &#60;p&#62;
+              &#60;a href=&#34;$hit-&#62;{url}&#34;&#62;&#60;strong&#62;$hit-&#62;{title}&#60;/strong&#62;&#60;/a&#62;
+              &#60;em&#62;$score&#60;/em&#62;
+              &#60;br&#62;
+              &#60;span class=&#34;excerptURL&#34;&#62;$hit-&#62;{url}&#60;/span&#62;
+            &#60;/p&#62;
+            |;
+    }</pre>
+
+<p>The rest of the script is just text wrangling.</p>
+
+<pre>    #---------------------------------------------------------------#
+    # No tutorial material below this point - just html generation. #
+    #---------------------------------------------------------------#
+
+    # Generate paging links and hit count, print and exit.
+    my $paging_links = generate_paging_info( $q, $hit_count );
+    blast_out_content( $q, $report, $paging_links );
+
+    # Create html fragment with links for paging through results n-at-a-time.
+    sub generate_paging_info {
+        my ( $query_string, $total_hits ) = @_;
+        my $escaped_q = CGI::escapeHTML($query_string);
+        my $paging_info;
+        if ( !length $query_string ) {
+            # No query?  No display.
+            $paging_info = &#39;&#39;;
+        }
+        elsif ( $total_hits == 0 ) {
+            # Alert the user that their search failed.
+            $paging_info
+                = qq|&#60;p&#62;No matches for &#60;strong&#62;$escaped_q&#60;/strong&#62;&#60;/p&#62;|;
+        }
+        else {
+            # Calculate the nums for the first and last hit to display.
+            my $last_result = min( ( $offset + $page_size ), $total_hits );
+            my $first_result = min( ( $offset + 1 ), $last_result );
+
+            # Display the result nums, start paging info.
+            $paging_info = qq|
+                &#60;p&#62;
+                    Results &#60;strong&#62;$first_result-$last_result&#60;/strong&#62; 
+                    of &#60;strong&#62;$total_hits&#60;/strong&#62; 
+                    for &#60;strong&#62;$escaped_q&#60;/strong&#62;.
+                &#60;/p&#62;
+                &#60;p&#62;
+                    Results Page:
+                |;
+
+            # Calculate first and last hits pages to display / link to.
+            my $current_page = int( $first_result / $page_size ) + 1;
+            my $last_page    = ceil( $total_hits / $page_size );
+            my $first_page   = max( 1, ( $current_page - 9 ) );
+            $last_page = min( $last_page, ( $current_page + 10 ) );
+
+            # Create a url for use in paging links.
+            my $href = $cgi-&#62;url( -relative =&#62; 1 );
+            $href .= &#34;?q=&#34; . CGI::escape($query_string);
+            $href .= &#34;;offset=&#34; . CGI::escape($offset);
+
+            # Generate the &#34;Prev&#34; link.
+            if ( $current_page &#62; 1 ) {
+                my $new_offset = ( $current_page - 2 ) * $page_size;
+                $href =~ s/(?&#60;=offset=)\d+/$new_offset/;
+                $paging_info .= qq|&#60;a href=&#34;$href&#34;&#62;&#38;lt;= Prev&#60;/a&#62;\n|;
+            }
+
+            # Generate paging links.
+            for my $page_num ( $first_page .. $last_page ) {
+                if ( $page_num == $current_page ) {
+                    $paging_info .= qq|$page_num \n|;
+                }
+                else {
+                    my $new_offset = ( $page_num - 1 ) * $page_size;
+                    $href =~ s/(?&#60;=offset=)\d+/$new_offset/;
+                    $paging_info .= qq|&#60;a href=&#34;$href&#34;&#62;$page_num&#60;/a&#62;\n|;
+                }
+            }
+
+            # Generate the &#34;Next&#34; link.
+            if ( $current_page != $last_page ) {
+                my $new_offset = $current_page * $page_size;
+                $href =~ s/(?&#60;=offset=)\d+/$new_offset/;
+                $paging_info .= qq|&#60;a href=&#34;$href&#34;&#62;Next =&#38;gt;&#60;/a&#62;\n|;
+            }
+
+            # Close tag.
+            $paging_info .= &#34;&#60;/p&#62;\n&#34;;
+        }
+
+        return $paging_info;
+    }
+
+    # Print content to output.
+    sub blast_out_content {
+        my ( $query_string, $hit_list, $paging_info ) = @_;
+        my $escaped_q = CGI::escapeHTML($query_string);
+        binmode( STDOUT, &#34;:encoding(UTF-8)&#34; );
+        print qq|Content-type: text/html; charset=UTF-8\n\n|;
+        print qq|
+    &#60;!DOCTYPE html PUBLIC &#34;-//W3C//DTD HTML 4.01 Transitional//EN&#34;
+        &#34;http://www.w3.org/TR/html4/loose.dtd&#34;&#62;
+    &#60;html&#62;
+    &#60;head&#62;
+      &#60;meta http-equiv=&#34;Content-type&#34; 
+        content=&#34;text/html;charset=UTF-8&#34;&#62;
+      &#60;link rel=&#34;stylesheet&#34; type=&#34;text/css&#34; 
+        href=&#34;/us_constitution/uscon.css&#34;&#62;
+      &#60;title&#62;Lucy: $escaped_q&#60;/title&#62;
+    &#60;/head&#62;
+
+    &#60;body&#62;
+
+      &#60;div id=&#34;navigation&#34;&#62;
+        &#60;form id=&#34;usconSearch&#34; action=&#34;&#34;&#62;
+          &#60;strong&#62;
+            Search the 
+            &#60;a href=&#34;/us_constitution/index.html&#34;&#62;US Constitution&#60;/a&#62;:
+          &#60;/strong&#62;
+          &#60;input type=&#34;text&#34; name=&#34;q&#34; id=&#34;q&#34; value=&#34;$escaped_q&#34;&#62;
+          &#60;input type=&#34;submit&#34; value=&#34;=&#38;gt;&#34;&#62;
+        &#60;/form&#62;
+      &#60;/div&#62;&#60;!--navigation--&#62;
+
+      &#60;div id=&#34;bodytext&#34;&#62;
+
+      $hit_list
+
+      $paging_info
+
+        &#60;p style=&#34;font-size: smaller; color: #666&#34;&#62;
+          &#60;em&#62;
+            Powered by &#60;a href=&#34;http://lucy.apache.org/&#34;
+            &#62;Apache Lucy&#60;small&#62;&#60;sup&#62;TM&#60;/sup&#62;&#60;/small&#62;&#60;/a&#62;
+          &#60;/em&#62;
+        &#60;/p&#62;
+      &#60;/div&#62;&#60;!--bodytext--&#62;
+
+    &#60;/body&#62;
+
+    &#60;/html&#62;
+    |;
+    }</pre>
+
+<h3><a class='u'
+name="OK(8230)_now_what?"
+>OK&#8230; now what?</a></h3>
+
+<p>Lucy::Simple is perfectly adequate for some tasks, but it&#8217;s not very flexible. Many people find that it doesn&#8217;t do at least one or two things they can&#8217;t live without.</p>
+
+<p>In our next tutorial chapter, <a href="../../../Lucy/Docs/Tutorial/BeyondSimpleTutorial.html" class="podlinkpod"
+>BeyondSimpleTutorial</a>, we&#8217;ll rewrite our indexing and search scripts using the classes that Lucy::Simple hides from view, opening up the possibilities for expansion; then, we&#8217;ll spend the rest of the tutorial chapters exploring these possibilities.</p>
+
+</div>
+
+        </div> <!-- lucy-main_content_box --> 
+        <div class="clear"></div>
+
+      </div> <!-- lucy-main_content -->
+
+      <div id="lucy-copyright" class="container_16">
+        <p>Copyright &#169; 2010-2015 The Apache Software Foundation, Licensed under the 
+           <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.
+           <br/>
+           Apache Lucy, Lucy, Apache, the Apache feather logo, and the Apache Lucy project logo are trademarks of The
+           Apache Software Foundation.  All other marks mentioned may be trademarks or registered trademarks of their
+           respective owners.
+        </p>
+      </div> <!-- lucy-copyright -->
+
+    </div> <!-- lucy-rigid_wrapper -->
+
+  </body>
+</html>

Modified: websites/staging/lucy/trunk/content/docs/test/Lucy/Document/Doc.html
==============================================================================
--- websites/staging/lucy/trunk/content/docs/test/Lucy/Document/Doc.html (original)
+++ websites/staging/lucy/trunk/content/docs/test/Lucy/Document/Doc.html Fri Feb 26 12:52:42 2016
@@ -71,15 +71,15 @@
           <div>
 <a name='___top' class='dummyTopAnchor' ></a>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="NAME"
->NAME</a></h1>
+>NAME</a></h2>
 
 <p>Lucy::Document::Doc - A document.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="SYNOPSIS"
->SYNOPSIS</a></h1>
+>SYNOPSIS</a></h2>
 
 <pre>    my $doc = Lucy::Document::Doc-&#62;new(
         fields =&#62; { foo =&#62; &#39;foo foo&#39;, bar =&#62; &#39;bar bar&#39; },
@@ -91,55 +91,101 @@ name="SYNOPSIS"
 <pre>    $doc-&#62;{foo} = &#39;new value for field &#34;foo&#34;&#39;;
     print &#34;foo: $doc-&#62;{foo}\n&#34;;</pre>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="DESCRIPTION"
->DESCRIPTION</a></h1>
+>DESCRIPTION</a></h2>
 
 <p>A Doc object is akin to a row in a database, in that it is made up of one or more fields, each of which has a value.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="CONSTRUCTORS"
->CONSTRUCTORS</a></h1>
+>CONSTRUCTORS</a></h2>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="new(_[labeled_params]_)"
->new( <i>[labeled params]</i> )</a></h2>
+<h3><a class='u'
+name="new"
+>new</a></h3>
 
 <pre>    my $doc = Lucy::Document::Doc-&#62;new(
         fields =&#62; { foo =&#62; &#39;foo foo&#39;, bar =&#62; &#39;bar bar&#39; },
     );</pre>
 
+<p>Create a new Document.</p>
+
 <ul>
 <li><b>fields</b> - Field-value pairs.</li>
 
 <li><b>doc_id</b> - Internal Lucy document id. Default of 0 (an invalid doc id).</li>
 </ul>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="METHODS"
->METHODS</a></h1>
+>METHODS</a></h2>
+
+<h3><a class='u'
+name="set_doc_id"
+>set_doc_id</a></h3>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="set_doc_id(doc_id)"
->set_doc_id(doc_id)</a></h2>
+<pre>    $doc-&#62;set_doc_id($doc_id);</pre>
 
 <p>Set internal Lucy document id.</p>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="get_doc_id()"
->get_doc_id()</a></h2>
+<h3><a class='u'
+name="get_doc_id"
+>get_doc_id</a></h3>
+
+<pre>    my $retval = $doc-&#62;get_doc_id();</pre>
 
 <p>Retrieve internal Lucy document id.</p>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="get_fields()"
->get_fields()</a></h2>
+<h3><a class='u'
+name="store"
+>store</a></h3>
+
+<pre>    $doc-&#62;store($field, $value);</pre>
+
+<p>Store a field value in the Doc.</p>
+
+<ul>
+<li><b>field</b> - The field name.</li>
+
+<li><b>value</b> - The value.</li>
+</ul>
+
+<h3><a class='u'
+name="get_fields"
+>get_fields</a></h3>
+
+<pre>    my $retval = $doc-&#62;get_fields();</pre>
+
+<p>Return the Doc&#8217;s backing fields hash.</p>
+
+<h3><a class='u'
+name="get_size"
+>get_size</a></h3>
+
+<pre>    my $retval = $doc-&#62;get_size();</pre>
+
+<p>Return the number of fields in the Doc.</p>
+
+<h3><a class='u'
+name="extract"
+>extract</a></h3>
+
+<pre>    my $retval = $doc-&#62;extract($field);</pre>
+
+<p>Retrieve the field&#8217;s value, or NULL if the field is not present.</p>
+
+<h3><a class='u'
+name="field_names"
+>field_names</a></h3>
+
+<pre>    my $retval = $doc-&#62;field_names();</pre>
 
-<p>Return the Doc&#39;s backing fields hash.</p>
+<p>Return a list of names of all fields present.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="INHERITANCE"
->INHERITANCE</a></h1>
+>INHERITANCE</a></h2>
 
 <p>Lucy::Document::Doc isa Clownfish::Obj.</p>
 

Modified: websites/staging/lucy/trunk/content/docs/test/Lucy/Document/HitDoc.html
==============================================================================
--- websites/staging/lucy/trunk/content/docs/test/Lucy/Document/HitDoc.html (original)
+++ websites/staging/lucy/trunk/content/docs/test/Lucy/Document/HitDoc.html Fri Feb 26 12:52:42 2016
@@ -71,15 +71,15 @@
           <div>
 <a name='___top' class='dummyTopAnchor' ></a>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="NAME"
->NAME</a></h1>
+>NAME</a></h2>
 
 <p>Lucy::Document::HitDoc - A document read from an index.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="SYNOPSIS"
->SYNOPSIS</a></h1>
+>SYNOPSIS</a></h2>
 
 <pre>    while ( my $hit_doc = $hits-&#62;next ) {
         print &#34;$hit_doc-&#62;{title}\n&#34;;
@@ -87,31 +87,35 @@ name="SYNOPSIS"
         ...
     }</pre>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="DESCRIPTION"
->DESCRIPTION</a></h1>
+>DESCRIPTION</a></h2>
 
-<p>HitDoc is the search-time relative of the index-time class Doc; it is augmented by a numeric score attribute that Doc doesn&#39;t have.</p>
+<p>HitDoc is the search-time relative of the index-time class Doc; it is augmented by a numeric score attribute that Doc doesn&#8217;t have.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="METHODS"
->METHODS</a></h1>
+>METHODS</a></h2>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="set_score(score)"
->set_score(score)</a></h2>
+<h3><a class='u'
+name="set_score"
+>set_score</a></h3>
+
+<pre>    $hit_doc-&#62;set_score($score);</pre>
 
 <p>Set score attribute.</p>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="get_score()"
->get_score()</a></h2>
+<h3><a class='u'
+name="get_score"
+>get_score</a></h3>
+
+<pre>    my $retval = $hit_doc-&#62;get_score();</pre>
 
 <p>Get score attribute.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="INHERITANCE"
->INHERITANCE</a></h1>
+>INHERITANCE</a></h2>
 
 <p>Lucy::Document::HitDoc isa <a href="../../Lucy/Document/Doc.html" class="podlinkpod"
 >Lucy::Document::Doc</a> isa Clownfish::Obj.</p>

Modified: websites/staging/lucy/trunk/content/docs/test/Lucy/Highlight/Highlighter.html
==============================================================================
--- websites/staging/lucy/trunk/content/docs/test/Lucy/Highlight/Highlighter.html (original)
+++ websites/staging/lucy/trunk/content/docs/test/Lucy/Highlight/Highlighter.html Fri Feb 26 12:52:42 2016
@@ -71,15 +71,15 @@
           <div>
 <a name='___top' class='dummyTopAnchor' ></a>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="NAME"
->NAME</a></h1>
+>NAME</a></h2>
 
 <p>Lucy::Highlight::Highlighter - Create and highlight excerpts.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="SYNOPSIS"
->SYNOPSIS</a></h1>
+>SYNOPSIS</a></h2>
 
 <pre>    my $highlighter = Lucy::Highlight::Highlighter-&#62;new(
         searcher =&#62; $searcher,
@@ -92,19 +92,19 @@ name="SYNOPSIS"
         ...
     }</pre>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="DESCRIPTION"
->DESCRIPTION</a></h1>
+>DESCRIPTION</a></h2>
 
 <p>The Highlighter can be used to select relevant snippets from a document, and to surround search terms with highlighting tags. It handles both stems and phrases correctly and efficiently, using special-purpose data generated at index-time.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="CONSTRUCTORS"
->CONSTRUCTORS</a></h1>
+>CONSTRUCTORS</a></h2>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="new(_[labeled_params]_)"
->new( <i>[labeled params]</i> )</a></h2>
+<h3><a class='u'
+name="new"
+>new</a></h3>
 
 <pre>    my $highlighter = Lucy::Highlight::Highlighter-&#62;new(
         searcher       =&#62; $searcher,    # required
@@ -113,6 +113,8 @@ name="new(_[labeled_params]_)"
         excerpt_length =&#62; 150,          # default: 200
     );</pre>
 
+<p>Create a new Highlighter.</p>
+
 <ul>
 <li><b>searcher</b> - An object which inherits from <a href="../../Lucy/Search/Searcher.html" class="podlinkpod"
 >Searcher</a>, such as an <a href="../../Lucy/Search/IndexSearcher.html" class="podlinkpod"
@@ -126,85 +128,111 @@ name="new(_[labeled_params]_)"
 <li><b>excerpt_length</b> - Maximum length of the excerpt, in characters.</li>
 </ul>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="METHODS"
->METHODS</a></h1>
+>METHODS</a></h2>
+
+<h3><a class='u'
+name="create_excerpt"
+>create_excerpt</a></h3>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="create_excerpt(hit_doc)"
->create_excerpt(hit_doc)</a></h2>
+<pre>    my $retval = $highlighter-&#62;create_excerpt($hit_doc);</pre>
 
 <p>Take a HitDoc object and return a highlighted excerpt as a string if the HitDoc has a value for the specified <code>field</code>.</p>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="highlight(text)"
->highlight(text)</a></h2>
+<h3><a class='u'
+name="encode"
+>encode</a></h3>
 
-<p>Highlight a small section of text. By default, prepends pre-tag and appends post-tag. This method is called internally by create_excerpt() when assembling an excerpt.</p>
+<pre>    my $retval = $highlighter-&#62;encode($text);</pre>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="encode(text)"
->encode(text)</a></h2>
+<p>Encode text with HTML entities. This method is called internally by <a href="#create_excerpt" class="podlinkpod"
+>create_excerpt()</a> for each text fragment when assembling an excerpt. A subclass can override this if the text should be encoded differently or not at all.</p>
 
-<p>Encode text with HTML entities. This method is called internally by create_excerpt() for each text fragment when assembling an excerpt. A subclass can override this if the text should be encoded differently or not at all.</p>
+<h3><a class='u'
+name="highlight"
+>highlight</a></h3>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="set_pre_tag(pre_tag)"
->set_pre_tag(pre_tag)</a></h2>
+<pre>    my $retval = $highlighter-&#62;highlight($text);</pre>
 
-<p>Setter. The default value is &#34;&#60;strong&#62;&#34;.</p>
+<p>Highlight a small section of text. By default, prepends pre-tag and appends post-tag. This method is called internally by <a href="#create_excerpt" class="podlinkpod"
+>create_excerpt()</a> when assembling an excerpt.</p>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="get_pre_tag()"
->get_pre_tag()</a></h2>
+<h3><a class='u'
+name="set_pre_tag"
+>set_pre_tag</a></h3>
 
-<p>Accessor.</p>
+<pre>    $highlighter-&#62;set_pre_tag($pre_tag);</pre>
+
+<p>Setter. The default value is &#8220;&#60;strong&#62;&#8221;.</p>
+
+<h3><a class='u'
+name="set_post_tag"
+>set_post_tag</a></h3>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="set_post_tag(post_tag)"
->set_post_tag(post_tag)</a></h2>
+<pre>    $highlighter-&#62;set_post_tag($post_tag);</pre>
 
-<p>Setter. The default value is &#34;&#60;/strong&#62;&#34;.</p>
+<p>Setter. The default value is &#8220;&#60;/strong&#62;&#8221;.</p>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="get_post_tag()"
->get_post_tag()</a></h2>
+<h3><a class='u'
+name="get_pre_tag"
+>get_pre_tag</a></h3>
+
+<pre>    my $retval = $highlighter-&#62;get_pre_tag();</pre>
 
 <p>Accessor.</p>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="get_searcher()"
->get_searcher()</a></h2>
+<h3><a class='u'
+name="get_post_tag"
+>get_post_tag</a></h3>
+
+<pre>    my $retval = $highlighter-&#62;get_post_tag();</pre>
 
 <p>Accessor.</p>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="get_query()"
->get_query()</a></h2>
+<h3><a class='u'
+name="get_field"
+>get_field</a></h3>
+
+<pre>    my $retval = $highlighter-&#62;get_field();</pre>
 
 <p>Accessor.</p>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="get_compiler()"
->get_compiler()</a></h2>
+<h3><a class='u'
+name="get_excerpt_length"
+>get_excerpt_length</a></h3>
 
-<p>Accessor for the Lucy::Search::Compiler object derived from <code>query</code> and <code>searcher</code>.</p>
+<pre>    my $retval = $highlighter-&#62;get_excerpt_length();</pre>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="get_excerpt_length()"
->get_excerpt_length()</a></h2>
+<p>Accessor.</p>
+
+<h3><a class='u'
+name="get_searcher"
+>get_searcher</a></h3>
+
+<pre>    my $retval = $highlighter-&#62;get_searcher();</pre>
 
 <p>Accessor.</p>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="get_field()"
->get_field()</a></h2>
+<h3><a class='u'
+name="get_query"
+>get_query</a></h3>
+
+<pre>    my $retval = $highlighter-&#62;get_query();</pre>
 
 <p>Accessor.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h3><a class='u'
+name="get_compiler"
+>get_compiler</a></h3>
+
+<pre>    my $retval = $highlighter-&#62;get_compiler();</pre>
+
+<p>Accessor for the Lucy::Search::Compiler object derived from <code>query</code> and <code>searcher</code>.</p>
+
+<h2><a class='u'
 name="INHERITANCE"
->INHERITANCE</a></h1>
+>INHERITANCE</a></h2>
 
 <p>Lucy::Highlight::Highlighter isa Clownfish::Obj.</p>
 

Modified: websites/staging/lucy/trunk/content/docs/test/Lucy/Index/BackgroundMerger.html
==============================================================================
--- websites/staging/lucy/trunk/content/docs/test/Lucy/Index/BackgroundMerger.html (original)
+++ websites/staging/lucy/trunk/content/docs/test/Lucy/Index/BackgroundMerger.html Fri Feb 26 12:52:42 2016
@@ -71,39 +71,39 @@
           <div>
 <a name='___top' class='dummyTopAnchor' ></a>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="NAME"
->NAME</a></h1>
+>NAME</a></h2>
 
 <p>Lucy::Index::BackgroundMerger - Consolidate index segments in the background.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="SYNOPSIS"
->SYNOPSIS</a></h1>
+>SYNOPSIS</a></h2>
 
 <pre>    my $bg_merger = Lucy::Index::BackgroundMerger-&#62;new(
         index  =&#62; &#39;/path/to/index&#39;,
     );
     $bg_merger-&#62;commit;</pre>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="DESCRIPTION"
->DESCRIPTION</a></h1>
+>DESCRIPTION</a></h2>
 
 <p>Adding documents to an index is usually fast, but every once in a while the index must be compacted and an update takes substantially longer to complete. See <a href="../../Lucy/Docs/Cookbook/FastUpdates.html" class="podlinkpod"
->Lucy::Docs::Cookbook::FastUpdates</a> for how to use this class to control worst-case index update performance.</p>
+>FastUpdates</a> for how to use this class to control worst-case index update performance.</p>
 
 <p>As with <a href="../../Lucy/Index/Indexer.html" class="podlinkpod"
 >Indexer</a>, see <a href="../../Lucy/Docs/FileLocking.html" class="podlinkpod"
->Lucy::Docs::FileLocking</a> if your index is on a shared volume.</p>
+>FileLocking</a> if your index is on a shared volume.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="CONSTRUCTORS"
->CONSTRUCTORS</a></h1>
+>CONSTRUCTORS</a></h2>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="new(_[labeled_params]_)"
->new( <i>[labeled params]</i> )</a></h2>
+<h3><a class='u'
+name="new"
+>new</a></h3>
 
 <pre>    my $bg_merger = Lucy::Index::BackgroundMerger-&#62;new(
         index   =&#62; &#39;/path/to/index&#39;,    # required
@@ -118,35 +118,46 @@ name="new(_[labeled_params]_)"
 <li><b>manager</b> - An IndexManager. If not supplied, an IndexManager with a 10-second write lock timeout will be created.</li>
 </ul>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="METHODS"
->METHODS</a></h1>
+>METHODS</a></h2>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="commit()"
->commit()</a></h2>
+<h3><a class='u'
+name="optimize"
+>optimize</a></h3>
 
-<p>Commit any changes made to the index. Until this is called, none of the changes made during an indexing session are permanent.</p>
+<pre>    $background_merger-&#62;optimize();</pre>
 
-<p>Calls prepare_commit() implicitly if it has not already been called.</p>
+<p>Optimize the index for search-time performance. This may take a while, as it can involve rewriting large amounts of data.</p>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="prepare_commit()"
->prepare_commit()</a></h2>
+<h3><a class='u'
+name="commit"
+>commit</a></h3>
 
-<p>Perform the expensive setup for commit() in advance, so that commit() completes quickly.</p>
+<pre>    $background_merger-&#62;commit();</pre>
 
-<p>Towards the end of prepare_commit(), the BackgroundMerger attempts to re-acquire the write lock, which is then held until commit() finishes and releases it.</p>
+<p>Commit any changes made to the index. Until this is called, none of the changes made during an indexing session are permanent.</p>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="optimize()"
->optimize()</a></h2>
+<p>Calls <a href="#prepare_commit" class="podlinkpod"
+>prepare_commit()</a> implicitly if it has not already been called.</p>
 
-<p>Optimize the index for search-time performance. This may take a while, as it can involve rewriting large amounts of data.</p>
+<h3><a class='u'
+name="prepare_commit"
+>prepare_commit</a></h3>
+
+<pre>    $background_merger-&#62;prepare_commit();</pre>
+
+<p>Perform the expensive setup for <a href="#commit" class="podlinkpod"
+>commit()</a> in advance, so that <a href="#commit" class="podlinkpod"
+>commit()</a> completes quickly.</p>
+
+<p>Towards the end of <a href="#prepare_commit" class="podlinkpod"
+>prepare_commit()</a>, the BackgroundMerger attempts to re-acquire the write lock, which is then held until <a href="#commit" class="podlinkpod"
+>commit()</a> finishes and releases it.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="INHERITANCE"
->INHERITANCE</a></h1>
+>INHERITANCE</a></h2>
 
 <p>Lucy::Index::BackgroundMerger isa Clownfish::Obj.</p>
 

Modified: websites/staging/lucy/trunk/content/docs/test/Lucy/Index/DataReader.html
==============================================================================
--- websites/staging/lucy/trunk/content/docs/test/Lucy/Index/DataReader.html (original)
+++ websites/staging/lucy/trunk/content/docs/test/Lucy/Index/DataReader.html Fri Feb 26 12:52:42 2016
@@ -71,32 +71,32 @@
           <div>
 <a name='___top' class='dummyTopAnchor' ></a>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="NAME"
->NAME</a></h1>
+>NAME</a></h2>
 
 <p>Lucy::Index::DataReader - Abstract base class for reading index data.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="SYNOPSIS"
->SYNOPSIS</a></h1>
+>SYNOPSIS</a></h2>
 
 <pre>    # Abstract base class.</pre>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="DESCRIPTION"
->DESCRIPTION</a></h1>
+>DESCRIPTION</a></h2>
 
 <p>DataReader is the companion class to <a href="../../Lucy/Index/DataWriter.html" class="podlinkpod"
 >DataWriter</a>. Every index component will implement one of each.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="CONSTRUCTORS"
->CONSTRUCTORS</a></h1>
+>CONSTRUCTORS</a></h2>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="new(_[labeled_params]_)"
->new( <i>[labeled params]</i> )</a></h2>
+<h3><a class='u'
+name="new"
+>new</a></h3>
 
 <pre>    my $reader = MyDataReader-&#62;new(
         schema   =&#62; $seg_reader-&#62;get_schema,      # default undef
@@ -106,6 +106,8 @@ name="new(_[labeled_params]_)"
         seg_tick =&#62; $seg_reader-&#62;get_seg_tick,    # default -1
     );</pre>
 
+<p>Abstract constructor.</p>
+
 <ul>
 <li><b>schema</b> - A Schema.</li>
 
@@ -118,13 +120,18 @@ name="new(_[labeled_params]_)"
 <li><b>seg_tick</b> - The array index of the Segment object within the <code>segments</code> array that this particular DataReader is assigned to, if any. A value of -1 indicates that no Segment should be assigned.</li>
 </ul>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="ABSTRACT_METHODS"
->ABSTRACT METHODS</a></h1>
+>ABSTRACT METHODS</a></h2>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="aggregator(_[labeled_params]_)"
->aggregator( <i>[labeled params]</i> )</a></h2>
+<h3><a class='u'
+name="aggregator"
+>aggregator</a></h3>
+
+<pre>    my $retval = $data_reader-&#62;aggregator(
+        readers =&#62; $readers  # required
+        offsets =&#62; $offsets  # required
+    );</pre>
 
 <p>Create a reader which aggregates the output of several lower level readers. Return undef if such a reader is not valid.</p>
 
@@ -134,49 +141,61 @@ name="aggregator(_[labeled_params]_)"
 <li><b>offsets</b> - Doc id start offsets for each reader.</li>
 </ul>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="METHODS"
->METHODS</a></h1>
+>METHODS</a></h2>
+
+<h3><a class='u'
+name="get_schema"
+>get_schema</a></h3>
+
+<pre>    my $retval = $data_reader-&#62;get_schema();</pre>
+
+<p>Accessor for &#8220;schema&#8221; member var.</p>
+
+<h3><a class='u'
+name="get_folder"
+>get_folder</a></h3>
+
+<pre>    my $retval = $data_reader-&#62;get_folder();</pre>
+
+<p>Accessor for &#8220;folder&#8221; member var.</p>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="get_schema()"
->get_schema()</a></h2>
+<h3><a class='u'
+name="get_snapshot"
+>get_snapshot</a></h3>
 
-<p>Accessor for &#34;schema&#34; member var.</p>
+<pre>    my $retval = $data_reader-&#62;get_snapshot();</pre>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="get_folder()"
->get_folder()</a></h2>
+<p>Accessor for &#8220;snapshot&#8221; member var.</p>
 
-<p>Accessor for &#34;folder&#34; member var.</p>
+<h3><a class='u'
+name="get_segments"
+>get_segments</a></h3>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="get_snapshot()"
->get_snapshot()</a></h2>
+<pre>    my $retval = $data_reader-&#62;get_segments();</pre>
 
-<p>Accessor for &#34;snapshot&#34; member var.</p>
+<p>Accessor for &#8220;segments&#8221; member var.</p>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="get_segments()"
->get_segments()</a></h2>
+<h3><a class='u'
+name="get_segment"
+>get_segment</a></h3>
 
-<p>Accessor for &#34;segments&#34; member var.</p>
+<pre>    my $retval = $data_reader-&#62;get_segment();</pre>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="get_segment()"
->get_segment()</a></h2>
+<p>Accessor for &#8220;segment&#8221; member var.</p>
 
-<p>Accessor for &#34;segment&#34; member var.</p>
+<h3><a class='u'
+name="get_seg_tick"
+>get_seg_tick</a></h3>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="get_seg_tick()"
->get_seg_tick()</a></h2>
+<pre>    my $retval = $data_reader-&#62;get_seg_tick();</pre>
 
-<p>Accessor for &#34;seg_tick&#34; member var.</p>
+<p>Accessor for &#8220;seg_tick&#8221; member var.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="INHERITANCE"
->INHERITANCE</a></h1>
+>INHERITANCE</a></h2>
 
 <p>Lucy::Index::DataReader isa Clownfish::Obj.</p>
 

Modified: websites/staging/lucy/trunk/content/docs/test/Lucy/Index/DataWriter.html
==============================================================================
--- websites/staging/lucy/trunk/content/docs/test/Lucy/Index/DataWriter.html (original)
+++ websites/staging/lucy/trunk/content/docs/test/Lucy/Index/DataWriter.html Fri Feb 26 12:52:42 2016
@@ -71,35 +71,35 @@
           <div>
 <a name='___top' class='dummyTopAnchor' ></a>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="NAME"
->NAME</a></h1>
+>NAME</a></h2>
 
 <p>Lucy::Index::DataWriter - Write data to an index.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="SYNOPSIS"
->SYNOPSIS</a></h1>
+>SYNOPSIS</a></h2>
 
 <pre>    # Abstract base class.</pre>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="DESCRIPTION"
->DESCRIPTION</a></h1>
+>DESCRIPTION</a></h2>
 
-<p>DataWriter is an abstract base class for writing index data, generally in segment-sized chunks. Each component of an index -- e.g. stored fields, lexicon, postings, deletions -- is represented by a DataWriter/<a href="../../Lucy/Index/DataReader.html" class="podlinkpod"
+<p>DataWriter is an abstract base class for writing index data, generally in segment-sized chunks. Each component of an index &#8211; e.g. stored fields, lexicon, postings, deletions &#8211; is represented by a DataWriter/<a href="../../Lucy/Index/DataReader.html" class="podlinkpod"
 >DataReader</a> pair.</p>
 
 <p>Components may be specified per index by subclassing <a href="../../Lucy/Plan/Architecture.html" class="podlinkpod"
 >Architecture</a>.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="CONSTRUCTORS"
->CONSTRUCTORS</a></h1>
+>CONSTRUCTORS</a></h2>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="new(_[labeled_params]_)"
->new( <i>[labeled params]</i> )</a></h2>
+<h3><a class='u'
+name="new"
+>new</a></h3>
 
 <pre>    my $writer = MyDataWriter-&#62;new(
         snapshot   =&#62; $snapshot,      # required
@@ -107,6 +107,8 @@ name="new(_[labeled_params]_)"
         polyreader =&#62; $polyreader,    # required
     );</pre>
 
+<p>Abstract constructor.</p>
+
 <ul>
 <li><b>snapshot</b> - The Snapshot that will be committed at the end of the indexing session.</li>
 
@@ -115,25 +117,18 @@ name="new(_[labeled_params]_)"
 <li><b>polyreader</b> - A PolyReader representing all existing data in the index. (If the index is brand new, the PolyReader will have no sub-readers).</li>
 </ul>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="ABSTRACT_METHODS"
->ABSTRACT METHODS</a></h1>
-
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="add_inverted_doc(_[labeled_params]_)"
->add_inverted_doc( <i>[labeled params]</i> )</a></h2>
-
-<p>Process a document, previously inverted by <code>inverter</code>.</p>
-
-<ul>
-<li><b>inverter</b> - An Inverter wrapping an inverted document.</li>
+>ABSTRACT METHODS</a></h2>
 
-<li><b>doc_id</b> - Internal number assigned to this document within the segment.</li>
-</ul>
-
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="add_segment(_[labeled_params]_)"
->add_segment( <i>[labeled params]</i> )</a></h2>
+<h3><a class='u'
+name="add_segment"
+>add_segment</a></h3>
+
+<pre>    $data_writer-&#62;add_segment(
+        reader  =&#62; $reader   # required
+        doc_map =&#62; $doc_map  # default: undef
+    );</pre>
 
 <p>Add content from an existing segment into the one currently being written.</p>
 
@@ -143,39 +138,52 @@ name="add_segment(_[labeled_params]_)"
 <li><b>doc_map</b> - An array of integers mapping old document ids to new. Deleted documents are mapped to 0, indicating that they should be skipped.</li>
 </ul>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="finish()"
->finish()</a></h2>
+<h3><a class='u'
+name="finish"
+>finish</a></h3>
+
+<pre>    $data_writer-&#62;finish();</pre>
 
 <p>Complete the segment: close all streams, store metadata, etc.</p>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="format()"
->format()</a></h2>
+<h3><a class='u'
+name="format"
+>format</a></h3>
+
+<pre>    my $retval = $data_writer-&#62;format();</pre>
 
 <p>Every writer must specify a file format revision number, which should increment each time the format changes. Responsibility for revision checking is left to the companion DataReader.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="METHODS"
->METHODS</a></h1>
+>METHODS</a></h2>
+
+<h3><a class='u'
+name="delete_segment"
+>delete_segment</a></h3>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="delete_segment(reader)"
->delete_segment(reader)</a></h2>
+<pre>    $data_writer-&#62;delete_segment($reader);</pre>
 
-<p>Remove a segment&#39;s data. The default implementation is a no-op, as all files within the segment directory will be automatically deleted. Subclasses which manage their own files outside of the segment system should override this method and use it as a trigger for cleaning up obsolete data.</p>
+<p>Remove a segment&#8217;s data. The default implementation is a no-op, as all files within the segment directory will be automatically deleted. Subclasses which manage their own files outside of the segment system should override this method and use it as a trigger for cleaning up obsolete data.</p>
 
 <ul>
 <li><b>reader</b> - The SegReader containing content to merge, which must represent a segment which is part of the the current snapshot.</li>
 </ul>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="merge_segment(_[labeled_params]_)"
->merge_segment( <i>[labeled params]</i> )</a></h2>
+<h3><a class='u'
+name="merge_segment"
+>merge_segment</a></h3>
+
+<pre>    $data_writer-&#62;merge_segment(
+        reader  =&#62; $reader   # required
+        doc_map =&#62; $doc_map  # default: undef
+    );</pre>
 
 <p>Move content from an existing segment into the one currently being written.</p>
 
-<p>The default implementation calls add_segment() then delete_segment().</p>
+<p>The default implementation calls <a href="#add_segment" class="podlinkpod"
+>add_segment()</a> then <a href="#delete_segment" class="podlinkpod"
+>delete_segment()</a>.</p>
 
 <ul>
 <li><b>reader</b> - The SegReader containing content to merge, which must represent a segment which is part of the the current snapshot.</li>
@@ -183,45 +191,57 @@ name="merge_segment(_[labeled_params]_)"
 <li><b>doc_map</b> - An array of integers mapping old document ids to new. Deleted documents are mapped to 0, indicating that they should be skipped.</li>
 </ul>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="metadata()"
->metadata()</a></h2>
+<h3><a class='u'
+name="metadata"
+>metadata</a></h3>
+
+<pre>    my $retval = $data_writer-&#62;metadata();</pre>
+
+<p>Arbitrary metadata to be serialized and stored by the Segment. The default implementation supplies a Hash with a single key-value pair for &#8220;format&#8221;.</p>
+
+<h3><a class='u'
+name="get_snapshot"
+>get_snapshot</a></h3>
+
+<pre>    my $retval = $data_writer-&#62;get_snapshot();</pre>
+
+<p>Accessor for &#8220;snapshot&#8221; member var.</p>
+
+<h3><a class='u'
+name="get_segment"
+>get_segment</a></h3>
 
-<p>Arbitrary metadata to be serialized and stored by the Segment. The default implementation supplies a Hash with a single key-value pair for &#34;format&#34;.</p>
+<pre>    my $retval = $data_writer-&#62;get_segment();</pre>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="get_snapshot()"
->get_snapshot()</a></h2>
+<p>Accessor for &#8220;segment&#8221; member var.</p>
 
-<p>Accessor for &#34;snapshot&#34; member var.</p>
+<h3><a class='u'
+name="get_polyreader"
+>get_polyreader</a></h3>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="get_segment()"
->get_segment()</a></h2>
+<pre>    my $retval = $data_writer-&#62;get_polyreader();</pre>
 
-<p>Accessor for &#34;segment&#34; member var.</p>
+<p>Accessor for &#8220;polyreader&#8221; member var.</p>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="get_polyreader()"
->get_polyreader()</a></h2>
+<h3><a class='u'
+name="get_schema"
+>get_schema</a></h3>
 
-<p>Accessor for &#34;polyreader&#34; member var.</p>
+<pre>    my $retval = $data_writer-&#62;get_schema();</pre>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="get_schema()"
->get_schema()</a></h2>
+<p>Accessor for &#8220;schema&#8221; member var.</p>
 
-<p>Accessor for &#34;schema&#34; member var.</p>
+<h3><a class='u'
+name="get_folder"
+>get_folder</a></h3>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="get_folder()"
->get_folder()</a></h2>
+<pre>    my $retval = $data_writer-&#62;get_folder();</pre>
 
-<p>Accessor for &#34;folder&#34; member var.</p>
+<p>Accessor for &#8220;folder&#8221; member var.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="INHERITANCE"
->INHERITANCE</a></h1>
+>INHERITANCE</a></h2>
 
 <p>Lucy::Index::DataWriter isa Clownfish::Obj.</p>
 

Modified: websites/staging/lucy/trunk/content/docs/test/Lucy/Index/DeletionsWriter.html
==============================================================================
--- websites/staging/lucy/trunk/content/docs/test/Lucy/Index/DeletionsWriter.html (original)
+++ websites/staging/lucy/trunk/content/docs/test/Lucy/Index/DeletionsWriter.html Fri Feb 26 12:52:42 2016
@@ -71,15 +71,15 @@
           <div>
 <a name='___top' class='dummyTopAnchor' ></a>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="NAME"
->NAME</a></h1>
+>NAME</a></h2>
 
 <p>Lucy::Index::DeletionsWriter - Abstract base class for marking documents as deleted.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="SYNOPSIS"
->SYNOPSIS</a></h1>
+>SYNOPSIS</a></h2>
 
 <pre>    my $polyreader  = $del_writer-&#62;get_polyreader;
     my $seg_readers = $polyreader-&#62;seg_readers;
@@ -88,9 +88,9 @@ name="SYNOPSIS"
         ...
     }</pre>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="DESCRIPTION"
->DESCRIPTION</a></h1>
+>DESCRIPTION</a></h2>
 
 <p>Subclasses of DeletionsWriter provide a low-level mechanism for declaring a document deleted from an index.</p>
 
@@ -98,25 +98,32 @@ name="DESCRIPTION"
 
 <p>Documents are truly deleted only when the segments which contain them are merged into new ones.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="ABSTRACT_METHODS"
->ABSTRACT METHODS</a></h1>
+>ABSTRACT METHODS</a></h2>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="delete_by_term(_[labeled_params]_)"
->delete_by_term( <i>[labeled params]</i> )</a></h2>
+<h3><a class='u'
+name="delete_by_term"
+>delete_by_term</a></h3>
+
+<pre>    $deletions_writer-&#62;delete_by_term(
+        field =&#62; $field  # required
+        term  =&#62; $term   # required
+    );</pre>
 
 <p>Delete all documents in the index that index the supplied term.</p>
 
 <ul>
-<li><b>field</b> - The name of an indexed field. (If it is not spec&#39;d as <code>indexed</code>, an error will occur.)</li>
+<li><b>field</b> - The name of an indexed field. (If it is not spec&#8217;d as <code>indexed</code>, an error will occur.)</li>
 
-<li><b>term</b> - The term which identifies docs to be marked as deleted. If <code>field</code> is associated with an Analyzer, <code>term</code> will be processed automatically (so don&#39;t pre-process it yourself).</li>
+<li><b>term</b> - The term which identifies docs to be marked as deleted. If <code>field</code> is associated with an Analyzer, <code>term</code> will be processed automatically (so don&#8217;t pre-process it yourself).</li>
 </ul>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="delete_by_query(query)"
->delete_by_query(query)</a></h2>
+<h3><a class='u'
+name="delete_by_query"
+>delete_by_query</a></h3>
+
+<pre>    $deletions_writer-&#62;delete_by_query($query);</pre>
 
 <p>Delete all documents in the index that match <code>query</code>.</p>
 
@@ -125,15 +132,19 @@ name="delete_by_query(query)"
 >Query</a>.</li>
 </ul>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="updated()"
->updated()</a></h2>
+<h3><a class='u'
+name="updated"
+>updated</a></h3>
+
+<pre>    my $retval = $deletions_writer-&#62;updated();</pre>
 
 <p>Returns true if there are updates that need to be written.</p>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="seg_del_count(seg_name)"
->seg_del_count(seg_name)</a></h2>
+<h3><a class='u'
+name="seg_del_count"
+>seg_del_count</a></h3>
+
+<pre>    my $retval = $deletions_writer-&#62;seg_del_count($seg_name);</pre>
 
 <p>Return the number of deletions for a given segment.</p>
 
@@ -141,9 +152,9 @@ name="seg_del_count(seg_name)"
 <li><b>seg_name</b> - The name of the segment.</li>
 </ul>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="INHERITANCE"
->INHERITANCE</a></h1>
+>INHERITANCE</a></h2>
 
 <p>Lucy::Index::DeletionsWriter isa <a href="../../Lucy/Index/DataWriter.html" class="podlinkpod"
 >Lucy::Index::DataWriter</a> isa Clownfish::Obj.</p>

Modified: websites/staging/lucy/trunk/content/docs/test/Lucy/Index/DocReader.html
==============================================================================
--- websites/staging/lucy/trunk/content/docs/test/Lucy/Index/DocReader.html (original)
+++ websites/staging/lucy/trunk/content/docs/test/Lucy/Index/DocReader.html Fri Feb 26 12:52:42 2016
@@ -71,45 +71,52 @@
           <div>
 <a name='___top' class='dummyTopAnchor' ></a>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="NAME"
->NAME</a></h1>
+>NAME</a></h2>
 
 <p>Lucy::Index::DocReader - Retrieve stored documents.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="SYNOPSIS"
->SYNOPSIS</a></h1>
+>SYNOPSIS</a></h2>
 
 <pre>    my $doc_reader = $seg_reader-&#62;obtain(&#34;Lucy::Index::DocReader&#34;);
     my $doc        = $doc_reader-&#62;fetch_doc($doc_id);</pre>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="DESCRIPTION"
->DESCRIPTION</a></h1>
+>DESCRIPTION</a></h2>
 
 <p>DocReader defines the interface by which documents (with all stored fields) are retrieved from the index. The default implementation returns <a href="../../Lucy/Document/HitDoc.html" class="podlinkpod"
 >HitDoc</a> objects.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="ABSTRACT_METHODS"
->ABSTRACT METHODS</a></h1>
+>ABSTRACT METHODS</a></h2>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="fetch_doc(doc_id)"
->fetch_doc(doc_id)</a></h2>
+<h3><a class='u'
+name="fetch_doc"
+>fetch_doc</a></h3>
+
+<pre>    my $retval = $doc_reader-&#62;fetch_doc($doc_id);</pre>
 
 <p>Retrieve the document identified by <code>doc_id</code>.</p>
 
 <p>Returns: a HitDoc.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="METHODS"
->METHODS</a></h1>
+>METHODS</a></h2>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="aggregator(_[labeled_params]_)"
->aggregator( <i>[labeled params]</i> )</a></h2>
+<h3><a class='u'
+name="aggregator"
+>aggregator</a></h3>
+
+<pre>    my $retval = $doc_reader-&#62;aggregator(
+        readers =&#62; $readers  # required
+        offsets =&#62; $offsets  # required
+    );</pre>
 
 <p>Returns a DocReader which divvies up requests to its sub-readers according to the offset range.</p>
 
@@ -119,9 +126,9 @@ name="aggregator(_[labeled_params]_)"
 <li><b>offsets</b> - Doc id start offsets for each reader.</li>
 </ul>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="INHERITANCE"
->INHERITANCE</a></h1>
+>INHERITANCE</a></h2>
 
 <p>Lucy::Index::DocReader isa <a href="../../Lucy/Index/DataReader.html" class="podlinkpod"
 >Lucy::Index::DataReader</a> isa Clownfish::Obj.</p>

Modified: websites/staging/lucy/trunk/content/docs/test/Lucy/Index/IndexManager.html
==============================================================================
--- websites/staging/lucy/trunk/content/docs/test/Lucy/Index/IndexManager.html (original)
+++ websites/staging/lucy/trunk/content/docs/test/Lucy/Index/IndexManager.html Fri Feb 26 12:52:42 2016
@@ -71,17 +71,17 @@
           <div>
 <a name='___top' class='dummyTopAnchor' ></a>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="NAME"
->NAME</a></h1>
+>NAME</a></h2>
 
 <p>Lucy::Index::IndexManager - Policies governing index updating,
 locking,
 and file deletion.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="SYNOPSIS"
->SYNOPSIS</a></h1>
+>SYNOPSIS</a></h2>
 
 <pre>    use Sys::Hostname qw( hostname );
     my $hostname = hostname() or die &#34;Can&#39;t get unique hostname&#34;;
@@ -102,46 +102,74 @@ name="SYNOPSIS"
     );
     my $searcher = Lucy::Search::IndexSearcher-&#62;new( index =&#62; $reader );</pre>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="DESCRIPTION"
->DESCRIPTION</a></h1>
+>DESCRIPTION</a></h2>
 
 <p>IndexManager is an advanced-use class for controlling index locking, updating, merging, and deletion behaviors.</p>
 
 <p>IndexManager and <a href="../../Lucy/Plan/Architecture.html" class="podlinkpod"
 >Architecture</a> are complementary classes: Architecture is used to define traits and behaviors which cannot change for the life of an index; IndexManager is used for defining rules which may change from process to process.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="CONSTRUCTORS"
->CONSTRUCTORS</a></h1>
+>CONSTRUCTORS</a></h2>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="new(_[labeled_params]_)"
->new( <i>[labeled params]</i> )</a></h2>
+<h3><a class='u'
+name="new"
+>new</a></h3>
 
 <pre>    my $manager = Lucy::Index::IndexManager-&#62;new(
         host =&#62; $hostname,    # default: &#34;&#34;
     );</pre>
 
+<p>Create a new IndexManager.</p>
+
 <ul>
 <li><b>host</b> - An identifier which should be unique per-machine.</li>
 
 <li><b>lock_factory</b> - A LockFactory.</li>
 </ul>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="METHODS"
->METHODS</a></h1>
+>METHODS</a></h2>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="make_write_lock()"
->make_write_lock()</a></h2>
+<h3><a class='u'
+name="set_folder"
+>set_folder</a></h3>
 
-<p>Create the Lock which controls access to modifying the logical content of the index.</p>
+<pre>    $index_manager-&#62;set_folder($folder);
+    $index_manager-&#62;set_folder();  # default: undef</pre>
+
+<p>Setter for <code>folder</code> member. Typical clients (Indexer, IndexReader) will use this method to install their own Folder instance.</p>
+
+<h3><a class='u'
+name="get_folder"
+>get_folder</a></h3>
+
+<pre>    my $retval = $index_manager-&#62;get_folder();</pre>
+
+<p>Getter for <code>folder</code> member.</p>
+
+<h3><a class='u'
+name="get_host"
+>get_host</a></h3>
+
+<pre>    my $retval = $index_manager-&#62;get_host();</pre>
+
+<p>Getter for <code>host</code> member.</p>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="recycle(_[labeled_params]_)"
->recycle( <i>[labeled params]</i> )</a></h2>
+<h3><a class='u'
+name="recycle"
+>recycle</a></h3>
+
+<pre>    my $retval = $index_manager-&#62;recycle(
+        reader     =&#62; $reader      # required
+        del_writer =&#62; $del_writer  # required
+        cutoff     =&#62; $cutoff      # required
+        optimize   =&#62; $optimize    # default: false
+    );</pre>
 
 <p>Return an array of SegReaders representing segments that should be consolidated. Implementations must balance index-time churn against search-time degradation due to segment proliferation. The default implementation prefers small segments or segments with a high proportion of deletions.</p>
 
@@ -155,51 +183,49 @@ name="recycle(_[labeled_params]_)"
 <li><b>optimize</b> - A boolean indicating whether to spend extra time optimizing the index for search-time performance.</li>
 </ul>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="set_folder(folder)"
->set_folder(folder)</a></h2>
-
-<p>Setter for <code>folder</code> member. Typical clients (Indexer, IndexReader) will use this method to install their own Folder instance.</p>
-
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="get_folder()"
->get_folder()</a></h2>
+<h3><a class='u'
+name="make_write_lock"
+>make_write_lock</a></h3>
 
-<p>Getter for <code>folder</code> member.</p>
+<pre>    my $retval = $index_manager-&#62;make_write_lock();</pre>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="get_host()"
->get_host()</a></h2>
+<p>Create the Lock which controls access to modifying the logical content of the index.</p>
 
-<p>Getter for <code>host</code> member.</p>
+<h3><a class='u'
+name="set_write_lock_timeout"
+>set_write_lock_timeout</a></h3>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="set_write_lock_timeout(timeout)"
->set_write_lock_timeout(timeout)</a></h2>
+<pre>    $index_manager-&#62;set_write_lock_timeout($timeout);</pre>
 
 <p>Setter for write lock timeout. Default: 1000 milliseconds.</p>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="get_write_lock_timeout()"
->get_write_lock_timeout()</a></h2>
+<h3><a class='u'
+name="get_write_lock_timeout"
+>get_write_lock_timeout</a></h3>
+
+<pre>    my $retval = $index_manager-&#62;get_write_lock_timeout();</pre>
 
 <p>Getter for write lock timeout.</p>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="set_write_lock_interval(timeout)"
->set_write_lock_interval(timeout)</a></h2>
+<h3><a class='u'
+name="set_write_lock_interval"
+>set_write_lock_interval</a></h3>
+
+<pre>    $index_manager-&#62;set_write_lock_interval($timeout);</pre>
 
 <p>Setter for write lock retry interval. Default: 100 milliseconds.</p>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="get_write_lock_interval()"
->get_write_lock_interval()</a></h2>
+<h3><a class='u'
+name="get_write_lock_interval"
+>get_write_lock_interval</a></h3>
+
+<pre>    my $retval = $index_manager-&#62;get_write_lock_interval();</pre>
 
 <p>Getter for write lock retry interval.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="INHERITANCE"
->INHERITANCE</a></h1>
+>INHERITANCE</a></h2>
 
 <p>Lucy::Index::IndexManager isa Clownfish::Obj.</p>
 

Modified: websites/staging/lucy/trunk/content/docs/test/Lucy/Index/IndexReader.html
==============================================================================
--- websites/staging/lucy/trunk/content/docs/test/Lucy/Index/IndexReader.html (original)
+++ websites/staging/lucy/trunk/content/docs/test/Lucy/Index/IndexReader.html Fri Feb 26 12:52:42 2016
@@ -71,15 +71,15 @@
           <div>
 <a name='___top' class='dummyTopAnchor' ></a>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="NAME"
->NAME</a></h1>
+>NAME</a></h2>
 
 <p>Lucy::Index::IndexReader - Read from an inverted index.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="SYNOPSIS"
->SYNOPSIS</a></h1>
+>SYNOPSIS</a></h2>
 
 <pre>    my $reader = Lucy::Index::IndexReader-&#62;open(
         index =&#62; &#39;/path/to/index&#39;,
@@ -96,9 +96,9 @@ name="SYNOPSIS"
         }
     }</pre>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="DESCRIPTION"
->DESCRIPTION</a></h1>
+>DESCRIPTION</a></h2>
 
 <p>IndexReader is the interface through which <a href="../../Lucy/Search/IndexSearcher.html" class="podlinkpod"
 >IndexSearcher</a> objects access the content of an index.</p>
@@ -106,16 +106,18 @@ name="DESCRIPTION"
 <p>IndexReader objects always represent a point-in-time view of an index as it existed at the moment the reader was created. If you want search results to reflect modifications to an index, you must create a new IndexReader after the update process completes.</p>
 
 <p>IndexReaders are composites; most of the work is done by individual <a href="../../Lucy/Index/DataReader.html" class="podlinkpod"
->DataReader</a> sub-components, which may be accessed via fetch() and obtain(). The most efficient and powerful access to index data happens at the segment level via <a href="../../Lucy/Index/SegReader.html" class="podlinkpod"
->SegReader</a>&#39;s sub-components.</p>
+>DataReader</a> sub-components, which may be accessed via <a href="#fetch" class="podlinkpod"
+>fetch()</a> and <a href="#obtain" class="podlinkpod"
+>obtain()</a>. The most efficient and powerful access to index data happens at the segment level via <a href="../../Lucy/Index/SegReader.html" class="podlinkpod"
+>SegReader</a>&#8217;s sub-components.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="CONSTRUCTORS"
->CONSTRUCTORS</a></h1>
+>CONSTRUCTORS</a></h2>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="open(_[labeled_params]_)"
->open( <i>[labeled params]</i> )</a></h2>
+<h3><a class='u'
+name="open"
+>open</a></h3>
 
 <pre>    my $reader = Lucy::Index::IndexReader-&#62;open(
         index    =&#62; &#39;/path/to/index&#39;, # required
@@ -134,67 +136,81 @@ name="open(_[labeled_params]_)"
 >IndexManager</a>. Read-locking is off by default; supplying this argument turns it on.</li>
 </ul>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="ABSTRACT_METHODS"
->ABSTRACT METHODS</a></h1>
+>ABSTRACT METHODS</a></h2>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="doc_max()"
->doc_max()</a></h2>
+<h3><a class='u'
+name="doc_max"
+>doc_max</a></h3>
+
+<pre>    my $retval = $index_reader-&#62;doc_max();</pre>
 
 <p>Return the maximum number of documents available to the reader, which is also the highest possible internal document id. Documents which have been marked as deleted but not yet purged from the index are included in this count.</p>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="doc_count()"
->doc_count()</a></h2>
+<h3><a class='u'
+name="doc_count"
+>doc_count</a></h3>
+
+<pre>    my $retval = $index_reader-&#62;doc_count();</pre>
 
 <p>Return the number of documents available to the reader, subtracting any that are marked as deleted.</p>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="del_count()"
->del_count()</a></h2>
+<h3><a class='u'
+name="del_count"
+>del_count</a></h3>
 
-<p>Return the number of documents which have been marked as deleted but not yet purged from the index.</p>
+<pre>    my $retval = $index_reader-&#62;del_count();</pre>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="seg_readers()"
->seg_readers()</a></h2>
+<p>Return the number of documents which have been marked as deleted but not yet purged from the index.</p>
 
-<p>Return an array of all the SegReaders represented within the IndexReader.</p>
+<h3><a class='u'
+name="offsets"
+>offsets</a></h3>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="offsets()"
->offsets()</a></h2>
+<pre>    my $retval = $index_reader-&#62;offsets();</pre>
 
 <p>Return an array with one entry for each segment, corresponding to segment doc_id start offset.</p>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h3><a class='u'
+name="seg_readers"
+>seg_readers</a></h3>
+
+<pre>    my $retval = $index_reader-&#62;seg_readers();</pre>
+
+<p>Return an array of all the SegReaders represented within the IndexReader.</p>
+
+<h2><a class='u'
 name="METHODS"
->METHODS</a></h1>
+>METHODS</a></h2>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="fetch(api)"
->fetch(api)</a></h2>
+<h3><a class='u'
+name="obtain"
+>obtain</a></h3>
 
-<p>Fetch a component, or return undef if the component can&#39;t be found.</p>
+<pre>    my $retval = $index_reader-&#62;obtain($api);</pre>
+
+<p>Fetch a component, or throw an error if the component can&#8217;t be found.</p>
 
 <ul>
 <li><b>api</b> - The name of the DataReader subclass that the desired component must implement.</li>
 </ul>
 
-<h2><a class='u' href='#___top' title='click to go to top of document'
-name="obtain(api)"
->obtain(api)</a></h2>
+<h3><a class='u'
+name="fetch"
+>fetch</a></h3>
+
+<pre>    my $retval = $index_reader-&#62;fetch($api);</pre>
 
-<p>Fetch a component, or throw an error if the component can&#39;t be found.</p>
+<p>Fetch a component, or return undef if the component can&#8217;t be found.</p>
 
 <ul>
 <li><b>api</b> - The name of the DataReader subclass that the desired component must implement.</li>
 </ul>
 
-<h1><a class='u' href='#___top' title='click to go to top of document'
+<h2><a class='u'
 name="INHERITANCE"
->INHERITANCE</a></h1>
+>INHERITANCE</a></h2>
 
 <p>Lucy::Index::IndexReader isa <a href="../../Lucy/Index/DataReader.html" class="podlinkpod"
 >Lucy::Index::DataReader</a> isa Clownfish::Obj.</p>