﻿<!DOCTYPE html>
<!--[if IE]><![endif]-->
<html>
  
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>Class MultiCategoryListsFacetsExample
   | Apache Lucene.NET 4.8.0-beta00008 Documentation </title>
    <meta name="viewport" content="width=device-width">
    <meta name="title" content="Class MultiCategoryListsFacetsExample
   | Apache Lucene.NET 4.8.0-beta00008 Documentation ">
    <meta name="generator" content="docfx 2.50.0.0">
    
    <link rel="shortcut icon" href="../../logo/favicon.ico">
    <link rel="stylesheet" href="../../styles/docfx.vendor.css">
    <link rel="stylesheet" href="../../styles/docfx.css">
    <link rel="stylesheet" href="../../styles/main.css">
    <meta property="docfx:navrel" content="../../toc.html">
    <meta property="docfx:tocrel" content="../toc.html">
    
    <meta property="docfx:rel" content="../../">
    
  </head>
  <body data-spy="scroll" data-target="#affix" data-offset="120">
    <div id="wrapper">
      <header>
        
        <nav id="autocollapse" class="navbar ng-scope" role="navigation">
          <div class="container">
            <div class="navbar-header">
              <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
              </button>
              
              <a class="navbar-brand" href="../../index.html">
                <img id="logo" class="svg" src="../../logo/lucene-net-color.png" alt="">
              </a>
            </div>
            <div class="collapse navbar-collapse" id="navbar">
              <form class="navbar-form navbar-right" role="search" id="search">
                <div class="form-group">
                  <input type="text" class="form-control" id="search-query" placeholder="Search" autocomplete="off">
                </div>
              </form>
            </div>
          </div>
        </nav>
        
        <div class="subnav navbar navbar-default">
          <div class="container hide-when-search" id="breadcrumb">
            <ul class="breadcrumb">
              <li></li>
            </ul>
          </div>
        </div>
      </header>
      <div class="container body-content">
        
        <div id="search-results">
          <div class="search-list"></div>
          <div class="sr-items">
            <p><i class="glyphicon glyphicon-refresh index-loading"></i></p>
          </div>
          <ul id="pagination"></ul>
        </div>
      </div>
      <div role="main" class="container body-content hide-when-search">
        
        <div class="sidenav hide-when-search">
          <a class="btn toc-toggle collapse" data-toggle="collapse" href="#sidetoggle" aria-expanded="false" aria-controls="sidetoggle">Show / Hide Table of Contents</a>
          <div class="sidetoggle collapse" id="sidetoggle">
            <div id="sidetoc"></div>
          </div>
        </div>
        <div class="article row grid-right">
          <div class="col-md-10">
            <article class="content wrap" id="_content" data-uid="Lucene.Net.Demo.Facet.MultiCategoryListsFacetsExample">
  
  
  <h1 id="Lucene_Net_Demo_Facet_MultiCategoryListsFacetsExample" data-uid="Lucene.Net.Demo.Facet.MultiCategoryListsFacetsExample" class="text-break">Class MultiCategoryListsFacetsExample
  </h1>
  <div class="markdown level0 summary"><p>Demonstrates indexing categories into different indexed fields.</p>
</div>
  <div class="markdown level0 conceptual"></div>
  <div class="inheritance">
    <h5>Inheritance</h5>
    <div class="level0"><span class="xref">System.Object</span></div>
    <div class="level1"><span class="xref">MultiCategoryListsFacetsExample</span></div>
  </div>
  <div class="inheritedMembers">
    <h5>Inherited Members</h5>
    <div>
      <span class="xref">System.Object.Equals(System.Object)</span>
    </div>
    <div>
      <span class="xref">System.Object.Equals(System.Object, System.Object)</span>
    </div>
    <div>
      <span class="xref">System.Object.GetHashCode()</span>
    </div>
    <div>
      <span class="xref">System.Object.GetType()</span>
    </div>
    <div>
      <span class="xref">System.Object.MemberwiseClone()</span>
    </div>
    <div>
      <span class="xref">System.Object.ReferenceEquals(System.Object, System.Object)</span>
    </div>
    <div>
      <span class="xref">System.Object.ToString()</span>
    </div>
  </div>
  <h6><strong>Namespace</strong>: <a class="xref" href="Lucene.Net.Demo.Facet.html">Lucene.Net.Demo.Facet</a></h6>
  <h6><strong>Assembly</strong>: Lucene.Net.Demo.dll</h6>
  <h5 id="Lucene_Net_Demo_Facet_MultiCategoryListsFacetsExample_syntax">Syntax</h5>
  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public class MultiCategoryListsFacetsExample</code></pre>
  </div>
  <h5 id="Lucene_Net_Demo_Facet_MultiCategoryListsFacetsExample_examples"><strong>Examples</strong></h5>
  <pre><code>using Lucene.Net.Analysis.Core;
using Lucene.Net.Documents;
using Lucene.Net.Facet;
using Lucene.Net.Facet.Taxonomy;
using Lucene.Net.Facet.Taxonomy.Directory;
using Lucene.Net.Index;
using Lucene.Net.Search;
using Lucene.Net.Store;
using Lucene.Net.Util;
using System;
using System.Collections.Generic;

namespace Lucene.Net.Demo.Facet
{
    /// &lt;summary&gt;
    /// Demonstrates indexing categories into different indexed fields.
    /// &lt;/summary&gt;
    public class MultiCategoryListsFacetsExample
    {
        /// &lt;summary&gt;
        /// Using a constant for all functionality related to a specific index
        /// is the best strategy. This allows you to upgrade Lucene.Net first
        /// and plan the upgrade of the index binary format for a later time. 
        /// Once the index is upgraded, you simply need to update the constant 
        /// version and redeploy your application.
        /// &lt;/summary&gt;
        private const LuceneVersion EXAMPLE_VERSION = LuceneVersion.LUCENE_48;

        private readonly Directory indexDir = new RAMDirectory();
        private readonly Directory taxoDir = new RAMDirectory();
        private readonly FacetsConfig config = new FacetsConfig();

        /// &lt;summary&gt;Creates a new instance and populates the catetory list params mapping.&lt;/summary&gt;
        public MultiCategoryListsFacetsExample()
        {
            config.SetIndexFieldName(&quot;Author&quot;, &quot;author&quot;);
            config.SetIndexFieldName(&quot;Publish Date&quot;, &quot;pubdate&quot;);
            config.SetHierarchical(&quot;Publish Date&quot;, true);
        }

        /// &lt;summary&gt;Build the example index.&lt;/summary&gt;
        private void Index()
        {
            using (IndexWriter indexWriter = new IndexWriter(indexDir, new IndexWriterConfig(EXAMPLE_VERSION,
                new WhitespaceAnalyzer(EXAMPLE_VERSION))))
            // Writes facet ords to a separate directory from the main index
            using (DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(taxoDir))
            {
                Document doc = new Document();

                doc.Add(new FacetField(&quot;Author&quot;, &quot;Bob&quot;));
                doc.Add(new FacetField(&quot;Publish Date&quot;, &quot;2010&quot;, &quot;10&quot;, &quot;15&quot;));
                indexWriter.AddDocument(config.Build(taxoWriter, doc));

                doc = new Document();
                doc.Add(new FacetField(&quot;Author&quot;, &quot;Lisa&quot;));
                doc.Add(new FacetField(&quot;Publish Date&quot;, &quot;2010&quot;, &quot;10&quot;, &quot;20&quot;));
                indexWriter.AddDocument(config.Build(taxoWriter, doc));

                doc = new Document();
                doc.Add(new FacetField(&quot;Author&quot;, &quot;Lisa&quot;));
                doc.Add(new FacetField(&quot;Publish Date&quot;, &quot;2012&quot;, &quot;1&quot;, &quot;1&quot;));
                indexWriter.AddDocument(config.Build(taxoWriter, doc));

                doc = new Document();
                doc.Add(new FacetField(&quot;Author&quot;, &quot;Susan&quot;));
                doc.Add(new FacetField(&quot;Publish Date&quot;, &quot;2012&quot;, &quot;1&quot;, &quot;7&quot;));
                indexWriter.AddDocument(config.Build(taxoWriter, doc));

                doc = new Document();
                doc.Add(new FacetField(&quot;Author&quot;, &quot;Frank&quot;));
                doc.Add(new FacetField(&quot;Publish Date&quot;, &quot;1999&quot;, &quot;5&quot;, &quot;5&quot;));
                indexWriter.AddDocument(config.Build(taxoWriter, doc));

            } // Disposes indexWriter and taxoWriter
        }

        /// &lt;summary&gt;User runs a query and counts facets.&lt;/summary&gt;
        private IList&lt;FacetResult&gt; Search()
        {
            IList&lt;FacetResult&gt; results = new List&lt;FacetResult&gt;();

            using (DirectoryReader indexReader = DirectoryReader.Open(indexDir))
            using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir))
            {
                IndexSearcher searcher = new IndexSearcher(indexReader);
                FacetsCollector fc = new FacetsCollector();

                // MatchAllDocsQuery is for &quot;browsing&quot; (counts facets
                // for all non-deleted docs in the index); normally
                // you&#39;d use a &quot;normal&quot; query:
                FacetsCollector.Search(searcher, new MatchAllDocsQuery(), 10, fc);

                // Retrieve results

                // Count both &quot;Publish Date&quot; and &quot;Author&quot; dimensions
                Facets author = new FastTaxonomyFacetCounts(&quot;author&quot;, taxoReader, config, fc);
                results.Add(author.GetTopChildren(10, &quot;Author&quot;));

                Facets pubDate = new FastTaxonomyFacetCounts(&quot;pubdate&quot;, taxoReader, config, fc);
                results.Add(pubDate.GetTopChildren(10, &quot;Publish Date&quot;));

            } // Disposes indexReader and taxoReader

            return results;
        }

        /// &lt;summary&gt;Runs the search example.&lt;/summary&gt;
        public IList&lt;FacetResult&gt; RunSearch()
        {
            Index();
            return Search();
        }

        /// &lt;summary&gt;Runs the search example and prints the results.&lt;/summary&gt;
        public static void Main(string[] args)
        {
            Console.WriteLine(&quot;Facet counting over multiple category lists example:&quot;);
            Console.WriteLine(&quot;-----------------------&quot;);
            IList&lt;FacetResult&gt; results = new MultiCategoryListsFacetsExample().RunSearch();

            Console.WriteLine(&quot;Author: &quot; + results[0]);
            Console.WriteLine(&quot;Publish Date: &quot; + results[1]);
        }
    }
}
</code></pre>
  <h3 id="constructors">Constructors
  </h3>
  <span class="small pull-right mobile-hide">
    <span class="divider">|</span>
    <a href="https://github.com/apache/lucenenet/new/docs/4.8.0-beta00008/websites/apidocs/apiSpec/new?filename=Lucene_Net_Demo_Facet_MultiCategoryListsFacetsExample__ctor.md&amp;value=---%0Auid%3A%20Lucene.Net.Demo.Facet.MultiCategoryListsFacetsExample.%23ctor%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a>
  </span>
  <span class="small pull-right mobile-hide">
    <a href="https://github.com/Shazwazza/lucenenet/blob/docs-may/src/Lucene.Net.Demo/Facet/MultiCategoryListsFacetsExample.cs/#L56">View Source</a>
  </span>
  <a id="Lucene_Net_Demo_Facet_MultiCategoryListsFacetsExample__ctor_" data-uid="Lucene.Net.Demo.Facet.MultiCategoryListsFacetsExample.#ctor*"></a>
  <h4 id="Lucene_Net_Demo_Facet_MultiCategoryListsFacetsExample__ctor" data-uid="Lucene.Net.Demo.Facet.MultiCategoryListsFacetsExample.#ctor">MultiCategoryListsFacetsExample()</h4>
  <div class="markdown level1 summary"><p>Creates a new instance and populates the catetory list params mapping.</p>
</div>
  <div class="markdown level1 conceptual"></div>
  <h5 class="decalaration">Declaration</h5>
  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public MultiCategoryListsFacetsExample()</code></pre>
  </div>
  <h3 id="methods">Methods
  </h3>
  <span class="small pull-right mobile-hide">
    <span class="divider">|</span>
    <a href="https://github.com/apache/lucenenet/new/docs/4.8.0-beta00008/websites/apidocs/apiSpec/new?filename=Lucene_Net_Demo_Facet_MultiCategoryListsFacetsExample_Main_System_String___.md&amp;value=---%0Auid%3A%20Lucene.Net.Demo.Facet.MultiCategoryListsFacetsExample.Main(System.String%5B%5D)%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a>
  </span>
  <span class="small pull-right mobile-hide">
    <a href="https://github.com/Shazwazza/lucenenet/blob/docs-may/src/Lucene.Net.Demo/Facet/MultiCategoryListsFacetsExample.cs/#L138">View Source</a>
  </span>
  <a id="Lucene_Net_Demo_Facet_MultiCategoryListsFacetsExample_Main_" data-uid="Lucene.Net.Demo.Facet.MultiCategoryListsFacetsExample.Main*"></a>
  <h4 id="Lucene_Net_Demo_Facet_MultiCategoryListsFacetsExample_Main_System_String___" data-uid="Lucene.Net.Demo.Facet.MultiCategoryListsFacetsExample.Main(System.String[])">Main(String[])</h4>
  <div class="markdown level1 summary"><p>Runs the search example and prints the results.</p>
</div>
  <div class="markdown level1 conceptual"></div>
  <h5 class="decalaration">Declaration</h5>
  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public static void Main(string[] args)</code></pre>
  </div>
  <h5 class="parameters">Parameters</h5>
  <table class="table table-bordered table-striped table-condensed">
    <thead>
      <tr>
        <th>Type</th>
        <th>Name</th>
        <th>Description</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td><span class="xref">System.String</span>[]</td>
        <td><span class="parametername">args</span></td>
        <td></td>
      </tr>
    </tbody>
  </table>
  <span class="small pull-right mobile-hide">
    <span class="divider">|</span>
    <a href="https://github.com/apache/lucenenet/new/docs/4.8.0-beta00008/websites/apidocs/apiSpec/new?filename=Lucene_Net_Demo_Facet_MultiCategoryListsFacetsExample_RunSearch.md&amp;value=---%0Auid%3A%20Lucene.Net.Demo.Facet.MultiCategoryListsFacetsExample.RunSearch%0Asummary%3A%20'*You%20can%20override%20summary%20for%20the%20API%20here%20using%20*MARKDOWN*%20syntax'%0A---%0A%0A*Please%20type%20below%20more%20information%20about%20this%20API%3A*%0A%0A">Improve this Doc</a>
  </span>
  <span class="small pull-right mobile-hide">
    <a href="https://github.com/Shazwazza/lucenenet/blob/docs-may/src/Lucene.Net.Demo/Facet/MultiCategoryListsFacetsExample.cs/#L131">View Source</a>
  </span>
  <a id="Lucene_Net_Demo_Facet_MultiCategoryListsFacetsExample_RunSearch_" data-uid="Lucene.Net.Demo.Facet.MultiCategoryListsFacetsExample.RunSearch*"></a>
  <h4 id="Lucene_Net_Demo_Facet_MultiCategoryListsFacetsExample_RunSearch" data-uid="Lucene.Net.Demo.Facet.MultiCategoryListsFacetsExample.RunSearch">RunSearch()</h4>
  <div class="markdown level1 summary"><p>Runs the search example.</p>
</div>
  <div class="markdown level1 conceptual"></div>
  <h5 class="decalaration">Declaration</h5>
  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public IList&lt;FacetResult&gt; RunSearch()</code></pre>
  </div>
  <h5 class="returns">Returns</h5>
  <table class="table table-bordered table-striped table-condensed">
    <thead>
      <tr>
        <th>Type</th>
        <th>Description</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td><span class="xref">System.Collections.Generic.IList</span>&lt;<a class="xref" href="../Lucene.Net.Facet/Lucene.Net.Facet.FacetResult.html">FacetResult</a>&gt;</td>
        <td></td>
      </tr>
    </tbody>
  </table>
</article>
          </div>
          
          <div class="hidden-sm col-md-2" role="complementary">
            <div class="sideaffix">
              <div class="contribution">
                <ul class="nav">
                  <li>
                    <a href="https://github.com/apache/lucenenet/blob/docs/4.8.0-beta00008/websites/apidocs/apiSpec/Lucene_Net_Demo_Facet_MultiCategoryListsFacetsExample.md/#L2" class="contribution-link">Improve this Doc</a>
                  </li>
                  <li>
                    <a href="https://github.com/Shazwazza/lucenenet/blob/docs-may/src/Lucene.Net.Demo/Facet/MultiCategoryListsFacetsExample.cs/#L40" class="contribution-link">View Source</a>
                  </li>
                </ul>
              </div>
              <nav class="bs-docs-sidebar hidden-print hidden-xs hidden-sm affix" id="affix">
              <!-- <p><a class="back-to-top" href="#top">Back to top</a><p> -->
              </nav>
            </div>
          </div>
        </div>
      </div>
      
      <footer>
        <div class="grad-bottom"></div>
        <div class="footer">
          <div class="container">
            <span class="pull-right">
              <a href="#top">Back to top</a>
            </span>
            Copyright © 2020 Licensed to the Apache Software Foundation (ASF)
            
          </div>
        </div>
      </footer>
    </div>
    
    <script type="text/javascript" src="../../styles/docfx.vendor.js"></script>
    <script type="text/javascript" src="../../styles/docfx.js"></script>
    <script type="text/javascript" src="../../styles/main.js"></script>
  </body>
</html>
