﻿<!DOCTYPE html>
<!--[if IE]><![endif]-->
<html>
  
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>Class SimpleFacetsExample
   | Apache Lucene.NET 4.8.0 Documentation </title>
    <meta name="viewport" content="width=device-width">
    <meta name="title" content="Class SimpleFacetsExample
   | Apache Lucene.NET 4.8.0 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.SimpleFacetsExample">
  
  
  <h1 id="Lucene_Net_Demo_Facet_SimpleFacetsExample" data-uid="Lucene.Net.Demo.Facet.SimpleFacetsExample" class="text-break">Class SimpleFacetsExample
  </h1>
  <div class="markdown level0 summary"><p>Shows simple usage of faceted indexing and search.</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">SimpleFacetsExample</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_SimpleFacetsExample_syntax">Syntax</h5>
  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public class SimpleFacetsExample : object</code></pre>
  </div>
  <h5 id="Lucene_Net_Demo_Facet_SimpleFacetsExample_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;
    /// Shows simple usage of faceted indexing and search.
    /// &lt;/summary&gt;
    public class SimpleFacetsExample
    {
        /// &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;Constructor&lt;/summary&gt;
        public SimpleFacetsExample()
        {
            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; FacetsWithSearch()
        {
            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
                IList&lt;FacetResult&gt; results = new List&lt;FacetResult&gt;();

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

                return results;

            } // Disposes indexReader and taxoReader
        }

        /// &lt;summary&gt;User runs a query and counts facets only without collecting the matching documents.&lt;/summary&gt;
        private IList&lt;FacetResult&gt; FacetsOnly()
        {
            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:
                searcher.Search(new MatchAllDocsQuery(), null /*Filter */, fc);

                // Retrieve results
                IList&lt;FacetResult&gt; results = new List&lt;FacetResult&gt;();

                // Count both &quot;Publish Date&quot; and &quot;Author&quot; dimensions
                Facets facets = new FastTaxonomyFacetCounts(taxoReader, config, fc);

                results.Add(facets.GetTopChildren(10, &quot;Author&quot;));
                results.Add(facets.GetTopChildren(10, &quot;Publish Date&quot;));

                return results;

            } // Disposes indexReader and taxoReader
        }

        /// &lt;summary&gt;
        /// User drills down on &#39;Publish Date/2010&#39;, and we
        /// return facets for &#39;Author&#39;
        /// &lt;/summary&gt;
        private FacetResult DrillDown()
        {
            using (DirectoryReader indexReader = DirectoryReader.Open(indexDir))
            using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir))
            {
                IndexSearcher searcher = new IndexSearcher(indexReader);

                // Passing no baseQuery means we drill down on all
                // documents (&quot;browse only&quot;):
                DrillDownQuery q = new DrillDownQuery(config);

                // Now user drills down on Publish Date/2010:
                q.Add(&quot;Publish Date&quot;, &quot;2010&quot;);
                FacetsCollector fc = new FacetsCollector();
                FacetsCollector.Search(searcher, q, 10, fc);

                // Retrieve results
                Facets facets = new FastTaxonomyFacetCounts(taxoReader, config, fc);
                FacetResult result = facets.GetTopChildren(10, &quot;Author&quot;);

                return result;

            } // Disposes indexReader and taxoReader
        }

        /// &lt;summary&gt;
        /// User drills down on &#39;Publish Date/2010&#39;, and we
        /// return facets for both &#39;Publish Date&#39; and &#39;Author&#39;,
        /// using DrillSideways.
        /// &lt;/summary&gt;
        private IList&lt;FacetResult&gt; DrillSideways()
        {
            using (DirectoryReader indexReader = DirectoryReader.Open(indexDir))
            using (TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir))
            {
                IndexSearcher searcher = new IndexSearcher(indexReader);

                // Passing no baseQuery means we drill down on all
                // documents (&quot;browse only&quot;):
                DrillDownQuery q = new DrillDownQuery(config);

                // Now user drills down on Publish Date/2010:
                q.Add(&quot;Publish Date&quot;, &quot;2010&quot;);

                DrillSideways ds = new DrillSideways(searcher, config, taxoReader);
                DrillSidewaysResult result = ds.Search(q, 10);

                // Retrieve results
                IList&lt;FacetResult&gt; facets = result.Facets.GetAllDims(10);

                return facets;

            } // Disposes indexReader and taxoReader
        }

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

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

        /// &lt;summary&gt;Runs the drill-down example.&lt;/summary&gt;
        public FacetResult RunDrillDown()
        {
            Index();
            return DrillDown();
        }

        /// &lt;summary&gt;Runs the drill-sideways example.&lt;/summary&gt;
        public IList&lt;FacetResult&gt; RunDrillSideways()
        {
            Index();
            return DrillSideways();
        }

        /// &lt;summary&gt;Runs the search and drill-down examples and prints the results.&lt;/summary&gt;
        public static void Main(string[] args)
        {
            Console.WriteLine(&quot;Facet counting example:&quot;);
            Console.WriteLine(&quot;-----------------------&quot;);
            SimpleFacetsExample example1 = new SimpleFacetsExample();
            IList&lt;FacetResult&gt; results1 = example1.RunFacetOnly();
            Console.WriteLine(&quot;Author: &quot; + results1[0]);
            Console.WriteLine(&quot;Publish Date: &quot; + results1[1]);

            Console.WriteLine(&quot;Facet counting example (combined facets and search):&quot;);
            Console.WriteLine(&quot;-----------------------&quot;);
            SimpleFacetsExample example = new SimpleFacetsExample();
            IList&lt;FacetResult&gt; results = example.RunSearch();
            Console.WriteLine(&quot;Author: &quot; + results[0]);
            Console.WriteLine(&quot;Publish Date: &quot; + results[1]);

            Console.WriteLine();
            Console.WriteLine(&quot;Facet drill-down example (Publish Date/2010):&quot;);
            Console.WriteLine(&quot;---------------------------------------------&quot;);
            Console.WriteLine(&quot;Author: &quot; + example.RunDrillDown());

            Console.WriteLine();
            Console.WriteLine(&quot;Facet drill-sideways example (Publish Date/2010):&quot;);
            Console.WriteLine(&quot;---------------------------------------------&quot;);
            foreach (FacetResult result in example.RunDrillSideways())
            {
                Console.WriteLine(result);
            }
        }
    }
}
</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-beta00007/websites/apidocs/apiSpec/new?filename=Lucene_Net_Demo_Facet_SimpleFacetsExample__ctor.md&amp;value=---%0Auid%3A%20Lucene.Net.Demo.Facet.SimpleFacetsExample.%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-update-jan2020/src/Lucene.Net.Demo/Facet/SimpleFacetsExample.cs/#L56">View Source</a>
  </span>
  <a id="Lucene_Net_Demo_Facet_SimpleFacetsExample__ctor_" data-uid="Lucene.Net.Demo.Facet.SimpleFacetsExample.#ctor*"></a>
  <h4 id="Lucene_Net_Demo_Facet_SimpleFacetsExample__ctor" data-uid="Lucene.Net.Demo.Facet.SimpleFacetsExample.#ctor">SimpleFacetsExample()</h4>
  <div class="markdown level1 summary"><p>Constructor</p>
</div>
  <div class="markdown level1 conceptual"></div>
  <h5 class="decalaration">Declaration</h5>
  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public SimpleFacetsExample()</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-beta00007/websites/apidocs/apiSpec/new?filename=Lucene_Net_Demo_Facet_SimpleFacetsExample_Main_System_String___.md&amp;value=---%0Auid%3A%20Lucene.Net.Demo.Facet.SimpleFacetsExample.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-update-jan2020/src/Lucene.Net.Demo/Facet/SimpleFacetsExample.cs/#L244">View Source</a>
  </span>
  <a id="Lucene_Net_Demo_Facet_SimpleFacetsExample_Main_" data-uid="Lucene.Net.Demo.Facet.SimpleFacetsExample.Main*"></a>
  <h4 id="Lucene_Net_Demo_Facet_SimpleFacetsExample_Main_System_String___" data-uid="Lucene.Net.Demo.Facet.SimpleFacetsExample.Main(System.String[])">Main(String[])</h4>
  <div class="markdown level1 summary"><p>Runs the search and drill-down examples 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-beta00007/websites/apidocs/apiSpec/new?filename=Lucene_Net_Demo_Facet_SimpleFacetsExample_RunDrillDown.md&amp;value=---%0Auid%3A%20Lucene.Net.Demo.Facet.SimpleFacetsExample.RunDrillDown%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-update-jan2020/src/Lucene.Net.Demo/Facet/SimpleFacetsExample.cs/#L230">View Source</a>
  </span>
  <a id="Lucene_Net_Demo_Facet_SimpleFacetsExample_RunDrillDown_" data-uid="Lucene.Net.Demo.Facet.SimpleFacetsExample.RunDrillDown*"></a>
  <h4 id="Lucene_Net_Demo_Facet_SimpleFacetsExample_RunDrillDown" data-uid="Lucene.Net.Demo.Facet.SimpleFacetsExample.RunDrillDown">RunDrillDown()</h4>
  <div class="markdown level1 summary"><p>Runs the drill-down example.</p>
</div>
  <div class="markdown level1 conceptual"></div>
  <h5 class="decalaration">Declaration</h5>
  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public FacetResult RunDrillDown()</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><a class="xref" href="../Lucene.Net.Facet/Lucene.Net.Facet.FacetResult.html">FacetResult</a></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-beta00007/websites/apidocs/apiSpec/new?filename=Lucene_Net_Demo_Facet_SimpleFacetsExample_RunDrillSideways.md&amp;value=---%0Auid%3A%20Lucene.Net.Demo.Facet.SimpleFacetsExample.RunDrillSideways%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-update-jan2020/src/Lucene.Net.Demo/Facet/SimpleFacetsExample.cs/#L237">View Source</a>
  </span>
  <a id="Lucene_Net_Demo_Facet_SimpleFacetsExample_RunDrillSideways_" data-uid="Lucene.Net.Demo.Facet.SimpleFacetsExample.RunDrillSideways*"></a>
  <h4 id="Lucene_Net_Demo_Facet_SimpleFacetsExample_RunDrillSideways" data-uid="Lucene.Net.Demo.Facet.SimpleFacetsExample.RunDrillSideways">RunDrillSideways()</h4>
  <div class="markdown level1 summary"><p>Runs the drill-sideways 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; RunDrillSideways()</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">IList</span>&lt;<a class="xref" href="../Lucene.Net.Facet/Lucene.Net.Facet.FacetResult.html">FacetResult</a>&gt;</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-beta00007/websites/apidocs/apiSpec/new?filename=Lucene_Net_Demo_Facet_SimpleFacetsExample_RunFacetOnly.md&amp;value=---%0Auid%3A%20Lucene.Net.Demo.Facet.SimpleFacetsExample.RunFacetOnly%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-update-jan2020/src/Lucene.Net.Demo/Facet/SimpleFacetsExample.cs/#L216">View Source</a>
  </span>
  <a id="Lucene_Net_Demo_Facet_SimpleFacetsExample_RunFacetOnly_" data-uid="Lucene.Net.Demo.Facet.SimpleFacetsExample.RunFacetOnly*"></a>
  <h4 id="Lucene_Net_Demo_Facet_SimpleFacetsExample_RunFacetOnly" data-uid="Lucene.Net.Demo.Facet.SimpleFacetsExample.RunFacetOnly">RunFacetOnly()</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; RunFacetOnly()</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">IList</span>&lt;<a class="xref" href="../Lucene.Net.Facet/Lucene.Net.Facet.FacetResult.html">FacetResult</a>&gt;</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-beta00007/websites/apidocs/apiSpec/new?filename=Lucene_Net_Demo_Facet_SimpleFacetsExample_RunSearch.md&amp;value=---%0Auid%3A%20Lucene.Net.Demo.Facet.SimpleFacetsExample.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-update-jan2020/src/Lucene.Net.Demo/Facet/SimpleFacetsExample.cs/#L223">View Source</a>
  </span>
  <a id="Lucene_Net_Demo_Facet_SimpleFacetsExample_RunSearch_" data-uid="Lucene.Net.Demo.Facet.SimpleFacetsExample.RunSearch*"></a>
  <h4 id="Lucene_Net_Demo_Facet_SimpleFacetsExample_RunSearch" data-uid="Lucene.Net.Demo.Facet.SimpleFacetsExample.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">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-beta00007/websites/apidocs/apiSpec/Lucene_Net_Demo_Facet_SimpleFacetsExample.md/#L2" class="contribution-link">Improve this Doc</a>
                  </li>
                  <li>
                    <a href="https://github.com/Shazwazza/lucenenet/blob/docs-update-jan2020/src/Lucene.Net.Demo/Facet/SimpleFacetsExample.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>
