You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by ni...@apache.org on 2017/07/11 07:42:35 UTC

[10/22] lucenenet git commit: lucene-cli: Added Markdown documentation, and extended help text for many commands. Fixed IndexSplitCommand because MultiPassIndexSplitter doesn't make number of segments an optional argument.

lucene-cli: Added Markdown documentation, and extended help text for many commands. Fixed IndexSplitCommand because MultiPassIndexSplitter doesn't make number of segments an optional argument.


Project: http://git-wip-us.apache.org/repos/asf/lucenenet/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucenenet/commit/70f15595
Tree: http://git-wip-us.apache.org/repos/asf/lucenenet/tree/70f15595
Diff: http://git-wip-us.apache.org/repos/asf/lucenenet/diff/70f15595

Branch: refs/heads/master
Commit: 70f15595701a7e7f2803aeb3626a23a6fd6c731d
Parents: ea6ec0f
Author: Shad Storhaug <sh...@shadstorhaug.com>
Authored: Mon Jul 10 11:50:42 2017 +0700
Committer: Shad Storhaug <sh...@shadstorhaug.com>
Committed: Mon Jul 10 11:50:42 2017 +0700

----------------------------------------------------------------------
 .../Commands/Index/IndexFixCommandTest.cs       |   4 +-
 .../Commands/Index/IndexSplitCommandTest.cs     |  34 +++++
 .../lucene-cli/Resources/Strings.Designer.cs    | 130 +++++++++++++------
 src/tools/lucene-cli/Resources/Strings.resx     |  92 ++++++++-----
 .../lucene-cli/arguments/SegmentsArgument.cs    |   2 +-
 .../index/index-check/IndexCheckCommand.cs      |   1 +
 .../IndexCopySegmentsCommand.cs                 |   3 +-
 .../index-extract-cfs/IndexExtractCfsCommand.cs |   1 +
 .../index/index-list-cfs/IndexListCfsCommand.cs |   1 +
 .../IndexListHighFreqTerms.cs                   |   2 +-
 .../IndexSegmentListCommand.cs                  |   1 +
 .../IndexListTaxonomyStatsCommand.cs            |   1 +
 .../IndexListTermInfoCommand.cs                 |   1 +
 .../index/index-split/IndexSplitCommand.cs      |   8 +-
 .../lock-stress-test/LockStressTestCommand.cs   |   9 +-
 src/tools/lucene-cli/docs/analysis/index.md     |  10 ++
 .../docs/analysis/stempel-compile-stems.md      |  37 ++++++
 .../docs/analysis/stempel-patch-stems.md        |  34 +++++
 .../lucene-cli/docs/demo/associations-facets.md |  27 ++++
 .../lucene-cli/docs/demo/distance-facets.md     |  27 ++++
 .../docs/demo/expression-aggregation-facets.md  |  27 ++++
 src/tools/lucene-cli/docs/demo/index-files.md   |  51 ++++++++
 src/tools/lucene-cli/docs/demo/index.md         |  17 +++
 .../docs/demo/multi-category-lists-facets.md    |  28 ++++
 src/tools/lucene-cli/docs/demo/range-facets.md  |  27 ++++
 src/tools/lucene-cli/docs/demo/search-files.md  |  72 ++++++++++
 src/tools/lucene-cli/docs/demo/simple-facets.md |  27 ++++
 .../docs/demo/simple-sorted-set-facets.md       |  29 +++++
 src/tools/lucene-cli/docs/index.md              |  25 ++++
 src/tools/lucene-cli/docs/index/check.md        |  55 ++++++++
 .../lucene-cli/docs/index/copy-segments.md      |  40 ++++++
 .../lucene-cli/docs/index/delete-segments.md    |  35 +++++
 src/tools/lucene-cli/docs/index/extract-cfs.md  |  42 ++++++
 src/tools/lucene-cli/docs/index/fix.md          |  54 ++++++++
 src/tools/lucene-cli/docs/index/index.md        |  23 ++++
 src/tools/lucene-cli/docs/index/list-cfs.md     |  36 +++++
 .../docs/index/list-high-freq-terms.md          |  49 +++++++
 .../lucene-cli/docs/index/list-segments.md      |  32 +++++
 .../docs/index/list-taxonomy-stats.md           |  38 ++++++
 .../lucene-cli/docs/index/list-term-info.md     |  40 ++++++
 src/tools/lucene-cli/docs/index/merge.md        |  36 +++++
 src/tools/lucene-cli/docs/index/split.md        |  54 ++++++++
 src/tools/lucene-cli/docs/index/upgrade.md      |  52 ++++++++
 src/tools/lucene-cli/docs/lock/index.md         |  10 ++
 src/tools/lucene-cli/docs/lock/stress-test.md   |  55 ++++++++
 src/tools/lucene-cli/docs/lock/verify-server.md |  35 +++++
 46 files changed, 1332 insertions(+), 82 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/Lucene.Net.Tests.Cli/Commands/Index/IndexFixCommandTest.cs
----------------------------------------------------------------------
diff --git a/src/tools/Lucene.Net.Tests.Cli/Commands/Index/IndexFixCommandTest.cs b/src/tools/Lucene.Net.Tests.Cli/Commands/Index/IndexFixCommandTest.cs
index 29a2b4c..d153f2d 100644
--- a/src/tools/Lucene.Net.Tests.Cli/Commands/Index/IndexFixCommandTest.cs
+++ b/src/tools/Lucene.Net.Tests.Cli/Commands/Index/IndexFixCommandTest.cs
@@ -64,7 +64,7 @@ namespace Lucene.Net.Cli.Commands
                 AssertCommandTranslation(
                     string.Join(" ", requiredArg.Select(x => x.InputPattern).ToArray()),
                     requiredArg.SelectMany(x => x.Output)
-                    // Special case - the -fix option must be specified when --dry-run is not
+                    // Special case: the -fix option must be specified when --dry-run is not
                     .Concat(new string[] { "-fix" }).ToArray());
             }
 
@@ -74,7 +74,7 @@ namespace Lucene.Net.Cli.Commands
                 {
                     string command = string.Join(" ", requiredArg.Select(x => x.InputPattern).Union(optionalArg.Select(x => x.InputPattern).ToArray()));
                     string[] expected = requiredArg.SelectMany(x => x.Output)
-                        // Special case - the -fix option must be specified when --dry-run is not
+                        // Special case: the -fix option must be specified when --dry-run is not
                         .Concat(command.Contains("--dry-run") ? new string[0] : new string[] { "-fix" })
                         .Union(optionalArg.SelectMany(x => x.Output)).ToArray();
                     AssertCommandTranslation(command, expected);

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/Lucene.Net.Tests.Cli/Commands/Index/IndexSplitCommandTest.cs
----------------------------------------------------------------------
diff --git a/src/tools/Lucene.Net.Tests.Cli/Commands/Index/IndexSplitCommandTest.cs b/src/tools/Lucene.Net.Tests.Cli/Commands/Index/IndexSplitCommandTest.cs
index c5a9017..a6a1a95 100644
--- a/src/tools/Lucene.Net.Tests.Cli/Commands/Index/IndexSplitCommandTest.cs
+++ b/src/tools/Lucene.Net.Tests.Cli/Commands/Index/IndexSplitCommandTest.cs
@@ -1,5 +1,6 @@
 using NUnit.Framework;
 using System.Collections.Generic;
+using System.Linq;
 
 namespace Lucene.Net.Cli.Commands
 {
@@ -53,6 +54,39 @@ namespace Lucene.Net.Cli.Commands
         }
 
         [Test]
+        public override void TestAllValidCombinations()
+        {
+            var requiredArgs = GetRequiredArgs().ExpandArgs().RequiredParameters();
+            var optionalArgs = GetOptionalArgs().ExpandArgs().OptionalParameters();
+
+            foreach (var requiredArg in requiredArgs)
+            {
+                AssertCommandTranslation(
+                    string.Join(" ", requiredArg.Select(x => x.InputPattern).ToArray()),
+                    requiredArg.SelectMany(x => x.Output)
+                    // Special case: the -num option must be specified when -n is not
+                    // because in MultiPassIndexSplitter it is not optional, so we are patching
+                    // it in our command to make 2 the default.
+                    .Concat(new string[] { "-num", "2" }).ToArray());
+            }
+
+            foreach (var requiredArg in requiredArgs)
+            {
+                foreach (var optionalArg in optionalArgs)
+                {
+                    string command = string.Join(" ", requiredArg.Select(x => x.InputPattern).Union(optionalArg.Select(x => x.InputPattern).ToArray()));
+                    string[] expected = requiredArg.SelectMany(x => x.Output)
+                        // Special case: the -num option must be specified when -n is not
+                        // because in MultiPassIndexSplitter it is not optional, so we are patching
+                        // it in our command to make 2 the default.
+                        .Concat(command.Contains("-n") ? new string[0] : new string[] { "-num", "2" })
+                        .Union(optionalArg.SelectMany(x => x.Output)).ToArray();
+                    AssertCommandTranslation(command, expected);
+                }
+            }
+        }
+
+        [Test]
         public virtual void TestNotEnoughArguments()
         {
             AssertConsoleOutput("", FromResource("NotEnoughArguments", 2));

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/Resources/Strings.Designer.cs
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/Resources/Strings.Designer.cs b/src/tools/lucene-cli/Resources/Strings.Designer.cs
index cb790ae..5d1fa93 100644
--- a/src/tools/lucene-cli/Resources/Strings.Designer.cs
+++ b/src/tools/lucene-cli/Resources/Strings.Designer.cs
@@ -87,7 +87,7 @@ namespace Lucene.Net.Cli.Resources {
         }
         
         /// <summary>
-        ///    Looks up a localized string similar to The encoding to use for the stemmer table files..
+        ///    Looks up a localized string similar to The encoding to use for the stemmer table files. If not supplied, defaults to UTF-8..
         /// </summary>
         public static string AnalysisStempelCompileStemsCommandStemmerTableFilesEncodingDescription {
             get {
@@ -123,7 +123,7 @@ namespace Lucene.Net.Cli.Resources {
         }
         
         /// <summary>
-        ///    Looks up a localized string similar to The encoding to use for the stemmer table files..
+        ///    Looks up a localized string similar to The encoding to use for the stemmer table files. If not supplied, defaults to UTF-8..
         /// </summary>
         public static string AnalysisStempelPatchStemsCommandStemmerTableFilesEncodingDescription {
             get {
@@ -375,6 +375,17 @@ namespace Lucene.Net.Cli.Resources {
         }
         
         /// <summary>
+        ///    Looks up a localized string similar to Basic tool to check the health of an index. 
+        ///
+        ///As this tool checks every byte in the index, on a large index it can take quite a long time to run..
+        /// </summary>
+        public static string IndexCheckCommandExtendedHelpText {
+            get {
+                return ResourceManager.GetString("IndexCheckCommandExtendedHelpText", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///    Looks up a localized string similar to Only check the specified segment(s). This can be specified multiple times, to check more than one segment, eg --segment _2 --segment _a..
         /// </summary>
         public static string IndexCheckCommandSegmentsDescription {
@@ -492,7 +503,7 @@ namespace Lucene.Net.Cli.Resources {
         }
         
         /// <summary>
-        ///    Looks up a localized string similar to Lists sub-files from a .cfs compound file..
+        ///    Looks up a localized string similar to Extracts sub-files from a .cfs compound file..
         /// </summary>
         public static string IndexExtractCfsCommandDescription {
             get {
@@ -501,7 +512,9 @@ namespace Lucene.Net.Cli.Resources {
         }
         
         /// <summary>
-        ///    Looks up a localized string similar to The .cfs compound file format is created using the CompoundFileDirectory from Lucene.Net.Misc..
+        ///    Looks up a localized string similar to Extracts `.cfs` compound files (that were created using the CompoundFileDirectory from Lucene.Net.Misc) to the current working directory.
+        ///
+        ///In order to make the extracted version of the index work, you have to copy the segments file from the compound index into the directory where the extracted files are stored..
         /// </summary>
         public static string IndexExtractCfsCommandExtendedHelpText {
             get {
@@ -528,7 +541,11 @@ namespace Lucene.Net.Cli.Resources {
         }
         
         /// <summary>
-        ///    Looks up a localized string similar to WARNING: This command should only be used on an emergency basis as it will cause documents (perhaps many) to be permanently removed from the index. Always make a backup copy of your index before running this! Do not run this tool on an index that is actively being written to. You have been warned!.
+        ///    Looks up a localized string similar to  Basic tool to check and fix the health of an index and write a new segments file that removes reference to problematic segments.
+        ///
+        ///As this tool checks every byte in the index, on a large index it can take quite a long time to run. 
+        ///
+        ///WARNING: This command should only be used on an emergency basis as it will cause documents (perhaps many) to be permanently removed from the index. Always make a backup copy of your index before running this! Do not run this tool on an index that is actively being written to. [rest of string was truncated]&quot;;.
         /// </summary>
         public static string IndexFixCommandExtendedHelpText {
             get {
@@ -546,7 +563,7 @@ namespace Lucene.Net.Cli.Resources {
         }
         
         /// <summary>
-        ///    Looks up a localized string similar to Extracts sub-files out of a .cfs compound file..
+        ///    Looks up a localized string similar to Lists sub-files out of a .cfs compound file..
         /// </summary>
         public static string IndexListCfsCommandDescription {
             get {
@@ -555,7 +572,7 @@ namespace Lucene.Net.Cli.Resources {
         }
         
         /// <summary>
-        ///    Looks up a localized string similar to The .cfs compound file format is created using the CompoundFileDirectory from Lucene.Net.Misc..
+        ///    Looks up a localized string similar to Prints the filename and size of each file within a given `.cfs` compound file. The .cfs compound file format is created using the CompoundFileDirectory from Lucene.Net.Misc..
         /// </summary>
         public static string IndexListCfsCommandExtendedHelpText {
             get {
@@ -564,7 +581,7 @@ namespace Lucene.Net.Cli.Resources {
         }
         
         /// <summary>
-        ///    Looks up a localized string similar to Extracts the top n most frequent terms by document frequency..
+        ///    Looks up a localized string similar to Lists the top N most frequent terms by document frequency..
         /// </summary>
         public static string IndexListHighFreqTermsCommandDescription {
             get {
@@ -573,7 +590,7 @@ namespace Lucene.Net.Cli.Resources {
         }
         
         /// <summary>
-        ///    Looks up a localized string similar to Extracts the top n most frequent terms (by document frequency) from an index and reports thier document frequency..
+        ///    Looks up a localized string similar to Extracts the top N most frequent terms (by document frequency) from an index and reports thier document frequency..
         /// </summary>
         public static string IndexListHighFreqTermsCommandExtendedHelpText {
             get {
@@ -618,6 +635,15 @@ namespace Lucene.Net.Cli.Resources {
         }
         
         /// <summary>
+        ///    Looks up a localized string similar to After running this command to view segments, use copy-segments to copy segments from one index directory to another or delete-segments to remove segments from an index..
+        /// </summary>
+        public static string IndexListSegmentsExtendedHelpText {
+            get {
+                return ResourceManager.GetString("IndexListSegmentsExtendedHelpText", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///    Looks up a localized string similar to Displays the taxonomy statistical information for a taxonomy index..
         /// </summary>
         public static string IndexListTaxonomyStatsCommandDescription {
@@ -627,7 +653,16 @@ namespace Lucene.Net.Cli.Resources {
         }
         
         /// <summary>
-        ///    Looks up a localized string similar to Recursively lists all descendent nodes..
+        ///    Looks up a localized string similar to Prints how many ords are under each dimension..
+        /// </summary>
+        public static string IndexListTaxonomyStatsCommandExtendedHelpText {
+            get {
+                return ResourceManager.GetString("IndexListTaxonomyStatsCommandExtendedHelpText", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Recursively lists all descendant nodes..
         /// </summary>
         public static string IndexListTaxonomyStatsCommandShowTreeDescription {
             get {
@@ -699,7 +734,7 @@ namespace Lucene.Net.Cli.Resources {
         }
         
         /// <summary>
-        ///    Looks up a localized string similar to Output directory to merge the indexes into..
+        ///    Looks up a localized string similar to The output directory to merge the input indexes into..
         /// </summary>
         public static string IndexMergeCommandOutputDirectoryDescription {
             get {
@@ -717,7 +752,20 @@ namespace Lucene.Net.Cli.Resources {
         }
         
         /// <summary>
-        ///    Looks up a localized string similar to Path to input index. Multiple values can be provided separated by a space..
+        ///    Looks up a localized string similar to  Splits the input index into multiple equal parts. The method employed here uses IndexWriter.AddIndexes(IndexReader[]) where the input data comes from the input index with artificially applied deletes to the document ids that fall outside the selected partition.
+        ///
+        ///Deletes are only applied to a buffered list of deleted documents and don&apos;t affect the source index. This tool works also with read-only indexes.
+        ///
+        ///The disadvantage of this tool is that source index needs to be read as many times as there are part [rest of string was truncated]&quot;;.
+        /// </summary>
+        public static string IndexSplitCommandExtendedHelpText {
+            get {
+                return ResourceManager.GetString("IndexSplitCommandExtendedHelpText", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to The path of the source index, which can have deletions and can have multiple segments (or multiple readers). Multiple values can be supplied separated by a space..
         /// </summary>
         public static string IndexSplitCommandInputDirectoryDescription {
             get {
@@ -726,7 +774,7 @@ namespace Lucene.Net.Cli.Resources {
         }
         
         /// <summary>
-        ///    Looks up a localized string similar to The number of parts to produce..
+        ///    Looks up a localized string similar to The number of parts (output indices) to produce. If omitted, defaults to 2..
         /// </summary>
         public static string IndexSplitCommandNumberOfPartsDescription {
             get {
@@ -744,7 +792,7 @@ namespace Lucene.Net.Cli.Resources {
         }
         
         /// <summary>
-        ///    Looks up a localized string similar to Sequential docid-range split..
+        ///    Looks up a localized string similar to Sequential doc-id range split (default is round-robin)..
         /// </summary>
         public static string IndexSplitCommandSequentialDescription {
             get {
@@ -771,7 +819,11 @@ namespace Lucene.Net.Cli.Resources {
         }
         
         /// <summary>
-        ///    Looks up a localized string similar to  This tool keeps only the last commit in an index; for this reason, if the incoming index has more than one commit, the tool refuses to run by default. Specify --delete-prior-commits to override this, allowing the tool to delete all but the last commit. Specify an FSDirectory implementation through the --directory-type option to force its use. If not qualified by an AssemblyName, the Lucene.Net.dll assembly will be used. WARNING: This tool may reorder document IDs! Also, ensure you are using the correct vers [rest of string was truncated]&quot;;.
+        ///    Looks up a localized string similar to  This tool keeps only the last commit in an index; for this reason, if the incoming index has more than one commit, the tool refuses to run by default. Specify --delete-prior-commits to override this, allowing the tool to delete all but the last commit. 
+        ///
+        ///Specify an FSDirectory implementation through the --directory-type option to force its use. If not qualified by an AssemblyName, the Lucene.Net.dll assembly will be used. 
+        ///
+        ///WARNING: This tool may reorder document IDs! Be sure to make a backup of your in [rest of string was truncated]&quot;;.
         /// </summary>
         public static string IndexUpgradeCommandExtendedHelpText {
             get {
@@ -789,16 +841,7 @@ namespace Lucene.Net.Cli.Resources {
         }
         
         /// <summary>
-        ///    Looks up a localized string similar to Number of locking tries..
-        /// </summary>
-        public static string LockStressTestCommandCountDescription {
-            get {
-                return ResourceManager.GetString("LockStressTestCommandCountDescription", resourceCulture);
-            }
-        }
-        
-        /// <summary>
-        ///    Looks up a localized string similar to Simple standalone tool that forever acquires &amp; releases a lock using a specific LockFactory..
+        ///    Looks up a localized string similar to Simple tool that forever acquires and releases a lock using a specific LockFactory..
         /// </summary>
         public static string LockStressTestCommandDescription {
             get {
@@ -807,7 +850,7 @@ namespace Lucene.Net.Cli.Resources {
         }
         
         /// <summary>
-        ///    Looks up a localized string similar to You should run multiple instances of this process, each with its own unique ID, and each pointing to the same lock directory, to verify that locking is working correctly. Make sure you are first running LockVerifyServer..
+        ///    Looks up a localized string similar to You should run multiple instances of this process, each with its own unique ID, and each pointing to the same lock directory, to verify that locking is working correctly. Make sure you are first running verify-server..
         /// </summary>
         public static string LockStressTestCommandExtendedHelpText {
             get {
@@ -816,7 +859,7 @@ namespace Lucene.Net.Cli.Resources {
         }
         
         /// <summary>
-        ///    Looks up a localized string similar to int value from 0 .. 255 (should be unique for test process)..
+        ///    Looks up a localized string similar to An integer from 0 - 255 (should be unique for test process)..
         /// </summary>
         public static string LockStressTestCommandIDDescription {
             get {
@@ -825,25 +868,25 @@ namespace Lucene.Net.Cli.Resources {
         }
         
         /// <summary>
-        ///    Looks up a localized string similar to Path to the lock directory (only set for Simple/NativeFSLockFactory)..
+        ///    Looks up a localized string similar to The path to the lock directory (only utilized if LOCK_FACTORY_TYPE is set to SimpleFSLockFactory or NativeFSLockFactory)..
         /// </summary>
-        public static string LockStressTestCommandLockFactoryNameDescription {
+        public static string LockStressTestCommandLockDirectoryDescription {
             get {
-                return ResourceManager.GetString("LockStressTestCommandLockFactoryNameDescription", resourceCulture);
+                return ResourceManager.GetString("LockStressTestCommandLockDirectoryDescription", resourceCulture);
             }
         }
         
         /// <summary>
-        ///    Looks up a localized string similar to Primary LockFactory class that we will use..
+        ///    Looks up a localized string similar to The primary LockFactory implementation that we will use..
         /// </summary>
-        public static string LockStressTestCommandLockFactoryTypeNameDescription {
+        public static string LockStressTestCommandLockFactoryTypeDescription {
             get {
-                return ResourceManager.GetString("LockStressTestCommandLockFactoryTypeNameDescription", resourceCulture);
+                return ResourceManager.GetString("LockStressTestCommandLockFactoryTypeDescription", resourceCulture);
             }
         }
         
         /// <summary>
-        ///    Looks up a localized string similar to Milliseconds to pause betweeen each lock obtain/release..
+        ///    Looks up a localized string similar to Milliseconds to pause between each lock obtain/release..
         /// </summary>
         public static string LockStressTestCommandSleepTimeMSDescription {
             get {
@@ -852,7 +895,16 @@ namespace Lucene.Net.Cli.Resources {
         }
         
         /// <summary>
-        ///    Looks up a localized string similar to Port that LockVerifyServer is listening on..
+        ///    Looks up a localized string similar to Number of locking tries..
+        /// </summary>
+        public static string LockStressTestCommandTriesDescription {
+            get {
+                return ResourceManager.GetString("LockStressTestCommandTriesDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Port that verify-server is listening on..
         /// </summary>
         public static string LockStressTestCommandVerfierPortDescription {
             get {
@@ -861,7 +913,7 @@ namespace Lucene.Net.Cli.Resources {
         }
         
         /// <summary>
-        ///    Looks up a localized string similar to Hostname that LockVerifyServer is listening on..
+        ///    Looks up a localized string similar to Hostname or IP address that verify-server is listening on..
         /// </summary>
         public static string LockStressTestCommandVerifierHostDescription {
             get {
@@ -870,7 +922,7 @@ namespace Lucene.Net.Cli.Resources {
         }
         
         /// <summary>
-        ///    Looks up a localized string similar to Simple standalone server that must be running when you use VerifyingLockFactory. This server verifies at most one process holds the lock at a time..
+        ///    Looks up a localized string similar to Simple server that must be running when you use VerifyingLockFactory (or stress-test). This server verifies at most one process holds the lock at a time..
         /// </summary>
         public static string LockVerifyServerCommandDescription {
             get {
@@ -879,7 +931,7 @@ namespace Lucene.Net.Cli.Resources {
         }
         
         /// <summary>
-        ///    Looks up a localized string similar to Hostname or IP address that LockVerifyServer will listen on..
+        ///    Looks up a localized string similar to Hostname or IP address that verify-server will listen on..
         /// </summary>
         public static string LockVerifyServerCommandIPHostnameDescription {
             get {
@@ -888,7 +940,7 @@ namespace Lucene.Net.Cli.Resources {
         }
         
         /// <summary>
-        ///    Looks up a localized string similar to The maximum number of concurrent clients..
+        ///    Looks up a localized string similar to The maximum number of connected clients..
         /// </summary>
         public static string LockVerifyServerCommandMaxClientsDescription {
             get {

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/Resources/Strings.resx
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/Resources/Strings.resx b/src/tools/lucene-cli/Resources/Strings.resx
index 2e4ce2a..64be738 100644
--- a/src/tools/lucene-cli/Resources/Strings.resx
+++ b/src/tools/lucene-cli/Resources/Strings.resx
@@ -127,7 +127,7 @@
     <value>The path to a file containing a stemmer table. Multiple values are allowed.</value>
   </data>
   <data name="AnalysisStempelCompileStemsCommandStemmerTableFilesEncodingDescription" xml:space="preserve">
-    <value>The encoding to use for the stemmer table files.</value>
+    <value>The encoding to use for the stemmer table files. If not supplied, defaults to UTF-8.</value>
   </data>
   <data name="AnalysisStempelCompileStemsCommandStemmingAlgorithmDescription" xml:space="preserve">
     <value>The name of the desired stemming algorithm to use.</value>
@@ -139,7 +139,7 @@
     <value>The path to a file containing a stemmer table. Multiple values are allowed.</value>
   </data>
   <data name="AnalysisStempelPatchStemsCommandStemmerTableFilesEncodingDescription" xml:space="preserve">
-    <value>The encoding to use for the stemmer table files.</value>
+    <value>The encoding to use for the stemmer table files. If not supplied, defaults to UTF-8.</value>
   </data>
   <data name="CrossCheckTermVectorsDescription" xml:space="preserve">
     <value>Cross check term vectors.</value>
@@ -222,6 +222,11 @@
   <data name="IndexCheckCommandDescription" xml:space="preserve">
     <value>Checks an index for problematic segments.</value>
   </data>
+  <data name="IndexCheckCommandExtendedHelpText" xml:space="preserve">
+    <value>Basic tool to check the health of an index. 
+
+As this tool checks every byte in the index, on a large index it can take quite a long time to run.</value>
+  </data>
   <data name="IndexCheckCommandSegmentsDescription" xml:space="preserve">
     <value>Only check the specified segment(s). This can be specified multiple times, to check more than one segment, eg --segment _2 --segment _a.</value>
   </data>
@@ -262,10 +267,12 @@
     <value>The .cfs compound file containing words to parse.</value>
   </data>
   <data name="IndexExtractCfsCommandDescription" xml:space="preserve">
-    <value>Lists sub-files from a .cfs compound file.</value>
+    <value>Extracts sub-files from a .cfs compound file.</value>
   </data>
   <data name="IndexExtractCfsCommandExtendedHelpText" xml:space="preserve">
-    <value>The .cfs compound file format is created using the CompoundFileDirectory from Lucene.Net.Misc.</value>
+    <value>Extracts `.cfs` compound files (that were created using the CompoundFileDirectory from Lucene.Net.Misc) to the current working directory.
+
+In order to make the extracted version of the index work, you have to copy the segments file from the compound index into the directory where the extracted files are stored.</value>
   </data>
   <data name="IndexFixCommandDescription" xml:space="preserve">
     <value>Fixes an index by removing problematic segments.</value>
@@ -274,22 +281,26 @@
     <value>Doesn't change the index, but reports any actions that would be taken if this option were not supplied.</value>
   </data>
   <data name="IndexFixCommandExtendedHelpText" xml:space="preserve">
-    <value>WARNING: This command should only be used on an emergency basis as it will cause documents (perhaps many) to be permanently removed from the index. Always make a backup copy of your index before running this! Do not run this tool on an index that is actively being written to. You have been warned!</value>
+    <value>Basic tool to check and fix the health of an index and write a new segments file that removes reference to problematic segments.
+
+As this tool checks every byte in the index, on a large index it can take quite a long time to run. 
+
+WARNING: This command should only be used on an emergency basis as it will cause documents (perhaps many) to be permanently removed from the index. Always make a backup copy of your index before running this! Do not run this tool on an index that is actively being written to. You have been warned!</value>
   </data>
   <data name="IndexListCfsCommandCFSFileNameDescription" xml:space="preserve">
     <value>The .cfs compound file containing words to parse.</value>
   </data>
   <data name="IndexListCfsCommandDescription" xml:space="preserve">
-    <value>Extracts sub-files out of a .cfs compound file.</value>
+    <value>Lists sub-files out of a .cfs compound file.</value>
   </data>
   <data name="IndexListCfsCommandExtendedHelpText" xml:space="preserve">
-    <value>The .cfs compound file format is created using the CompoundFileDirectory from Lucene.Net.Misc.</value>
+    <value>Prints the filename and size of each file within a given `.cfs` compound file. The .cfs compound file format is created using the CompoundFileDirectory from Lucene.Net.Misc.</value>
   </data>
   <data name="IndexListHighFreqTermsCommandDescription" xml:space="preserve">
-    <value>Extracts the top n most frequent terms by document frequency.</value>
+    <value>Lists the top N most frequent terms by document frequency.</value>
   </data>
   <data name="IndexListHighFreqTermsCommandExtendedHelpText" xml:space="preserve">
-    <value>Extracts the top n most frequent terms (by document frequency) from an index and reports thier document frequency.</value>
+    <value>Extracts the top N most frequent terms (by document frequency) from an index and reports thier document frequency.</value>
   </data>
   <data name="IndexListHighFreqTermsCommandFieldDescription" xml:space="preserve">
     <value>The field to consider. If omitted, considers all fields.</value>
@@ -303,11 +314,17 @@
   <data name="IndexListSegmentsCommandDescription" xml:space="preserve">
     <value>Lists segments in an index.</value>
   </data>
+  <data name="IndexListSegmentsExtendedHelpText" xml:space="preserve">
+    <value>After running this command to view segments, use copy-segments to copy segments from one index directory to another or delete-segments to remove segments from an index.</value>
+  </data>
   <data name="IndexListTaxonomyStatsCommandDescription" xml:space="preserve">
     <value>Displays the taxonomy statistical information for a taxonomy index.</value>
   </data>
+  <data name="IndexListTaxonomyStatsCommandExtendedHelpText" xml:space="preserve">
+    <value>Prints how many ords are under each dimension.</value>
+  </data>
   <data name="IndexListTaxonomyStatsCommandShowTreeDescription" xml:space="preserve">
-    <value>Recursively lists all descendent nodes.</value>
+    <value>Recursively lists all descendant nodes.</value>
   </data>
   <data name="IndexListTermInfoCommandDescription" xml:space="preserve">
     <value>Gets document frequency and total number of occurrences of a term.</value>
@@ -331,22 +348,31 @@
     <value>Two or more source index directories separated by a space.</value>
   </data>
   <data name="IndexMergeCommandOutputDirectoryDescription" xml:space="preserve">
-    <value>Output directory to merge the indexes into.</value>
+    <value>The output directory to merge the input indexes into.</value>
   </data>
   <data name="IndexSplitCommandDescription" xml:space="preserve">
     <value>Splits an index into multiple parts.</value>
   </data>
+  <data name="IndexSplitCommandExtendedHelpText" xml:space="preserve">
+    <value>Splits the input index into multiple equal parts. The method employed here uses IndexWriter.AddIndexes(IndexReader[]) where the input data comes from the input index with artificially applied deletes to the document ids that fall outside the selected partition.
+
+Deletes are only applied to a buffered list of deleted documents and don't affect the source index. This tool works also with read-only indexes.
+
+The disadvantage of this tool is that source index needs to be read as many times as there are parts to be created. The multiple passes may be slow.
+
+NOTE: This tool is unaware of documents added automatically via IndexWriter.AddDocuments(IEnumerable&lt;IEnumerable&lt;IIndexableField&gt;&gt;, Analyzer) or IndexWriter.UpdateDocuments(Term, IEnumerable&lt;IEnumerable&lt;IIndexableField&gt;&gt;, Analyzer), which means it can easily break up such document groups.</value>
+  </data>
   <data name="IndexSplitCommandInputDirectoryDescription" xml:space="preserve">
-    <value>Path to input index. Multiple values can be provided separated by a space.</value>
+    <value>The path of the source index, which can have deletions and can have multiple segments (or multiple readers). Multiple values can be supplied separated by a space.</value>
   </data>
   <data name="IndexSplitCommandNumberOfPartsDescription" xml:space="preserve">
-    <value>The number of parts to produce.</value>
+    <value>The number of parts (output indices) to produce. If omitted, defaults to 2.</value>
   </data>
   <data name="IndexSplitCommandOutputDirectoryDescription" xml:space="preserve">
     <value>Path to output directory to contain partial indexes.</value>
   </data>
   <data name="IndexSplitCommandSequentialDescription" xml:space="preserve">
-    <value>Sequential docid-range split.</value>
+    <value>Sequential doc-id range split (default is round-robin).</value>
   </data>
   <data name="IndexUpgradeCommandDeleteDescription" xml:space="preserve">
     <value>Deletes prior commits.</value>
@@ -355,46 +381,50 @@
     <value>Upgrades all segments of an index from previous Lucene.Net versions to the current segment file format.</value>
   </data>
   <data name="IndexUpgradeCommandExtendedHelpText" xml:space="preserve">
-    <value>This tool keeps only the last commit in an index; for this reason, if the incoming index has more than one commit, the tool refuses to run by default. Specify --delete-prior-commits to override this, allowing the tool to delete all but the last commit. Specify an FSDirectory implementation through the --directory-type option to force its use. If not qualified by an AssemblyName, the Lucene.Net.dll assembly will be used. WARNING: This tool may reorder document IDs! Also, ensure you are using the correct version of this utility to match your application's version of Lucene.Net.</value>
+    <value>This tool keeps only the last commit in an index; for this reason, if the incoming index has more than one commit, the tool refuses to run by default. Specify --delete-prior-commits to override this, allowing the tool to delete all but the last commit. 
+
+Specify an FSDirectory implementation through the --directory-type option to force its use. If not qualified by an AssemblyName, the Lucene.Net.dll assembly will be used. 
+
+WARNING: This tool may reorder document IDs! Be sure to make a backup of your index before you use this. Also, ensure you are using the correct version of this utility to match your application's version of Lucene.Net. This operation cannot be reversed.</value>
   </data>
   <data name="LockCommandDescription" xml:space="preserve">
     <value>Utilities for verifying concurrent locking integrity.</value>
   </data>
-  <data name="LockStressTestCommandCountDescription" xml:space="preserve">
-    <value>Number of locking tries.</value>
-  </data>
   <data name="LockStressTestCommandDescription" xml:space="preserve">
-    <value>Simple standalone tool that forever acquires &amp; releases a lock using a specific LockFactory.</value>
+    <value>Simple tool that forever acquires and releases a lock using a specific LockFactory.</value>
   </data>
   <data name="LockStressTestCommandExtendedHelpText" xml:space="preserve">
-    <value>You should run multiple instances of this process, each with its own unique ID, and each pointing to the same lock directory, to verify that locking is working correctly. Make sure you are first running LockVerifyServer.</value>
+    <value>You should run multiple instances of this process, each with its own unique ID, and each pointing to the same lock directory, to verify that locking is working correctly. Make sure you are first running verify-server.</value>
   </data>
   <data name="LockStressTestCommandIDDescription" xml:space="preserve">
-    <value>int value from 0 .. 255 (should be unique for test process).</value>
+    <value>An integer from 0 - 255 (should be unique for test process).</value>
   </data>
-  <data name="LockStressTestCommandLockFactoryNameDescription" xml:space="preserve">
-    <value>Path to the lock directory (only set for Simple/NativeFSLockFactory).</value>
+  <data name="LockStressTestCommandLockDirectoryDescription" xml:space="preserve">
+    <value>The path to the lock directory (only utilized if LOCK_FACTORY_TYPE is set to SimpleFSLockFactory or NativeFSLockFactory).</value>
   </data>
-  <data name="LockStressTestCommandLockFactoryTypeNameDescription" xml:space="preserve">
-    <value>Primary LockFactory class that we will use.</value>
+  <data name="LockStressTestCommandLockFactoryTypeDescription" xml:space="preserve">
+    <value>The primary LockFactory implementation that we will use.</value>
   </data>
   <data name="LockStressTestCommandSleepTimeMSDescription" xml:space="preserve">
-    <value>Milliseconds to pause betweeen each lock obtain/release.</value>
+    <value>Milliseconds to pause between each lock obtain/release.</value>
+  </data>
+  <data name="LockStressTestCommandTriesDescription" xml:space="preserve">
+    <value>Number of locking tries.</value>
   </data>
   <data name="LockStressTestCommandVerfierPortDescription" xml:space="preserve">
-    <value>Port that LockVerifyServer is listening on.</value>
+    <value>Port that verify-server is listening on.</value>
   </data>
   <data name="LockStressTestCommandVerifierHostDescription" xml:space="preserve">
-    <value>Hostname that LockVerifyServer is listening on.</value>
+    <value>Hostname or IP address that verify-server is listening on.</value>
   </data>
   <data name="LockVerifyServerCommandDescription" xml:space="preserve">
-    <value>Simple standalone server that must be running when you use VerifyingLockFactory. This server verifies at most one process holds the lock at a time.</value>
+    <value>Simple server that must be running when you use VerifyingLockFactory (or stress-test). This server verifies at most one process holds the lock at a time.</value>
   </data>
   <data name="LockVerifyServerCommandIPHostnameDescription" xml:space="preserve">
-    <value>Hostname or IP address that LockVerifyServer will listen on.</value>
+    <value>Hostname or IP address that verify-server will listen on.</value>
   </data>
   <data name="LockVerifyServerCommandMaxClientsDescription" xml:space="preserve">
-    <value>The maximum number of concurrent clients.</value>
+    <value>The maximum number of connected clients.</value>
   </data>
   <data name="NotEnoughArguments" xml:space="preserve">
     <value>{0} arguments are required.</value>

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/arguments/SegmentsArgument.cs
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/arguments/SegmentsArgument.cs b/src/tools/lucene-cli/arguments/SegmentsArgument.cs
index bf6b0c9..d7a406a 100644
--- a/src/tools/lucene-cli/arguments/SegmentsArgument.cs
+++ b/src/tools/lucene-cli/arguments/SegmentsArgument.cs
@@ -23,7 +23,7 @@ namespace Lucene.Net.Cli
     {
         public SegmentsArgument()
         {
-            Name = "<SEGMENT>[ [<SEGMENT_2] ...[<SEGMENT_N>]]";
+            Name = "<SEGMENT>[ <SEGMENT_2>...]";
             Description = Resources.Strings.SegmentsArgumentDescription;
             MultipleValues = true;
         }

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/commands/index/index-check/IndexCheckCommand.cs
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/commands/index/index-check/IndexCheckCommand.cs b/src/tools/lucene-cli/commands/index/index-check/IndexCheckCommand.cs
index 11d9e96..5f216af 100644
--- a/src/tools/lucene-cli/commands/index/index-check/IndexCheckCommand.cs
+++ b/src/tools/lucene-cli/commands/index/index-check/IndexCheckCommand.cs
@@ -37,6 +37,7 @@ namespace Lucene.Net.Cli
 
                 this.Name = "check";
                 this.Description = FromResource("Description");
+                this.ExtendedHelpText = FromResource("ExtendedHelpText");
 
                 this.Arguments.Add(new IndexDirectoryArgument());
                 this.Options.Add(new VerboseOption());

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/commands/index/index-copy-segments/IndexCopySegmentsCommand.cs
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/commands/index/index-copy-segments/IndexCopySegmentsCommand.cs b/src/tools/lucene-cli/commands/index/index-copy-segments/IndexCopySegmentsCommand.cs
index 47caa63..d5aa62b 100644
--- a/src/tools/lucene-cli/commands/index/index-copy-segments/IndexCopySegmentsCommand.cs
+++ b/src/tools/lucene-cli/commands/index/index-copy-segments/IndexCopySegmentsCommand.cs
@@ -29,13 +29,12 @@ namespace Lucene.Net.Cli
 
                 this.Name = "copy-segments";
                 this.Description = FromResource("Description");
+                this.ExtendedHelpText = FromResource("ExtendedHelpText");
 
                 this.Argument("<INPUT_DIRECTORY>", FromResource("InputDirectoryDescription"));
                 this.Argument("<OUTPUT_DIRECTORY>", FromResource("OutputDirectoryDescription"));
                 this.Arguments.Add(new SegmentsArgument() { Description = FromResource("SegmentsDescription") });
 
-                this.ExtendedHelpText = FromResource("ExtendedHelpText");
-
                 this.OnExecute(() => new IndexCopySegmentsCommand().Run(this));
             }
         }

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/commands/index/index-extract-cfs/IndexExtractCfsCommand.cs
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/commands/index/index-extract-cfs/IndexExtractCfsCommand.cs b/src/tools/lucene-cli/commands/index/index-extract-cfs/IndexExtractCfsCommand.cs
index 874f6a6..97f7b99 100644
--- a/src/tools/lucene-cli/commands/index/index-extract-cfs/IndexExtractCfsCommand.cs
+++ b/src/tools/lucene-cli/commands/index/index-extract-cfs/IndexExtractCfsCommand.cs
@@ -30,6 +30,7 @@ namespace Lucene.Net.Cli
 
                 this.Name = "extract-cfs";
                 this.Description = FromResource("Description");
+                this.ExtendedHelpText = FromResource("ExtendedHelpText");
 
                 this.Argument("<CFS_FILE_NAME>", FromResource("CFSFileNameDescription"));
                 this.Options.Add(new DirectoryTypeOption());

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/commands/index/index-list-cfs/IndexListCfsCommand.cs
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/commands/index/index-list-cfs/IndexListCfsCommand.cs b/src/tools/lucene-cli/commands/index/index-list-cfs/IndexListCfsCommand.cs
index 4b05cbb..2084649 100644
--- a/src/tools/lucene-cli/commands/index/index-list-cfs/IndexListCfsCommand.cs
+++ b/src/tools/lucene-cli/commands/index/index-list-cfs/IndexListCfsCommand.cs
@@ -37,6 +37,7 @@ namespace Lucene.Net.Cli
 
                 this.Name = "list-cfs";
                 this.Description = FromResource("Description");
+                this.ExtendedHelpText = FromResource("ExtendedHelpText");
 
                 this.Argument("<CFS_FILE_NAME>", FromResource("CFSFileNameDescription"));
                 this.Options.Add(new DirectoryTypeOption());

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/commands/index/index-list-high-freq-terms/IndexListHighFreqTerms.cs
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/commands/index/index-list-high-freq-terms/IndexListHighFreqTerms.cs b/src/tools/lucene-cli/commands/index/index-list-high-freq-terms/IndexListHighFreqTerms.cs
index ced2b9d..c4367ea 100644
--- a/src/tools/lucene-cli/commands/index/index-list-high-freq-terms/IndexListHighFreqTerms.cs
+++ b/src/tools/lucene-cli/commands/index/index-list-high-freq-terms/IndexListHighFreqTerms.cs
@@ -38,7 +38,7 @@ namespace Lucene.Net.Cli
                     FromResource("TotalTermFrequencyDescription"),
                     CommandOptionType.NoValue);
                 this.NumberOfTermsOption = this.Option(
-                    "-n|--number-of-terms <NUMBER_OF_TERMS>",
+                    "-n|--number-of-terms <NUMBER>",
                     FromResource("NumberOfTermsDescription"),
                     CommandOptionType.SingleValue);
                 this.FieldOption = this.Option(

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/commands/index/index-list-segments/IndexSegmentListCommand.cs
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/commands/index/index-list-segments/IndexSegmentListCommand.cs b/src/tools/lucene-cli/commands/index/index-list-segments/IndexSegmentListCommand.cs
index ca4d2dc..1e636b5 100644
--- a/src/tools/lucene-cli/commands/index/index-list-segments/IndexSegmentListCommand.cs
+++ b/src/tools/lucene-cli/commands/index/index-list-segments/IndexSegmentListCommand.cs
@@ -30,6 +30,7 @@ namespace Lucene.Net.Cli
 
                 this.Name = "list-segments";
                 this.Description = FromResource("Description");
+                this.ExtendedHelpText = FromResource("ExtendedHelpText");
 
                 this.Arguments.Add(new IndexDirectoryArgument());
 

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/commands/index/index-list-taxonomy-stats/IndexListTaxonomyStatsCommand.cs
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/commands/index/index-list-taxonomy-stats/IndexListTaxonomyStatsCommand.cs b/src/tools/lucene-cli/commands/index/index-list-taxonomy-stats/IndexListTaxonomyStatsCommand.cs
index ad985d8..ad4772c 100644
--- a/src/tools/lucene-cli/commands/index/index-list-taxonomy-stats/IndexListTaxonomyStatsCommand.cs
+++ b/src/tools/lucene-cli/commands/index/index-list-taxonomy-stats/IndexListTaxonomyStatsCommand.cs
@@ -31,6 +31,7 @@ namespace Lucene.Net.Cli
 
                 this.Name = "list-taxonomy-stats";
                 this.Description = FromResource("Description");
+                this.ExtendedHelpText = FromResource("ExtendedHelpText");
 
                 this.Arguments.Add(new IndexDirectoryArgument());
                 this.ShowTreeOption = this.Option("-tree|--show-tree", FromResource("ShowTreeDescription"), CommandOptionType.NoValue);

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/commands/index/index-list-term-info/IndexListTermInfoCommand.cs
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/commands/index/index-list-term-info/IndexListTermInfoCommand.cs b/src/tools/lucene-cli/commands/index/index-list-term-info/IndexListTermInfoCommand.cs
index 780e8d1..688372a 100644
--- a/src/tools/lucene-cli/commands/index/index-list-term-info/IndexListTermInfoCommand.cs
+++ b/src/tools/lucene-cli/commands/index/index-list-term-info/IndexListTermInfoCommand.cs
@@ -29,6 +29,7 @@ namespace Lucene.Net.Cli
 
                 this.Name = "list-term-info";
                 this.Description = FromResource("Description");
+                this.ExtendedHelpText = FromResource("ExtendedHelpText");
 
                 this.Arguments.Add(new IndexDirectoryArgument(required: true) { Description = FromResource("IndexDirectoryDescription") });
                 this.Argument("<FIELD>", FromResource("FieldDescription"));

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/commands/index/index-split/IndexSplitCommand.cs
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/commands/index/index-split/IndexSplitCommand.cs b/src/tools/lucene-cli/commands/index/index-split/IndexSplitCommand.cs
index 80bd2eb..b8cc60e 100644
--- a/src/tools/lucene-cli/commands/index/index-split/IndexSplitCommand.cs
+++ b/src/tools/lucene-cli/commands/index/index-split/IndexSplitCommand.cs
@@ -60,11 +60,17 @@ namespace Lucene.Net.Cli
 
             var input = cmd as Configuration;
 
+            args.Add("-num");
+
             if (input.NumberOfParts != null && input.NumberOfParts.HasValue())
             {
-                args.Add("-num");
                 args.Add(input.NumberOfParts.Value());
             }
+            else
+            {
+                // Default to 2 parts
+                args.Add("2");
+            }
 
             if (input.Sequential != null && input.Sequential.HasValue())
             {

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/commands/lock/lock-stress-test/LockStressTestCommand.cs
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/commands/lock/lock-stress-test/LockStressTestCommand.cs b/src/tools/lucene-cli/commands/lock/lock-stress-test/LockStressTestCommand.cs
index 9b0f908..199ad08 100644
--- a/src/tools/lucene-cli/commands/lock/lock-stress-test/LockStressTestCommand.cs
+++ b/src/tools/lucene-cli/commands/lock/lock-stress-test/LockStressTestCommand.cs
@@ -29,16 +29,15 @@ namespace Lucene.Net.Cli
 
                 this.Name = "stress-test";
                 this.Description = FromResource("Description");
+                this.ExtendedHelpText = FromResource("ExtendedHelpText");
 
                 this.Argument("<ID>", FromResource("IDDescription"));
                 this.Argument("<VERIFIER_HOST>", FromResource("VerifierHostDescription"));
                 this.Argument("<VERIFIER_PORT>", FromResource("VerfierPortDescription"));
-                this.Argument("<LOCK_FACTORY_TYPENAME>", FromResource("LockFactoryTypeNameDescription"));
-                this.Argument("<LOCK_DIRECTORY_NAME>", FromResource("LockFactoryNameDescription"));
+                this.Argument("<LOCK_FACTORY_TYPE>", FromResource("LockFactoryTypeDescription"));
+                this.Argument("<LOCK_DIRECTORY>", FromResource("LockDirectoryDescription"));
                 this.Argument("<SLEEP_TIME_MS>", FromResource("SleepTimeMSDescription"));
-                this.Argument("<COUNT>", FromResource("CountDescription"));
-
-                this.ExtendedHelpText = FromResource("ExtendedHelpText");
+                this.Argument("<TRIES>", FromResource("TriesDescription"));
 
                 this.OnExecute(() => new LockStressTestCommand().Run(this));
             }

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/docs/analysis/index.md
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/docs/analysis/index.md b/src/tools/lucene-cli/docs/analysis/index.md
new file mode 100644
index 0000000..c114294
--- /dev/null
+++ b/src/tools/lucene-cli/docs/analysis/index.md
@@ -0,0 +1,10 @@
+# analysis
+
+## Description
+
+Utilities to manage specialized analyzers.
+
+## Commands
+
+- [stempel-compile-stems](stempel-compile-stems.md)
+- [stempel-patch-stems](stempel-patch-stems.md)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/docs/analysis/stempel-compile-stems.md
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/docs/analysis/stempel-compile-stems.md b/src/tools/lucene-cli/docs/analysis/stempel-compile-stems.md
new file mode 100644
index 0000000..6aae62c
--- /dev/null
+++ b/src/tools/lucene-cli/docs/analysis/stempel-compile-stems.md
@@ -0,0 +1,37 @@
+# stempel-compile-stems
+
+### Name
+
+`analysis-stempel-compile-stems` - Compiles a stemmer table for the Egothor stemmer in the Lucene.Net.Analysis.Stempel project.
+
+### Synopsis
+
+<code>dotnet lucene-cli.dll analysis stempel-compile-stems <STEMMING_ALGORITHM> <STEMMER_TABLE_FILE> [-e|--encoding] [?|-h|--help]</code>
+
+### Description
+
+See the [Egothor project documentation](http://egothor.sourceforge.net/) for more information.
+
+### Arguments
+
+`STEMMING_ALGORITHM`
+
+The name of the desired stemming algorithm to use. Possible values are `Multi` (which changes the stemmer to use the  MultiTrie2 rather than a Trie class to store its data) or `0` which instructs the stemmer to store the original data. Any other supplied value will use the default algorithm. See the [Egothor project documentation](http://egothor.sourceforge.net/) for more information.
+
+`STEMMER_TABLE_FILE`
+
+The path to a file containing a stemmer table. Multiple values can be supplied separated by a space.
+
+### Options
+
+`?|-h|--help`
+
+Prints out a short help for the command.
+
+`-e|--encoding <ENCODING>`
+
+The file encoding used by the stemmer files. If not supplied, the default value is `UTF-8`. Note this value can alternatively be supplied by setting the environment variable `egothor.stemmer.charset`.
+
+### Example
+
+<code>dotnet lucene-cli.dll analysis stempel-compile-stems test X:\stemmer-data\table1.txt X:\stemmer-data\table2.txt</code>

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/docs/analysis/stempel-patch-stems.md
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/docs/analysis/stempel-patch-stems.md b/src/tools/lucene-cli/docs/analysis/stempel-patch-stems.md
new file mode 100644
index 0000000..9b4ce4a
--- /dev/null
+++ b/src/tools/lucene-cli/docs/analysis/stempel-patch-stems.md
@@ -0,0 +1,34 @@
+# stempel-patch-stems
+
+### Name
+
+`analysis-stempel-patch-stems` - Generates patch commands from an already prepared stemmer table for the Egothor stemmer in the Lucene.Net.Analysis.Stempel project.
+
+### Synopsis
+
+<code>dotnet lucene-cli.dll analysis stempel-patch-stems <STEMMER_TABLE_FILE> [-e|--encoding] [?|-h|--help]</code>
+
+### Description
+
+See the [Egothor project documentation](http://egothor.sourceforge.net/) for more information.
+
+### Arguments
+
+`STEMMER_TABLE_FILE`
+
+The path to a file containing a stemmer table. Multiple values can be supplied separated by a space.
+
+### Options
+
+`?|-h|--help`
+
+Prints out a short help for the command.
+
+`-e|--encoding <ENCODING>`
+
+The file encoding used by the stemmer files. If not supplied, the default value is `UTF-8`. Note this value can alternatively be supplied by setting the environment variable `egothor.stemmer.charset`.
+
+### Example
+
+<code>dotnet lucene-cli.dll analysis stempel-patch-stems X:\stemmer-data\table1.txt X:\stemmer-data\table2.txt --encoding UTF-16</code>
+

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/docs/demo/associations-facets.md
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/docs/demo/associations-facets.md b/src/tools/lucene-cli/docs/demo/associations-facets.md
new file mode 100644
index 0000000..77b10fe
--- /dev/null
+++ b/src/tools/lucene-cli/docs/demo/associations-facets.md
@@ -0,0 +1,27 @@
+# associations-facets
+
+### Name
+
+`demo-associations-facets` - Shows example usage of category associations.
+
+### Synopsis
+
+<code>dotnet lucene-cli.dll demo associations-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help]</code>
+
+### Options
+
+`?|-h|--help`
+
+Prints out a short help for the command.
+
+`-src|--view-source-code`
+
+Prints the source code to the console. Use `SPACE` or `n` to move to the next page of text, `ENTER` to scroll to the next line of text, `q` or `x` to quit.
+
+`-out|--output-source-code <DIRECTORY>`
+
+Outputs the source code to the specified directory.
+
+### Example
+
+<code>dotnet lucene-cli.dll demo associations-facets</code>

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/docs/demo/distance-facets.md
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/docs/demo/distance-facets.md b/src/tools/lucene-cli/docs/demo/distance-facets.md
new file mode 100644
index 0000000..abfdf3a
--- /dev/null
+++ b/src/tools/lucene-cli/docs/demo/distance-facets.md
@@ -0,0 +1,27 @@
+# distance-facets
+
+### Name
+
+`demo-distance-facets` - Shows simple usage of dynamic range faceting, using the expressions module to calculate distance.
+
+### Synopsis
+
+<code>dotnet lucene-cli.dll demo distance-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help]</code>
+
+### Options
+
+`?|-h|--help`
+
+Prints out a short help for the command.
+
+`-src|--view-source-code`
+
+Prints the source code to the console. Use `SPACE` or `n` to move to the next page of text, `ENTER` to scroll to the next line of text, `q` or `x` to quit.
+
+`-out|--output-source-code <DIRECTORY>`
+
+Outputs the source code to the specified directory.
+
+### Example
+
+<code>dotnet lucene-cli.dll demo distance-facets</code>

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/docs/demo/expression-aggregation-facets.md
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/docs/demo/expression-aggregation-facets.md b/src/tools/lucene-cli/docs/demo/expression-aggregation-facets.md
new file mode 100644
index 0000000..8633982
--- /dev/null
+++ b/src/tools/lucene-cli/docs/demo/expression-aggregation-facets.md
@@ -0,0 +1,27 @@
+# expression-aggregation-facets
+
+### Name
+
+`demo-expression-aggregation-facets` - Shows facets aggregation by an expression.
+
+### Synopsis
+
+<code>dotnet lucene-cli.dll demo expression-aggregation-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help]</code>
+
+### Options
+
+`?|-h|--help`
+
+Prints out a short help for the command.
+
+`-src|--view-source-code`
+
+Prints the source code to the console. Use `SPACE` or `n` to move to the next page of text, `ENTER` to scroll to the next line of text, `q` or `x` to quit.
+
+`-out|--output-source-code <DIRECTORY>`
+
+Outputs the source code to the specified directory.
+
+### Example
+
+<code>dotnet lucene-cli.dll demo expression-aggregation-facets</code>

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/docs/demo/index-files.md
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/docs/demo/index-files.md b/src/tools/lucene-cli/docs/demo/index-files.md
new file mode 100644
index 0000000..10d1806
--- /dev/null
+++ b/src/tools/lucene-cli/docs/demo/index-files.md
@@ -0,0 +1,51 @@
+# index-files
+
+### Name
+
+`demo-index-files` - Index all files under a directory.
+
+### Synopsis
+
+```
+dotnet lucene-cli.dll demo index-files <INDEX_DIRECTORY> <SOURCE_DIRECTORY> [-u|--update] [?|-h|--help]
+dotnet lucene-cli.dll demo index-files [-src|--view-source-code] [-out|--output-source-code]
+```
+
+### Description
+
+This demo can be used to learn how to build a Lucene.Net index. After the index has been built, you can run the [search-files demo](search-files.md) to run queries against it.
+
+### Arguments
+
+`INDEX_DIRECTORY`
+
+The directory of the index.
+
+`SOURCE_DIRECTORY`
+
+The source directory containing the files to index. This directory will be analyzed recursively.
+
+### Options
+
+`?|-h|--help`
+
+Prints out a short help for the command.
+
+`-u|--update`
+
+Adds new documents to an existing index. If not supplied, any existing index in the `INDEX_DIRECTORY` will be overwritten.
+
+`-src|--view-source-code`
+
+Prints the source code to the console. Use `SPACE` or `n` to move to the next page of text, `ENTER` to scroll to the next line of text, `q` or `x` to quit.
+
+`-out|--output-source-code <DIRECTORY>`
+
+Outputs the source code to the specified directory.
+
+### Example
+
+Indexes the contents of `C:\Users\BGates\Documents\` and places the Lucene.Net index in `X:\test-index\`.
+
+<code>dotnet lucene-cli.dll demo index-files X:\test-index C:\Users\BGates\Documents</code>
+

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/docs/demo/index.md
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/docs/demo/index.md b/src/tools/lucene-cli/docs/demo/index.md
new file mode 100644
index 0000000..27f4ec1
--- /dev/null
+++ b/src/tools/lucene-cli/docs/demo/index.md
@@ -0,0 +1,17 @@
+# demo
+
+## Description
+
+Demos for various Lucene.Net functionality including C# code samples.
+
+## Commands
+
+- [associations-facets](associations-facets.md)
+- [distance-facets](distance-facets.md)
+- [expression-aggregation-facets](expression-aggregation-facets.md)
+- [index-files](index-files.md)
+- [multi-category-lists-facets](multi-category-lists-facets.md)
+- [range-facets](range-facets.md)
+- [search-files](search-files.md)
+- [simple-facets](simple-facets.md)
+- [simple-sorted-set-facets](simple-sorted-set-facets.md)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/docs/demo/multi-category-lists-facets.md
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/docs/demo/multi-category-lists-facets.md b/src/tools/lucene-cli/docs/demo/multi-category-lists-facets.md
new file mode 100644
index 0000000..f486c2a
--- /dev/null
+++ b/src/tools/lucene-cli/docs/demo/multi-category-lists-facets.md
@@ -0,0 +1,28 @@
+# multi-category-lists-facets
+
+### Name
+
+`demo-multi-category-lists-facets` - Demonstrates indexing categories into different indexed fields.
+
+### Synopsis
+
+<code>dotnet lucene-cli.dll demo multi-category-lists-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help]</code>
+
+### Options
+
+`?|-h|--help`
+
+Prints out a short help for the command.
+
+`-src|--view-source-code`
+
+Prints the source code to the console. Use `SPACE` or `n` to move to the next page of text, `ENTER` to scroll to the next line of text, `q` or `x` to quit.
+
+`-out|--output-source-code <DIRECTORY>`
+
+Outputs the source code to the specified directory.
+
+
+### Example
+
+<code>dotnet lucene-cli.dll demo multi-category-lists-facets</code>

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/docs/demo/range-facets.md
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/docs/demo/range-facets.md b/src/tools/lucene-cli/docs/demo/range-facets.md
new file mode 100644
index 0000000..09e392e
--- /dev/null
+++ b/src/tools/lucene-cli/docs/demo/range-facets.md
@@ -0,0 +1,27 @@
+# range-facets
+
+### Name
+
+`demo-range-facets` - Shows simple usage of dynamic range faceting.
+
+### Synopsis
+
+<code>dotnet lucene-cli.dll demo range-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help]</code>
+
+### Options
+
+`?|-h|--help`
+
+Prints out a short help for the command.
+
+`-src|--view-source-code`
+
+Prints the source code to the console. Use `SPACE` or `n` to move to the next page of text, `ENTER` to scroll to the next line of text, `q` or `x` to quit.
+
+`-out|--output-source-code <DIRECTORY>`
+
+Outputs the source code to the specified directory.
+
+### Example
+
+<code>dotnet lucene-cli.dll demo range-facets</code>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/docs/demo/search-files.md
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/docs/demo/search-files.md b/src/tools/lucene-cli/docs/demo/search-files.md
new file mode 100644
index 0000000..3bbfe38
--- /dev/null
+++ b/src/tools/lucene-cli/docs/demo/search-files.md
@@ -0,0 +1,72 @@
+# search-files
+
+### Name
+
+`demo-search-files` - Simple command-line based search demo.
+
+### Synopsis
+
+```
+dotnet lucene-cli.dll demo search-files <INDEX_DIRECTORY> [-f|--field] [-r|--repeat] [-qf|--queries-file] [-q|--query] [--raw] [-p|--page-size] [?|-h|--help]
+dotnet lucene-cli.dll demo search-files [-src|--view-source-code] [-out|--output-source-code]
+```
+
+### Description
+
+Run the [index-files demo](index-files.md) first to generate an index to search.
+
+> NOTE: To run queries interactively in the console, omit both the `--queries-file` and the `--query` arguments.
+
+### Arguments
+
+`INDEX_DIRECTORY`
+
+The directory of the index that has previously been created using the [index-files demo](index-files.md).
+
+### Options
+
+`?|-h|--help`
+
+Prints out a short help for the command.
+
+`-f|--field <FIELD>`
+
+The index field to use in the search. If not supplied, defaults to `contents`.
+
+`-r|--repeat <NUMBER>`
+
+Repeat the search and time as a benchmark.
+
+`-qf|--queries-file <PATH>`
+
+A file containing the queries to perform.
+
+`-q|--query <QUERY>`
+
+A query to perform.
+
+`--raw`
+
+Output raw format.
+
+`-p|--page-size <NUMBER>`
+
+Hits per page to display.
+
+`-src|--view-source-code`
+
+Prints the source code to the console. Use `SPACE` or `n` to move to the next page of text, `ENTER` to scroll to the next line of text, `q` or `x` to quit.
+
+`-out|--output-source-code <DIRECTORY>`
+
+Outputs the source code to the specified directory.
+
+### Examples
+
+Search the index located in the `X:\test-index` directory interactively, showing 15 results per page in raw format:
+
+<code>dotnet lucene-cli.dll demo search-files X:\test-index -p 15 --raw</code>
+
+Run the query "foobar" against the "path" field in the index located in the `X:\test-index` directory:
+
+<code>dotnet lucene-cli.dll demo search-files X:\test-index --field path --query foobar</code>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/docs/demo/simple-facets.md
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/docs/demo/simple-facets.md b/src/tools/lucene-cli/docs/demo/simple-facets.md
new file mode 100644
index 0000000..cdb8f30
--- /dev/null
+++ b/src/tools/lucene-cli/docs/demo/simple-facets.md
@@ -0,0 +1,27 @@
+# simple-facets
+
+### Name
+
+`demo-simple-facets` - Shows simple usage of faceted indexing and searching.
+
+### Synopsis
+
+</code>dotnet lucene-cli.dll demo simple-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help]</code>
+
+### Options
+
+`?|-h|--help`
+
+Prints out a short help for the command.
+
+`-src|--view-source-code`
+
+Prints the source code to the console. Use `SPACE` or `n` to move to the next page of text, `ENTER` to scroll to the next line of text, `q` or `x` to quit.
+
+`-out|--output-source-code <DIRECTORY>`
+
+Outputs the source code to the specified directory.
+
+### Example
+
+<code>dotnet lucene-cli.dll demo simple-facets</code>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/docs/demo/simple-sorted-set-facets.md
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/docs/demo/simple-sorted-set-facets.md b/src/tools/lucene-cli/docs/demo/simple-sorted-set-facets.md
new file mode 100644
index 0000000..09052d9
--- /dev/null
+++ b/src/tools/lucene-cli/docs/demo/simple-sorted-set-facets.md
@@ -0,0 +1,29 @@
+# simple-sorted-set-facets
+
+### Name
+
+`demo-simple-sorted-set-facets` - Shows simple usage of faceted indexing and search using SortedSetDocValuesFacetField and SortedSetDocValuesFacetCounts.
+
+### Synopsis
+
+<code>dotnet lucene-cli.dll demo simple-sorted-set-facets [-src|--view-source-code] [-out|--output-source-code] [?|-h|--help]</code>
+
+### Options
+
+`?|-h|--help`
+
+Prints out a short help for the command.
+
+`-src|--view-source-code`
+
+Prints the source code to the console. Use `SPACE` or `n` to move to the next page of text, `ENTER` to scroll to the next line of text, `q` or `x` to quit.
+
+`-out|--output-source-code <DIRECTORY>`
+
+Outputs the source code to the specified directory.
+
+### Example
+
+<code>dotnet lucene-cli.dll demo simple-sorted-set-facets</code>
+
+

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/docs/index.md
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/docs/index.md b/src/tools/lucene-cli/docs/index.md
new file mode 100644
index 0000000..933336f
--- /dev/null
+++ b/src/tools/lucene-cli/docs/index.md
@@ -0,0 +1,25 @@
+# Lucene.Net command line interface (CLI) tools
+
+The Lucene.Net command line interface (CLI) is a new cross-platform toolchain with utilities for maintaining Lucene.Net and demos for learning basic Lucene.Net functionality.
+
+## Installation
+
+LUCENENET TODO
+
+## CLI Commands
+
+The following commands are installed:
+
+- [analysis](analysis/index.md)
+- [demo](demo/index.md)
+- [index](index/index.md)
+- [lock](lock/index.md)
+
+## Command structure
+
+CLI command structure consists of the driver ("dotnet lucene-cli.dll"), the command, and possibly command arguments and options. You see this pattern in most CLI operations, such as checking a Lucene.Net index for problematic segments and fixing (removing) them:
+
+```
+dotnet lucene-cli.dll index check C:\my-index --verbose
+dotnet lucene-cli.dll index fix C:\my-index
+```
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/docs/index/check.md
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/docs/index/check.md b/src/tools/lucene-cli/docs/index/check.md
new file mode 100644
index 0000000..caa18b2
--- /dev/null
+++ b/src/tools/lucene-cli/docs/index/check.md
@@ -0,0 +1,55 @@
+# check
+
+### Name
+
+`index-check` - Checks an index for problematic segments.
+
+### Synopsis
+
+<code>dotnet lucene-cli.dll index check [<INDEX_DIRECTORY>] [-v|--verbose] [-c|--cross-check-term-vectors] [-dir|--directory-type] [-s|--segment] [?|-h|--help]</code>
+
+### Description
+
+Basic tool to check the health of an index. 
+
+As this tool checks every byte in the index, on a large index it can take quite a long time to run.
+
+### Arguments
+
+`INDEX_DIRECTORY`
+
+The path to the directory of the index to check. If omitted, it defaults to the current working directory.
+
+### Options
+
+`?|-h|--help`
+
+Prints out a short help for the command.
+
+`-v|--verbose`
+
+Enable verbose output.
+
+`-c|--cross-check-term-vectors`
+
+Cross-check term vectors.
+
+`-dir|--directory-type <DIRECTORY_TYPE>`
+
+The FSDirectory implementation to use. If ommitted, it defaults to the optimal FSDirectory for your OS platform.
+
+`-s|--segment <SEGMENT>`
+
+Only check the specified segment(s). This can be specified multiple times, to check more than one segment, eg --segment _2 --segment _a.
+
+### Examples
+
+Check the index located at `X:\lucenenet-index\` verbosely, scanning only the segments named `_1j_Lucene41_0` and `_2u_Lucene41_0` for problems:
+
+<code>dotnet lucene-cli.dll index check X:\lucenenet-index -v -s _1j_Lucene41_0 -s _2u_Lucene41_0</code>
+
+
+Check the index located at `C:\taxonomy\` using the `MMapDirectory` memory-mapped directory implementation:
+
+<code>dotnet lucene-cli.dll index check C:\taxonomy --directory-type MMapDirectory</code>
+

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/docs/index/copy-segments.md
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/docs/index/copy-segments.md b/src/tools/lucene-cli/docs/index/copy-segments.md
new file mode 100644
index 0000000..c9868ef
--- /dev/null
+++ b/src/tools/lucene-cli/docs/index/copy-segments.md
@@ -0,0 +1,40 @@
+# copy-segments
+
+### Name
+
+`index-copy-segments` - Copies segments from one index to another index.
+
+### Synopsis
+
+<code>dotnet lucene-cli.dll index copy-segments <INPUT_DIRECTORY> <OUTPUT_DIRECTORY> <SEGMENT>[ <SEGMENT_2>...] [?|-h|--help]</code>
+
+### Description
+
+This tool does file-level copying of segments files. This means it's unable to split apart a single segment into multiple segments. For example if your index is a single segment, this tool won't help.  Also, it does basic file-level copying (using simple FileStream) so it will not work with non FSDirectory Directory implementations.
+
+### Arguments
+
+`INPUT_DIRECTORY`
+
+The directory of the index to copy.
+
+`OUTPUT_DIRECTORY`
+
+The directory of the destination index.
+
+`SEGMENT, SEGMENT_2`
+
+The segments to copy, separated by a space.
+
+### Options
+
+`?|-h|--help`
+
+Prints out a short help for the command.
+
+### Example
+
+Copy the `_71_Lucene41_0` segment from the index located at `X:\lucene-index` to the index located at `X:\output`:
+
+<code>dotnet lucene-cli.dll index copy-segments X:\lucene-index X:\output _71_Lucene41_0</code>
+

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/docs/index/delete-segments.md
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/docs/index/delete-segments.md b/src/tools/lucene-cli/docs/index/delete-segments.md
new file mode 100644
index 0000000..398d182
--- /dev/null
+++ b/src/tools/lucene-cli/docs/index/delete-segments.md
@@ -0,0 +1,35 @@
+# delete-segments
+
+### Name
+
+`index-delete-segments` - Deletes segments from an index.
+
+### Synopsis
+
+<code>dotnet lucene-cli.dll index delete-segments <INDEX_DIRECTORY> <SEGMENT>[ <SEGMENT_2>...] [?|-h|--help]</code>
+
+### Description
+
+You can easily accidentally remove segments from your index, so be careful! Always make a backup of your index first.
+
+### Arguments
+
+`INDEX_DIRECTORY`
+
+The directory of the index.
+
+`SEGMENT`
+
+The segments to delete, separated by a space.
+
+### Options
+
+`?|-h|--help`
+
+Prints out a short help for the command.
+
+### Example
+
+Delete the segments named `_8c` and `_83` from the index located at `X:\category-data\`:
+
+<code>dotnet lucene-cli.dll index delete-segments X:\category-data _8c _83</code>

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/docs/index/extract-cfs.md
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/docs/index/extract-cfs.md b/src/tools/lucene-cli/docs/index/extract-cfs.md
new file mode 100644
index 0000000..f6fc40e
--- /dev/null
+++ b/src/tools/lucene-cli/docs/index/extract-cfs.md
@@ -0,0 +1,42 @@
+# extract-cfs
+
+### Name
+
+`index-extract-cfs` - Extracts sub-files from a `.cfs` compound file.
+
+### Synopsis
+
+<code>dotnet lucene-cli.dll index extract-cfs <CFS_FILE_NAME> [-dir|--directory-type] [?|-h|--help]</code>
+
+### Description
+
+Extracts `.cfs` compound files (that were created using the `CompoundFileDirectory` from Lucene.Net.Misc) to the current working directory.
+
+In order to make the extracted version of the index work, you have to copy the segments file from the compound index into the directory where the extracted files are stored.
+
+### Arguments
+
+`CFS_FILE_NAME`
+
+The path to a `.cfs` compound file containing words to parse.
+
+### Options
+
+`?|-h|--help`
+
+Prints out a short help for the command.
+
+`-dir|--directory-type <DIRECTORY_TYPE>`
+
+The FSDirectory implementation to use. If ommitted, it defaults to the optimal FSDirectory for your OS platform.
+
+### Examples
+
+Extract the files from the compound file at `X:\lucene-index\_81.cfs` to the current working directory:
+
+<code>dotnet lucene-cli.dll index extract-cfs X:\lucene-index\_81.cfs</code>
+
+
+Extract the files from the compound file at `X:\lucene-index\_64.cfs` to the current working directory using the `SimpleFSDirectory` implementation:
+
+<code>dotnet lucene-cli.dll index extract-cfs X:\lucene-index\_64.cfs --directory-type SimpleFSDirectory</code>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/docs/index/fix.md
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/docs/index/fix.md b/src/tools/lucene-cli/docs/index/fix.md
new file mode 100644
index 0000000..3158aab
--- /dev/null
+++ b/src/tools/lucene-cli/docs/index/fix.md
@@ -0,0 +1,54 @@
+# fix
+
+### Name
+
+`index-fix` - Fixes an index by removing problematic segments.
+
+### Synopsis
+
+<code>dotnet lucene-cli.dll index fix [<INDEX_DIRECTORY>] [-v|--verbose] [-c|--cross-check-term-vectors] [-dir|--directory-type] [--dry-run] [?|-h|--help]</code>
+
+### Description
+
+Basic tool to write a new segments file that removes reference to problematic segments. As this tool checks every byte in the index, on a large index it can take quite a long time to run.
+
+> **WARNING:** This command should only be used on an emergency basis as it will cause documents (perhaps many) to be permanently removed from the index. Always make a backup copy of your index before running this! Do not run this tool on an index that is actively being written to. You have been warned!
+
+### Arguments
+
+`INDEX_DIRECTORY`
+
+The directory of the index. If omitted, it defaults to the current working directory.
+
+### Options
+
+`?|-h|--help`
+
+Prints out a short help for the command.
+
+`-v|--verbose`
+
+Enables verbose output.
+
+`-c|--cross-check-term-vectors`
+
+Cross check term vectors.
+
+`-dir|--directory-type <DIRECTORY_TYPE>`
+
+The `FSDirectory` implementation to use. If omitted, it defaults to the optimal `FSDirectory` for your OS platform.
+
+`--dry-run`
+
+Doesn't change the index, but reports any actions that would be taken if this option were not supplied.
+
+### Examples
+
+Check what a fix operation would do if run on the index located at `X:\product-index\`, using verbose output:
+
+<code>dotnet lucene-cli.dll index fix X:\product-index --verbose --dry-run</code>
+
+
+Fix the index located at `X:\product-index` and cross check term vectors:
+
+<code>dotnet lucene-cli.dll index fix X:\product-index -c</code>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/docs/index/index.md
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/docs/index/index.md b/src/tools/lucene-cli/docs/index/index.md
new file mode 100644
index 0000000..43f323e
--- /dev/null
+++ b/src/tools/lucene-cli/docs/index/index.md
@@ -0,0 +1,23 @@
+# index
+
+## Description
+
+Utilities to manage specialized analyzers.
+
+> **WARNING:** Many of these operations change an index in ways that cannot be reversed. Always make a backup of your index before running these commands. 
+
+## Commands
+
+- [check](check.md)
+- [copy-segments](copy-segments.md)
+- [delete-segments](delete-segments.md)
+- [extract-cfs](extract-cfs.md)
+- [fix](fix.md)
+- [list-cfs](list-cfs.md)
+- [list-high-freq-terms](list-high-freq-terms.md)
+- [list-segments](list-segments.md)
+- [list-taxonomy-stats](list-taxonomy-stats.md)
+- [list-term-info](list-term-info.md)
+- [merge](merge.md)
+- [split](split.md)
+- [upgrade](upgrade.md)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/docs/index/list-cfs.md
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/docs/index/list-cfs.md b/src/tools/lucene-cli/docs/index/list-cfs.md
new file mode 100644
index 0000000..6629dfa
--- /dev/null
+++ b/src/tools/lucene-cli/docs/index/list-cfs.md
@@ -0,0 +1,36 @@
+# list-cfs
+
+### Name
+
+`index-list-cfs` - Lists sub-files from a `.cfs` compound file.
+
+### Synopsis
+
+<code>dotnet lucene-cli.dll index list-cfs <CFS_FILE_NAME> [-dir|--directory-type] [?|-h|--help]</code>
+
+### Description
+
+Prints the filename and size of each file within a given `.cfs` compound file. The .cfs compound file format is created using the CompoundFileDirectory from Lucene.Net.Misc.
+
+### Arguments
+
+`CFS_FILE_NAME`
+
+The `.cfs` compound file containing words to parse.
+
+### Options
+
+`?|-h|--help`
+
+Prints out a short help for the command.
+
+`-dir|--directory-type <DIRECTORY_TYPE>`
+
+The `FSDirectory` implementation to use. If omitted, defaults to the optimal `FSDirectory` for your OS platform.
+
+### Example
+
+Lists the files within the `X:\categories\_53.cfs` compound file using the `NIOFSDirectory` directory implementation:
+
+<code>dotnet lucene-cli.dll index list-cfs X:\categories\_53.cfs -dir NIOFSDirectory</code>
+

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/docs/index/list-high-freq-terms.md
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/docs/index/list-high-freq-terms.md b/src/tools/lucene-cli/docs/index/list-high-freq-terms.md
new file mode 100644
index 0000000..bbeb364
--- /dev/null
+++ b/src/tools/lucene-cli/docs/index/list-high-freq-terms.md
@@ -0,0 +1,49 @@
+# list-high-freq-terms
+
+### Name
+
+`index-list-high-freq-terms` - Lists the top *N* most frequent terms by document frequency.
+
+### Synopsis
+
+<code>dotnet lucene-cli.dll index list-high-freq-terms [<INDEX_DIRECTORY>] [-t|--total-term-frequency] [-n|--number-of-terms] [-f|--field] [?|-h|--help]</code>
+
+### Description
+
+Extracts the top *N* most frequent terms (by document frequency) from an existing Lucene index and reports their
+document frequency.
+
+### Arguments
+
+`INDEX_DIRECTORY`
+
+The directory of the index. If omitted, it defaults to the current working directory.
+
+### Options
+
+`?|-h|--help`
+
+Prints out a short help for the command.
+
+`-t|--total-term-frequency`
+
+Specifies that both the document frequency and term frequency are reported, ordered by descending total term frequency.
+
+`-n|--number-of-terms <NUMBER>`
+
+The number of terms to consider. If omitted, defaults to 100.
+
+`-f|--field <FIELD>`
+
+The field to consider. If omitted, considers all fields.
+
+### Examples
+
+List the high frequency terms in the index located at `F:\product-index\` on the `description` field, reporting both document frequency and term frequency:
+
+<code>dotnet lucene-cli.dll index list-high-freq-terms F:\product-index --total-term-frequency --field description</code>
+
+
+List the high frequency terms in the index located at `C:\lucene-index\` on the `name` field, tracking 30 terms:
+
+<code>dotnet lucene-cli.dll index list-high-freq-terms C:\lucene-index --f name -n 30</code>

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/docs/index/list-segments.md
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/docs/index/list-segments.md b/src/tools/lucene-cli/docs/index/list-segments.md
new file mode 100644
index 0000000..25f07b9
--- /dev/null
+++ b/src/tools/lucene-cli/docs/index/list-segments.md
@@ -0,0 +1,32 @@
+# list-segments
+
+### Name
+
+`index-list-segments` - Lists segments in an index.
+
+### Synopsis
+
+<code>dotnet lucene-cli.dll index list-segments [<INDEX_DIRECTORY>] [?|-h|--help]</code>
+
+### Description
+
+After running this command to view segments, use [copy-segments](copy-segments.md) to copy segments from one index directory to another or [delete-segments](delete-segments.md) to remove segments from an index.
+
+### Arguments
+
+`INDEX_DIRECTORY`
+
+The directory of the index. If omitted, it defaults to the current working directory.
+
+### Options
+
+`?|-h|--help`
+
+Prints out a short help for the command.
+
+### Example
+
+List the segments in the index located at `X:\lucene-index\`:
+
+<code>dotnet lucene-cli.dll index list-segments X:\lucene-index</code>
+

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/70f15595/src/tools/lucene-cli/docs/index/list-taxonomy-stats.md
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/docs/index/list-taxonomy-stats.md b/src/tools/lucene-cli/docs/index/list-taxonomy-stats.md
new file mode 100644
index 0000000..7c43343
--- /dev/null
+++ b/src/tools/lucene-cli/docs/index/list-taxonomy-stats.md
@@ -0,0 +1,38 @@
+# list-taxonomy-stats
+
+### Name
+
+`index-list-taxonomy-stats` - Displays the taxonomy statistical information for a taxonomy index.
+
+### Synopsis
+
+<code>dotnet lucene-cli.dll index list-taxonomy-stats [<INDEX_DIRECTORY>] [-tree|--show-tree] [?|-h|--help]</code>
+
+### Description
+
+Prints how many ords are under each dimension.
+
+### Arguments
+
+`INDEX_DIRECTORY`
+
+The directory of the index. If omitted, it defaults to the current working directory.
+
+> **NOTE:** This directory must be a facet taxonomy directory for the command to succeed.
+
+### Options
+
+`?|-h|--help`
+
+Prints out a short help for the command.
+
+`-tree|--show-tree`
+
+Recursively lists all descendant nodes.
+
+### Example
+
+List the taxonomy statistics from the index located at `X:\category-taxonomy-index\`, viewing all descendant nodes:
+
+<code>dotnet lucene-cli.dll index list-taxonomy-stats X:\category-taxonomy-index -tree</code>
+