You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sa...@apache.org on 2011/02/19 17:50:25 UTC

svn commit: r1072386 [3/3] - in /lucene/dev/branches/branch_3x: ./ dev-tools/idea/lucene/contrib/benchmark/ dev-tools/idea/lucene/contrib/demo/ dev-tools/maven/lucene/contrib/benchmark/ dev-tools/maven/lucene/contrib/demo/ lucene/ lucene/contrib/benchm...

Modified: lucene/dev/branches/branch_3x/lucene/src/java/overview.html
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/java/overview.html?rev=1072386&r1=1072385&r2=1072386&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/java/overview.html (original)
+++ lucene/dev/branches/branch_3x/lucene/src/java/overview.html Sat Feb 19 16:50:23 2011
@@ -159,27 +159,19 @@ method.</li>
 Some simple examples of code which does this are:
 <ul>
 <li>
-&nbsp;<a href="http://svn.apache.org/repos/asf/lucene/dev/trunk/lucene/src/demo/org/apache/lucene/demo/FileDocument.java">FileDocument.java</a> contains
-code to create a Document for a file.</li>
-
-<li>
-&nbsp;<a href="http://svn.apache.org/repos/asf/lucene/dev/trunk/lucene/src/demo/org/apache/lucene/demo/IndexFiles.java">IndexFiles.java</a> creates an
+&nbsp;<a href="http://svn.apache.org/repos/asf/lucene/dev/branches/branch_3x/lucene/contrib/demo/src/java/org/apache/lucene/demo/IndexFiles.java">IndexFiles.java</a> creates an
 index for all the files contained in a directory.</li>
 
 <li>
-&nbsp;<a href="http://svn.apache.org/repos/asf/lucene/dev/trunk/lucene/src/demo/org/apache/lucene/demo/DeleteFiles.java">DeleteFiles.java</a> deletes some
-of these files from the index.</li>
-
-<li>
-&nbsp;<a href="http://svn.apache.org/repos/asf/lucene/dev/trunk/lucene/src/demo/org/apache/lucene/demo/SearchFiles.java">SearchFiles.java</a> prompts for
+&nbsp;<a href="http://svn.apache.org/repos/asf/lucene/dev/branches/branch_3x/lucene/demo/src/java/org/apache/lucene/demo/SearchFiles.java">SearchFiles.java</a> prompts for
 queries and searches an index.</li>
 </ul>
 To demonstrate these, try something like:
-<blockquote><tt>> <b>java -cp lucene.jar:lucene-demo.jar org.apache.lucene.demo.IndexFiles rec.food.recipes/soups</b></tt>
+<blockquote><tt>> <b>java -cp lucene.jar:lucene-demo.jar:lucene-analyzers-common.jar org.apache.lucene.demo.IndexFiles rec.food.recipes/soups</b></tt>
 <br><tt>adding rec.food.recipes/soups/abalone-chowder</tt>
 <br><tt>&nbsp; </tt>[ ... ]
 
-<p><tt>> <b>java -cp lucene.jar:lucene-demo.jar org.apache.lucene.demo.SearchFiles</b></tt>
+<p><tt>> <b>java -cp lucene.jar:lucene-demo.jar:lucene-analyzers-common.jar org.apache.lucene.demo.SearchFiles</b></tt>
 <br><tt>Query: <b>chowder</b></tt>
 <br><tt>Searching for: chowder</tt>
 <br><tt>34 total matching documents</tt>
@@ -195,16 +187,5 @@ and the word "manhattan" ... ]
 <br>&nbsp;&nbsp;&nbsp; [ Note: "+" and "-" are canonical, but "AND", "OR"
 and "NOT" may be used. ]</blockquote>
 
-The <a href="http://svn.apache.org/repos/asf/lucene/dev/trunk/lucene/src/demo/org/apache/lucene/demo/IndexHTML.java">IndexHTML</a> demo is more sophisticated.&nbsp;
-It incrementally maintains an index of HTML files, adding new files as
-they appear, deleting old files as they disappear and re-indexing files
-as they change.
-<blockquote><tt>> <b>java -cp lucene.jar:lucene-demo.jar org.apache.lucene.demo.IndexHTML -create java/jdk1.1.6/docs/relnotes</b></tt>
-<br><tt>adding java/jdk1.1.6/docs/relnotes/SMICopyright.html</tt>
-<br><tt>&nbsp; </tt>[ ... create an index containing all the relnotes ]
-<p><tt>> <b>rm java/jdk1.1.6/docs/relnotes/smicopyright.html</b></tt>
-<p><tt>> <b>java -cp lucene.jar:lucene-demo.jar org.apache.lucene.demo.IndexHTML java/jdk1.1.6/docs/relnotes</b></tt>
-<br><tt>deleting java/jdk1.1.6/docs/relnotes/SMICopyright.html</tt></blockquote>
-
 </body>
 </html>

Modified: lucene/dev/branches/branch_3x/lucene/src/site/src/documentation/content/xdocs/demo.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/site/src/documentation/content/xdocs/demo.xml?rev=1072386&r1=1072385&r2=1072386&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/site/src/documentation/content/xdocs/demo.xml (original)
+++ lucene/dev/branches/branch_3x/lucene/src/site/src/documentation/content/xdocs/demo.xml Sat Feb 19 16:50:23 2011
@@ -18,10 +18,10 @@ It walks you through some basic installa
 </section>
 
 
-<section id="About the Demos"><title>About the Demos</title>
+<section id="About the Demo"><title>About the Demo</title>
 <p>
-The Lucene command-line demo code consists of two applications that demonstrate various
-functionalities of Lucene and how one should go about adding Lucene to their applications.
+The Lucene command-line demo code consists of an application that demonstrates various
+functionalities of Lucene and how you can add Lucene to your applications.
 </p>
 </section>
 
@@ -30,14 +30,23 @@ functionalities of Lucene and how one sh
 First, you should <a href="http://www.apache.org/dyn/closer.cgi/lucene/java/">download</a> the
 latest Lucene distribution and then extract it to a working directory.  Alternatively, you can <a
 href="http://wiki.apache.org/lucene-java/SourceRepository">check out the sources from
-Subversion</a>, and then run <code>ant war-demo</code> to generate the JARs and WARs.
+Subversion</a>, and then run <code>ant</code> in the <code>lucene/contrib/demo/</code>
+directory to generate the JARs.
 </p>
 <p>
-You should see the Lucene JAR file in the directory you created when you extracted the archive.  It
-should be named something like <code>lucene-core-{version}.jar</code>.  You should also see a file
-called <code>lucene-demos-{version}.jar</code>.  If you checked out the sources from Subversion then
-the JARs are located under the <code>build</code> subdirectory (after running <code>ant</code>
-successfully).  Put both of these files in your Java CLASSPATH.
+You need three JARs: the Lucene JAR, the common analysis JAR, and the Lucene demo JAR.  You should
+see the Lucene JAR file in the directory you created when you extracted the archive -- it
+should be named something like <code>lucene-core-{version}.jar</code>.  You should also see files
+called <code>lucene-analysis-common-{version}.jar</code> and <code>lucene-demos-{version}.jar</code>.
+If you checked out the sources from Subversion then the JARs are located at:
+</p>
+<ul>
+  <li><code>lucene/build/lucene-core-4.0-SNAPSHOT.jar</code></li>
+  <li><code>modules/analysis/build/common/lucene-analyzers-common-4.0-SNAPSHOT.jar</code></li>
+  <li><code>lucene/build/contrib/demo/lucene-demo-4.0-SNAPSHOT.jar</code></li>
+</ul>
+<p>
+Put all three of these files in your Java CLASSPATH.
 </p>
 </section>
 

Modified: lucene/dev/branches/branch_3x/lucene/src/site/src/documentation/content/xdocs/demo2.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/site/src/documentation/content/xdocs/demo2.xml?rev=1072386&r1=1072385&r2=1072386&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/site/src/documentation/content/xdocs/demo2.xml (original)
+++ lucene/dev/branches/branch_3x/lucene/src/site/src/documentation/content/xdocs/demo2.xml Sat Feb 19 16:50:23 2011
@@ -23,9 +23,9 @@ how to use Lucene in their applications.
 
 <p>
 Relative to the directory created when you extracted Lucene or retrieved it from Subversion, you
-should see a directory called <code>src</code> which in turn contains a directory called
-<code>demo</code>.  This is the root for all of the Lucene demos.  Under this directory is
-<code>org/apache/lucene/demo</code>.  This is where all the Java sources for the demos live.
+should see a directory called <code>lucene/contrib/demo/</code>.  This is the root for the Lucene
+demo.  Under this directory is <code>src/java/org/apache/lucene/demo/</code>.  This is where all
+the Java sources for the demo live.
 </p>
 
 <p>
@@ -39,62 +39,80 @@ Bring it up in <code>vi</code> or your e
 
 <p>
 As we discussed in the previous walk-through, the <a
-href="api/demo/org/apache/lucene/demo/IndexFiles.html">IndexFiles</a> class creates a Lucene
+href="api/contrib-demo/org/apache/lucene/demo/IndexFiles.html">IndexFiles</a> class creates a Lucene
 Index. Let's take a look at how it does this.
 </p>
 
 <p>
-The first substantial thing the <code>main</code> function does is instantiate <a
-href="api/core/org/apache/lucene/index/IndexWriter.html">IndexWriter</a>.  It passes the string
-"<code>index</code>" and a new instance of a class called <a
-href="api/core/org/apache/lucene/analysis/standard/StandardAnalyzer.html">StandardAnalyzer</a>. 
-The "<code>index</code>" string is the name of the filesystem directory where all index information
-should be stored.  Because we're not passing a full path, this will be created as a subdirectory of
-the current working directory (if it does not already exist). On some platforms, it may be created
-in other directories (such as the user's home directory).
+The <code>main()</code> method parses the command-line parameters, then in preparation for
+instantiating <a href="api/core/org/apache/lucene/index/IndexWriter.html">IndexWriter</a>, opens a 
+<a href="api/core/org/apache/lucene/store/Directory.html">Directory</a> and instantiates
+<a href="api/module-analysis-common/org/apache/lucene/analysis/standard/StandardAnalyzer.html"
+>StandardAnalyzer</a> and
+<a href="api/core/org/apache/lucene/index/IndexWriterConfig.html">IndexWriterConfig</a>.
 </p>
 
 <p>
-The <a href="api/core/org/apache/lucene/index/IndexWriter.html">IndexWriter</a> is the main
-class responsible for creating indices.  To use it you must instantiate it with a path that it can
-write the index into.  If this path does not exist it will first create it.  Otherwise it will
-refresh the index at that path.  You can also create an index using one of the subclasses of <a
-href="api/core/org/apache/lucene/store/Directory.html">Directory</a>.  In any case, you must also pass an
-instance of <a
-href="api/core/org/apache/lucene/analysis/Analyzer.html">org.apache.lucene.analysis.Analyzer</a>.
+The value of the <code>-index</code> command-line parameter is the name of the filesystem directory
+where all index information should be stored.  If <code>IndexFiles</code> is invoked with a 
+relative path given in the <code>-index</code> command-line parameter, or if the <code>-index</code>
+command-line parameter is not given, causing the default relative index path "<code>index</code>"
+to be used, the index path will be created as a subdirectory of the current working directory
+(if it does not already exist).  On some platforms, the index path may be created in a different
+directory (such as the user's home directory).
 </p>
 
 <p>
-The particular <a href="api/core/org/apache/lucene/analysis/Analyzer.html">Analyzer</a> we
-are using, <a
-href="api/core/org/apache/lucene/analysis/standard/StandardAnalyzer.html">StandardAnalyzer</a>, is
-little more than a standard Java Tokenizer, converting all strings to lowercase and filtering out
-stop words and characters from the index.  By stop words and characters I mean common language
-words such as articles (a, an, the, etc.) and other strings that may have less value for searching
-(e.g. <b>'s</b>) .  It should be noted that there are different rules for every language, and you
-should use the proper analyzer for each.  Lucene currently provides Analyzers for a number of
-different languages (see the <code>*Analyzer.java</code> sources under <a
-href="http://svn.apache.org/repos/asf/lucene/dev/trunk/lucene/contrib/analyzers/common/src/java/org/apache/lucene/analysis/">contrib/analyzers/src/java/org/apache/lucene/analysis</a>).
+The <code>-docs</code> command-line parameter value is the location of the directory containing
+files to be indexed.
+</p>
+  
+<p>
+The <code>-update</code> command-line parameter tells <code>IndexFiles</code> not to delete the
+index if it already exists.  When <code>-update</code> is not given, <code>IndexFiles</code> will
+first wipe the slate clean before indexing any documents.
 </p>
 
 <p>
-Looking further down in the file, you should see the <code>indexDocs()</code> code.  This recursive
-function simply crawls the directories and uses <a
-href="api/demo/org/apache/lucene/demo/FileDocument.html">FileDocument</a> to create <a
-href="api/core/org/apache/lucene/document/Document.html">Document</a> objects.  The <a
-href="api/core/org/apache/lucene/document/Document.html">Document</a> is simply a data object to
-represent the content in the file as well as its creation time and location.  These instances are
-added to the <code>indexWriter</code>.  Take a look inside <a
-href="api/demo/org/apache/lucene/demo/FileDocument.html">FileDocument</a>.  It's not particularly
-complicated.  It just adds fields to the <a
-href="api/core/org/apache/lucene/document/Document.html">Document</a>.
+Lucene <a href="api/core/org/apache/lucene/store/Directory.html">Directory</a>s are used by the
+<code>IndexWriter</code> to store information in the index.  In addition to the 
+<a href="api/core/org/apache/lucen/store/FSDirectory.html">FSDirectory</a> implementation we are using,
+there are several other <code>Directory</code> subclasses that can write to RAM, to databases, etc.
+</p>
+  
+<p>
+Lucene <a href="api/core/org/apache/lucene/analysis/Analyzer.html">Analyzer</a>s are processing pipelines
+that break up text into indexed tokens, a.k.a. terms, and optionally perform other operations on these
+tokens, e.g. downcasing, synonym insertion, filtering out unwanted tokens, etc.  The <code>Analyzer</code>
+we are using is <code>StandardAnalyzer</code>, which creates tokens using the Word Break rules from the
+Unicode Text Segmentation algorithm specified in <a href="http://unicode.org/reports/tr29/">Unicode
+Standard Annex #29</a>; converts tokens to lowercase; and then filters out stopwords.  Stopwords are
+common language words such as articles (a, an, the, etc.) and other tokens that may have less value for
+searching.  It should be noted that there are different rules for every language, and you should use the
+proper analyzer for each.  Lucene currently provides Analyzers for a number of different languages (see
+the <code>*Analyzer.java</code> sources under 
+<a href="http://svn.apache.org/repos/asf/lucene/dev/trunk/lucene/contrib/analyzers/common/src/java/org/apache/lucene/analysis/"
+>lucene/contrib/analyzers/common/src/java/org/apache/lucene/analysis/</a>).
 </p>
 
 <p>
-As you can see there isn't much to creating an index.  The devil is in the details.  You may also
-wish to examine the other samples in this directory, particularly the <a
-href="api/demo/org/apache/lucene/demo/IndexHTML.html">IndexHTML</a> class.  It is a bit more
-complex but builds upon this example.
+The <code>IndexWriterConfig</code> instance holds all configuration for <code>IndexWriter</code>.  For
+example, we set the <code>OpenMode</code> to use here based on the value of the <code>-update</code>
+command-line parameter.
+</p>
+  
+<p>
+Looking further down in the file, after <code>IndexWriter</code> is instantiated, you should see the
+<code>indexDocs()</code> code.  This recursive function crawls the directories and creates
+<a href="api/core/org/apache/lucene/document/Document.html">Document</a> objects.  The 
+<code>Document</code> is simply a data object to represent the text content from the file as well as
+its creation time and location.  These instances are added to the <code>IndexWriter</code>.  If
+the <code>-update</code> command-line parameter is given, the <code>IndexWriter</code> 
+<code>OpenMode</code> will be set to <code>OpenMode.CREATE_OR_APPEND</code>, and rather than
+adding documents to the index, the <code>IndexWriter</code> will <strong>update</strong> them
+in the index by attempting to find an already-indexed document with the same identifier (in our
+case, the file path serves as the identifier); deleting it from the index if it exists; and then
+adding the new document to the index.
 </p>
 
 </section>
@@ -102,43 +120,33 @@ complex but builds upon this example.
 <section id="Searching Files"><title>Searching Files</title>
 
 <p>
-The <a href="api/demo/org/apache/lucene/demo/SearchFiles.html">SearchFiles</a> class is
-quite simple.  It primarily collaborates with an <a
-href="api/core/org/apache/lucene/search/IndexSearcher.html">IndexSearcher</a>, <a
-href="api/core/org/apache/lucene/analysis/standard/StandardAnalyzer.html">StandardAnalyzer</a>
-(which is used in the <a
-href="api/core/org/apache/lucene/demo/IndexFiles.html">IndexFiles</a> class as well) and a
-<a href="api/core/org/apache/lucene/queryParser/QueryParser.html">QueryParser</a>.  The
+The <a href="api/contrib-demo/org/apache/lucene/demo/SearchFiles.html">SearchFiles</a> class is
+quite simple.  It primarily collaborates with an 
+<a href="api/core/org/apache/lucene/search/IndexSearcher.html">IndexSearcher</a>, 
+<a href="api/modules-analysis-common/org/apache/lucene/analysis/standard/StandardAnalyzer.html"
+>StandardAnalyzer</a> (which is used in the
+<a href="api/contrib-demo/org/apache/lucene/demo/IndexFiles.html">IndexFiles</a> class as well)
+and a <a href="api/core/org/apache/lucene/queryParser/QueryParser.html">QueryParser</a>.  The
 query parser is constructed with an analyzer used to interpret your query text in the same way the
-documents are interpreted: finding the end of words and removing useless words like 'a', 'an' and
-'the'.  The <a href="api/core/org/apache/lucene/search/Query.html">Query</a> object contains
-the results from the <a
-href="api/core/org/apache/lucene/queryParser/QueryParser.html">QueryParser</a> which is passed to
-the searcher.  Note that it's also possible to programmatically construct a rich <a
-href="api/core/org/apache/lucene/search/Query.html">Query</a> object without using the query
+documents are interpreted: finding word boundaries, downcasing, and removing useless words like
+'a', 'an' and 'the'.  The <a href="api/core/org/apache/lucene/search/Query.html">Query</a>
+object contains the results from the
+<a href="api/core/org/apache/lucene/queryParser/QueryParser.html">QueryParser</a> which is passed
+to the searcher.  Note that it's also possible to programmatically construct a rich 
+<a href="api/core/org/apache/lucene/search/Query.html">Query</a> object without using the query
 parser.  The query parser just enables decoding the <a href="queryparsersyntax.html">Lucene query
-syntax</a> into the corresponding <a
-href="api/core/org/apache/lucene/search/Query.html">Query</a> object. Search can be executed in 
-two different ways: 
+syntax</a> into the corresponding <a href="api/core/org/apache/lucene/search/Query.html">Query</a>
+object. Search can be executed in two different ways:
+</p>
+
 <ul>
 <li>Streaming: A <a href="api/core/org/apache/lucene/search/Collector.html">Collector</a> subclass
 simply prints out the document ID and score for each matching document.</li>
-<li>Paging: Using a <a href="api/core/org/apache/lucene/search/TopScoreDocCollector.html">TopScoreDocCollector</a>
- the search results are printed in pages, sorted by score (i. e. relevance).</li>
-</ul>  
-</p>
+<li>Paging: Using the <code>IndexSearcher.search(query,n)</code> method that returns 
+<a href="api/core/org/apache/lucene/search/TopDocs.html">TopDocs</a> with max <code>n</code> hits,
+the search results are printed in pages, sorted by score (i.e. relevance).</li>
+</ul>
 
 </section>
-
-<section id="The Web example..."><title>The Web example...</title>
-
-<p>
-<a href="demo3.html">read on&gt;&gt;&gt;</a>
-</p>
-
-</section>
-
 </body>
 </document>
-
-

Modified: lucene/dev/branches/branch_3x/lucene/src/site/src/documentation/content/xdocs/gettingstarted.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/site/src/documentation/content/xdocs/gettingstarted.xml?rev=1072386&r1=1072385&r2=1072386&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/site/src/documentation/content/xdocs/gettingstarted.xml (original)
+++ lucene/dev/branches/branch_3x/lucene/src/site/src/documentation/content/xdocs/gettingstarted.xml Sat Feb 19 16:50:23 2011
@@ -14,7 +14,7 @@
     <title>Getting Started</title>
 <p>
 This document is intended as a "getting started" guide.  It has three audiences: first-time users
-looking to install Apache Lucene in their application or web server; developers looking to modify or base
+looking to install Apache Lucene in their application; developers looking to modify or base
 the applications they develop on Lucene; and developers looking to become involved in and contribute
 to the development of Lucene.  This document is written in tutorial and walk-through format.  The
 goal is to help you "get started".  It does not go into great depth on some of the conceptual or
@@ -33,20 +33,6 @@ may wish to skip sections.
 	<li><a href="demo2.html">About the sources and implementation for the command-line Lucene
 	demo</a>.  This section walks through the implementation details (sources) of the
 	command-line Lucene demo.  This section is intended for developers.</li> <p/>
-
-	<li><a href="demo3.html">About installing and configuring the demo template web
-	application</a>.  While this walk-through assumes Tomcat as your container of choice,
-	there is no reason you can't (provided you have the requisite knowledge) adapt the
-	instructions to your container.  This section is intended for those responsible for the
-	development or deployment of Lucene-based web applications.</li> <p/>
-
-	<li><a href="demo4.html">About the sources used to construct the demo template web
-	application</a>.  Please note the template application is designed to highlight features of
-	Lucene and is <b>not</b> an example of best practices.  (One would hopefully use MVC
-	architecture such as provided by Jakarta Struts and taglibs, but showing you how to do that
-	would be WAY beyond the scope of this guide.)  This section is intended for developers and
-	those wishing to customize the demo template web application to their needs.  </li>
-
 </ul>
 </section>
 

Modified: lucene/dev/branches/branch_3x/lucene/src/site/src/documentation/content/xdocs/lucene-contrib/index.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/site/src/documentation/content/xdocs/lucene-contrib/index.xml?rev=1072386&r1=1072385&r2=1072386&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/site/src/documentation/content/xdocs/lucene-contrib/index.xml (original)
+++ lucene/dev/branches/branch_3x/lucene/src/site/src/documentation/content/xdocs/lucene-contrib/index.xml Sat Feb 19 16:50:23 2011
@@ -64,6 +64,12 @@
                 <p>The benchmark contribution contains tools for benchmarking Lucene using standard, freely available corpora.</p>
                 <p>See <a href="../api/contrib-benchmark/index.html">benchmark javadoc</a></p>
             </section>            
+        
+            <section id="demo"><title>demo</title>
+                <p>The demo contrib contains the Lucene demo: IndexFiles and SearchFiles, described under
+                   <a href="../gettingstarted.html">Getting Started</a>.</p>
+                <p>See <a href="../api/contrib-demo/index.html">demo javadoc</a></p>
+            </section>
             
             <section id="db"><title>db</title>
                 <p>Provides integration with Berkley DB.</p>

Modified: lucene/dev/branches/branch_3x/lucene/src/site/src/documentation/content/xdocs/site.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/site/src/documentation/content/xdocs/site.xml?rev=1072386&r1=1072385&r2=1072386&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/site/src/documentation/content/xdocs/site.xml (original)
+++ lucene/dev/branches/branch_3x/lucene/src/site/src/documentation/content/xdocs/site.xml Sat Feb 19 16:50:23 2011
@@ -50,7 +50,6 @@ See http://forrest.apache.org/docs/linki
       <javadoc label="Javadocs">
          <javadoc-all label="All" href="ext:javadocs-all"/>
 		 <javadoc-core label="Core" href="ext:javadocs-core"/>
-		 <javadoc-demo label="Demo" href="ext:javadocs-demo"/>
 		 <javadoc-contrib label="Contrib">
 		    <javadoc-contrib-analyzers label="Analyzers" href="ext:javadocs-contrib-analyzers"/>
 		    <javadoc-contrib-smartcn label="Smart Chinese Analyzer" href="ext:javadocs-contrib-smartcn"/>
@@ -59,6 +58,7 @@ See http://forrest.apache.org/docs/linki
 		    <javadoc-contrib-bdb label="Bdb" href="ext:javadocs-contrib-bdb"/>
 		    <javadoc-contrib-bdb-je label="Bdb-je" href="ext:javadocs-contrib-bdb-je"/>
 		    <javadoc-contrib-benchmark label="Benchmark" href="ext:javadocs-contrib-benchmark"/>
+        <javadoc-contrib-demo label="Demo" href="ext:javadocs-contrib-demo"/>
 		    <javadoc-contrib-highlighter label="Highlighter" href="ext:javadocs-contrib-highlighter"/>
 		    <javadoc-contrib-icu label="ICU" href="ext:javadocs-contrib-icu"/>
 		    <javadoc-contrib-instantiated label="Instantiated" href="ext:javadocs-contrib-instantiated"/>
@@ -102,7 +102,6 @@ See http://forrest.apache.org/docs/linki
     <changes-contrib href="changes/Contrib-Changes.html" />
     <javadocs-all href="api/all/index.html"/>
 	<javadocs-core href="api/core/index.html"/>
-	<javadocs-demo href="api/demo/index.html"/>
 	<javadocs-contrib-analyzers href="api/contrib-analyzers/index.html"/>
 	<javadocs-contrib-smartcn href="api/contrib-smartcn/index.html"/>
 	<javadocs-contrib-stempel href="api/contrib-stempel/index.html"/>
@@ -110,6 +109,7 @@ See http://forrest.apache.org/docs/linki
 	<javadocs-contrib-bdb href="api/contrib-bdb/index.html"/>
 	<javadocs-contrib-bdb-je href="api/contrib-bdb-je/index.html"/>
 	<javadocs-contrib-benchmark href="api/contrib-benchmark/index.html"/>
+  <javadocs-contrib-demo href="api/contrib-demo/index.html"/>
 	<javadocs-contrib-highlighter href="api/contrib-highlighter/index.html"/>
     <javadocs-contrib-icu href="api/contrib-icu/index.html"/>
 	<javadocs-contrib-instantiated href="api/contrib-instantiated/index.html"/>