blob: 0000a89bb3704d9b1a39098aae60c7260b6967d1 [file] [log] [blame]
<!DOCTYPE html>
<!--[if IE]><![endif]-->
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Namespace Lucene.Net.Analysis.Icu
| Apache Lucene.NET 4.8.0-beta00013 Documentation </title>
<meta name="viewport" content="width=device-width">
<meta name="title" content="Namespace Lucene.Net.Analysis.Icu
| Apache Lucene.NET 4.8.0-beta00013 Documentation ">
<meta name="generator" content="docfx 2.56.2.0">
<link rel="shortcut icon" href="https://lucenenet.apache.org/docs/4.8.0-beta00009/logo/favicon.ico">
<link rel="stylesheet" href="https://lucenenet.apache.org/docs/4.8.0-beta00009/styles/docfx.vendor.css">
<link rel="stylesheet" href="https://lucenenet.apache.org/docs/4.8.0-beta00009/styles/docfx.css">
<link rel="stylesheet" href="https://lucenenet.apache.org/docs/4.8.0-beta00009/styles/main.css">
<meta property="docfx:navrel" content="toc.html">
<meta property="docfx:tocrel" content="icu/toc.html">
<meta property="docfx:rel" content="https://lucenenet.apache.org/docs/4.8.0-beta00009/">
</head>
<body data-spy="scroll" data-target="#affix" data-offset="120">
<span id="forkongithub"><a href="https://github.com/apache/lucenenet" target="_blank">Fork me on GitHub</a></span>
<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="/">
<img id="logo" class="svg" src="https://lucenenet.apache.org/docs/4.8.0-beta00009/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">
<ul class="level0 breadcrumb">
<li>
<a href="https://lucenenet.apache.org/docs/4.8.0-beta00009/">API</a>
<span id="breadcrumb">
<ul class="breadcrumb">
<li></li>
</ul>
</span>
</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.Analysis.Icu">
<h1 id="Lucene_Net_Analysis_Icu" data-uid="Lucene.Net.Analysis.Icu" class="text-break">Namespace Lucene.Net.Analysis.Icu
</h1>
<div class="markdown level0 summary"><!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!-- :Post-Release-Update-Version.LUCENE_XY: - several mentions in this file -->
<p>This module exposes functionality from
<a href="http://site.icu-project.org/">ICU</a> to Apache Lucene. ICU4J is a Java
library that enhances Java&#39;s internationalization support by improving
performance, keeping current with the Unicode Standard, and providing richer
APIs. </p>
<p>For an introduction to Lucene&#39;s analysis API, see the &lt;xref:Lucene.Net.Analysis&gt; package documentation.</p>
<p> This module exposes the following functionality: </p>
<ul>
<li><p><a href="#segmentation">Text Segmentation</a>: Tokenizes text based on
properties and rules defined in Unicode.</p>
</li>
<li><p><a href="#collation">Collation</a>: Compare strings according to the
conventions and standards of a particular language, region or country.</p>
</li>
<li><p><a href="#normalization">Normalization</a>: Converts text to a unique,
equivalent form.</p>
</li>
<li><p><a href="#casefolding">Case Folding</a>: Removes case distinctions with
Unicode&#39;s Default Caseless Matching algorithm.</p>
</li>
<li><p><a href="#searchfolding">Search Term Folding</a>: Removes distinctions
(such as accent marks) between similar characters for a loose or fuzzy search.</p>
</li>
<li><p><a href="#transform">Text Transformation</a>: Transforms Unicode text in
a context-sensitive fashion: e.g. mapping Traditional to Simplified Chinese</p>
</li>
</ul>
<hr>
<h1 id="text-segmentation"><a href="">Text Segmentation</a></h1>
<p> Text Segmentation (Tokenization) divides document and query text into index terms (typically words). Unicode provides special properties and rules so that this can be done in a manner that works well with most languages. </p>
<p> Text Segmentation implements the word segmentation specified in <a href="http://unicode.org/reports/tr29/">Unicode Text Segmentation</a>. Additionally the algorithm can be tailored based on writing system, for example text in the Thai script is automatically delegated to a dictionary-based segmentation algorithm. </p>
<h2 id="use-cases">Use Cases</h2>
<ul>
<li>As a more thorough replacement for StandardTokenizer that works well for
most languages. </li>
</ul>
<h2 id="example-usages">Example Usages</h2>
<h3 id="tokenizing-multilanguage-text">Tokenizing multilanguage text</h3>
<pre><code> /**
* This tokenizer will work well in general for most languages.
*/
Tokenizer tokenizer = new ICUTokenizer(reader);
</code></pre><hr>
<h1 id="collation"><a href="">Collation</a></h1>
<p> <code>ICUCollationKeyAnalyzer</code> converts each token into its binary <code>CollationKey</code> using the provided <code>Collator</code>, allowing it to be stored as an index term. </p>
<p> <code>ICUCollationKeyAnalyzer</code> depends on ICU4J to produce the <code>CollationKey</code>s. </p>
<h2 id="use-cases-1">Use Cases</h2>
<ul>
<li><p>Efficient sorting of terms in languages that use non-Unicode character
orderings. (Lucene Sort using a Locale can be very slow.) </p>
</li>
<li><p>Efficient range queries over fields that contain terms in languages that
use non-Unicode character orderings. (Range queries using a Locale can be
very slow.)</p>
</li>
<li><p>Effective Locale-specific normalization (case differences, diacritics, etc.).
(&lt;xref:Lucene.Net.Analysis.Core.LowerCaseFilter&gt; and
&lt;xref:Lucene.Net.Analysis.Miscellaneous.ASCIIFoldingFilter&gt; provide these services
in a generic way that doesn&#39;t take into account locale-specific needs.)</p>
</li>
</ul>
<h2 id="example-usages-1">Example Usages</h2>
<h3 id="farsi-range-queries">Farsi Range Queries</h3>
<pre><code> Collator collator = Collator.getInstance(new ULocale(&quot;ar&quot;));
ICUCollationKeyAnalyzer analyzer = new ICUCollationKeyAnalyzer(Version.LUCENE_48, collator);
RAMDirectory ramDir = new RAMDirectory();
IndexWriter writer = new IndexWriter(ramDir, new IndexWriterConfig(Version.LUCENE_48, analyzer));
Document doc = new Document();
doc.add(new Field(&quot;content&quot;, &quot;\u0633\u0627\u0628&quot;,
Field.Store.YES, Field.Index.ANALYZED));
writer.addDocument(doc);
writer.close();
IndexSearcher is = new IndexSearcher(ramDir, true);
</code></pre><p> QueryParser aqp = new QueryParser(Version.LUCENE_48, &quot;content&quot;, analyzer);
aqp.setAnalyzeRangeTerms(true);</p>
<pre><code> // Unicode order would include U+0633 in [ U+062F - U+0698 ], but Farsi
// orders the U+0698 character before the U+0633 character, so the single
// indexed Term above should NOT be returned by a ConstantScoreRangeQuery
// with a Farsi Collator (or an Arabic one for the case when Farsi is not
// supported).
ScoreDoc[] result
= is.search(aqp.parse(&quot;[ \u062F TO \u0698 ]&quot;), null, 1000).scoreDocs;
assertEquals(&quot;The index Term should not be included.&quot;, 0, result.length);
</code></pre><h3 id="danish-sorting">Danish Sorting</h3>
<pre><code> Analyzer analyzer
= new ICUCollationKeyAnalyzer(Version.LUCENE_48, Collator.getInstance(new ULocale(&quot;da&quot;, &quot;dk&quot;)));
RAMDirectory indexStore = new RAMDirectory();
IndexWriter writer = new IndexWriter(indexStore, new IndexWriterConfig(Version.LUCENE_48, analyzer));
String[] tracer = new String[] { &quot;A&quot;, &quot;B&quot;, &quot;C&quot;, &quot;D&quot;, &quot;E&quot; };
String[] data = new String[] { &quot;HAT&quot;, &quot;HUT&quot;, &quot;H\u00C5T&quot;, &quot;H\u00D8T&quot;, &quot;HOT&quot; };
String[] sortedTracerOrder = new String[] { &quot;A&quot;, &quot;E&quot;, &quot;B&quot;, &quot;D&quot;, &quot;C&quot; };
for (int i = 0 ; i &lt; data.length=&quot;&quot; ;=&quot;&quot; ++i)=&quot;&quot; {=&quot;&quot; document=&quot;&quot; doc=&quot;new&quot; document();=&quot;&quot; doc.add(new=&quot;&quot; field(&quot;tracer&quot;,=&quot;&quot; tracer[i],=&quot;&quot; field.store.yes,=&quot;&quot; field.index.no));=&quot;&quot; doc.add(new=&quot;&quot; field(&quot;contents&quot;,=&quot;&quot; data[i],=&quot;&quot; field.store.no,=&quot;&quot; field.index.analyzed));=&quot;&quot; writer.adddocument(doc);=&quot;&quot; }=&quot;&quot; writer.close();=&quot;&quot; indexsearcher=&quot;&quot; searcher=&quot;new&quot; indexsearcher(indexstore,=&quot;&quot; true);=&quot;&quot; sort=&quot;&quot; sort=&quot;new&quot; sort();=&quot;&quot; sort.setsort(new=&quot;&quot; sortfield(&quot;contents&quot;,=&quot;&quot; sortfield.string));=&quot;&quot; query=&quot;&quot; query=&quot;new&quot; matchalldocsquery();=&quot;&quot; scoredoc[]=&quot;&quot; result=&quot;searcher.search(query,&quot; null,=&quot;&quot; 1000,=&quot;&quot; sort).scoredocs;=&quot;&quot; for=&quot;&quot; (int=&quot;&quot; i=&quot;0&quot; ;=&quot;&quot; i=&quot;&quot;&gt;&lt; result.length=&quot;&quot; ;=&quot;&quot; ++i)=&quot;&quot; {=&quot;&quot; document=&quot;&quot; doc=&quot;searcher.doc(result[i].doc);&quot; assertequals(sortedtracerorder[i],=&quot;&quot; doc.getvalues(&quot;tracer&quot;)[0]);=&quot;&quot; }=&quot;&quot;&gt;
</code></pre><h3 id="turkish-case-normalization">Turkish Case Normalization</h3>
<pre><code> Collator collator = Collator.getInstance(new ULocale(&quot;tr&quot;, &quot;TR&quot;));
collator.setStrength(Collator.PRIMARY);
Analyzer analyzer = new ICUCollationKeyAnalyzer(Version.LUCENE_48, collator);
RAMDirectory ramDir = new RAMDirectory();
IndexWriter writer = new IndexWriter(ramDir, new IndexWriterConfig(Version.LUCENE_48, analyzer));
Document doc = new Document();
doc.add(new Field(&quot;contents&quot;, &quot;DIGY&quot;, Field.Store.NO, Field.Index.ANALYZED));
writer.addDocument(doc);
writer.close();
IndexSearcher is = new IndexSearcher(ramDir, true);
QueryParser parser = new QueryParser(Version.LUCENE_48, &quot;contents&quot;, analyzer);
Query query = parser.parse(&quot;d\u0131gy&quot;); // U+0131: dotless i
ScoreDoc[] result = is.search(query, null, 1000).scoreDocs;
assertEquals(&quot;The index Term should be included.&quot;, 1, result.length);
</code></pre><h2 id="caveats-and-comparisons">Caveats and Comparisons</h2>
<p> <strong>WARNING:</strong> Make sure you use exactly the same <code>Collator</code> at index and query time -- <code>CollationKey</code>s are only comparable when produced by the same <code>Collator</code>. Since {@link java.text.RuleBasedCollator}s are not independently versioned, it is unsafe to search against stored <code>CollationKey</code>s unless the following are exactly the same (best practice is to store this information with the index and check that they remain the same at query time): </p>
<ol>
<li><p>JVM vendor</p>
</li>
<li><p>JVM version, including patch version</p>
</li>
<li><p>The language (and country and variant, if specified) of the Locale
used when constructing the collator via
{@link java.text.Collator#getInstance(java.util.Locale)}.</p>
</li>
<li><p>The collation strength used - see {@link java.text.Collator#setStrength(int)}</p>
<p><code>ICUCollationKeyAnalyzer</code> uses ICU4J&#39;s <code>Collator</code>, which makes its version available, thus allowing collation to be versioned independently from the JVM. <code>ICUCollationKeyAnalyzer</code> is also significantly faster and generates significantly shorter keys than <code>CollationKeyAnalyzer</code>. See <a href="http://site.icu-project.org/charts/collation-icu4j-sun">http://site.icu-project.org/charts/collation-icu4j-sun</a> for key generation timing and key length comparisons between ICU4J and <code>java.text.Collator</code> over several languages. </p>
<p><code>CollationKey</code>s generated by <code>java.text.Collator</code>s are not compatible with those those generated by ICU Collators. Specifically, if you use <code>CollationKeyAnalyzer</code> to generate index terms, do not use <code>ICUCollationKeyAnalyzer</code> on the query side, or vice versa. </p>
</li>
</ol>
<hr>
<h1 id="normalization"><a href="">Normalization</a></h1>
<p> <code>ICUNormalizer2Filter</code> normalizes term text to a <a href="http://unicode.org/reports/tr15/">Unicode Normalization Form</a>, so that <a href="http://en.wikipedia.org/wiki/Unicode_equivalence">equivalent</a> forms are standardized to a unique form. </p>
<h2 id="use-cases-2">Use Cases</h2>
<ul>
<li><p>Removing differences in width for Asian-language text. </p>
</li>
<li><p>Standardizing complex text with non-spacing marks so that characters are
ordered consistently.</p>
</li>
</ul>
<h2 id="example-usages-2">Example Usages</h2>
<h3 id="normalizing-text-to-nfc">Normalizing text to NFC</h3>
<pre><code> /**
* Normalizer2 objects are unmodifiable and immutable.
*/
Normalizer2 normalizer = Normalizer2.getInstance(null, &quot;nfc&quot;, Normalizer2.Mode.COMPOSE);
/**
* This filter will normalize to NFC.
*/
TokenStream tokenstream = new ICUNormalizer2Filter(tokenizer, normalizer);
</code></pre><hr>
<h1 id="case-folding"><a href="">Case Folding</a></h1>
<p> Default caseless matching, or case-folding is more than just conversion to lowercase. For example, it handles cases such as the Greek sigma, so that &quot;Μάϊος&quot; and &quot;ΜΆΪΟΣ&quot; will match correctly. </p>
<p> Case-folding is still only an approximation of the language-specific rules governing case. If the specific language is known, consider using ICUCollationKeyFilter and indexing collation keys instead. This implementation performs the &quot;full&quot; case-folding specified in the Unicode standard, and this may change the length of the term. For example, the German ß is case-folded to the string &#39;ss&#39;. </p>
<p> Case folding is related to normalization, and as such is coupled with it in this integration. To perform case-folding, you use normalization with the form &quot;nfkc_cf&quot; (which is the default). </p>
<h2 id="use-cases-3">Use Cases</h2>
<ul>
<li>As a more thorough replacement for LowerCaseFilter that has good behavior
for most languages.</li>
</ul>
<h2 id="example-usages-3">Example Usages</h2>
<h3 id="lowercasing-text">Lowercasing text</h3>
<pre><code> /**
* This filter will case-fold and normalize to NFKC.
*/
TokenStream tokenstream = new ICUNormalizer2Filter(tokenizer);
</code></pre><hr>
<h1 id="search-term-folding"><a href="">Search Term Folding</a></h1>
<p> Search term folding removes distinctions (such as accent marks) between similar characters. It is useful for a fuzzy or loose search. </p>
<p> Search term folding implements many of the foldings specified in <a href="http://www.unicode.org/reports/tr30/tr30-4.html">Character Foldings</a> as a special normalization form. This folding applies NFKC, Case Folding, and many character foldings recursively. </p>
<h2 id="use-cases-4">Use Cases</h2>
<ul>
<li>As a more thorough replacement for ASCIIFoldingFilter and LowerCaseFilter
that applies the same ideas to many more languages. </li>
</ul>
<h2 id="example-usages-4">Example Usages</h2>
<h3 id="removing-accents">Removing accents</h3>
<pre><code> /**
* This filter will case-fold, remove accents and other distinctions, and
* normalize to NFKC.
*/
TokenStream tokenstream = new ICUFoldingFilter(tokenizer);
</code></pre><hr>
<h1 id="text-transformation"><a href="">Text Transformation</a></h1>
<p> ICU provides text-transformation functionality via its Transliteration API. This allows you to transform text in a variety of ways, taking context into account. </p>
<p> For more information, see the <a href="http://userguide.icu-project.org/transforms/general">User&#39;s Guide</a> and <a href="http://userguide.icu-project.org/transforms/general/rules">Rule Tutorial</a>. </p>
<h2 id="use-cases-5">Use Cases</h2>
<ul>
<li><p>Convert Traditional to Simplified </p>
</li>
<li><p>Transliterate between different writing systems: e.g. Romanization</p>
</li>
</ul>
<h2 id="example-usages-5">Example Usages</h2>
<h3 id="convert-traditional-to-simplified">Convert Traditional to Simplified</h3>
<pre><code> /**
* This filter will map Traditional Chinese to Simplified Chinese
*/
TokenStream tokenstream = new ICUTransformFilter(tokenizer, Transliterator.getInstance(&quot;Traditional-Simplified&quot;));
</code></pre><h3 id="transliterate-serbian-cyrillic-to-serbian-latin">Transliterate Serbian Cyrillic to Serbian Latin</h3>
<pre><code> /**
* This filter will map Serbian Cyrillic to Serbian Latin according to BGN rules
*/
TokenStream tokenstream = new ICUTransformFilter(tokenizer, Transliterator.getInstance(&quot;Serbian-Latin/BGN&quot;));
</code></pre><hr>
<h1 id="backwards-compatibility"><a href="">Backwards Compatibility</a></h1>
<p> This module exists to provide up-to-date Unicode functionality that supports the most recent version of Unicode (currently 6.3). However, some users who wish for stronger backwards compatibility can restrict <a class="xref" href="Lucene.Net.Analysis.Icu.ICUNormalizer2Filter.html">ICUNormalizer2Filter</a> to operate on only a specific Unicode Version by using a {@link com.ibm.icu.text.FilteredNormalizer2}. </p>
<h2 id="example-usages-6">Example Usages</h2>
<h3 id="restricting-normalization-to-unicode-50">Restricting normalization to Unicode 5.0</h3>
<pre><code> /**
* This filter will do NFC normalization, but will ignore any characters that
* did not exist as of Unicode 5.0. Because of the normalization stability policy
* of Unicode, this is an easy way to force normalization to a specific version.
*/
Normalizer2 normalizer = Normalizer2.getInstance(null, &quot;nfc&quot;, Normalizer2.Mode.COMPOSE);
UnicodeSet set = new UnicodeSet(&quot;[:age=5.0:]&quot;);
// see FilteredNormalizer2 docs, the set should be frozen or performance will suffer
set.freeze();
FilteredNormalizer2 unicode50 = new FilteredNormalizer2(normalizer, set);
TokenStream tokenstream = new ICUNormalizer2Filter(tokenizer, unicode50);
</code></pre></div>
<div class="markdown level0 conceptual"></div>
<div class="markdown level0 remarks"></div>
<h3 id="classes">Classes
</h3>
<h4><a class="xref" href="Lucene.Net.Analysis.Icu.ICUFoldingFilter.html">ICUFoldingFilter</a></h4>
<section><p>A <span class="xref">Lucene.Net.Analysis.TokenFilter</span> that applies search term folding to Unicode text,
applying foldings from UTR#30 Character Foldings.</p>
</section>
<h4><a class="xref" href="Lucene.Net.Analysis.Icu.ICUFoldingFilterFactory.html">ICUFoldingFilterFactory</a></h4>
<section><p>Factory for <a class="xref" href="Lucene.Net.Analysis.Icu.ICUFoldingFilter.html">ICUFoldingFilter</a>.</p>
</section>
<h4><a class="xref" href="Lucene.Net.Analysis.Icu.ICUNormalizer2CharFilter.html">ICUNormalizer2CharFilter</a></h4>
<section><p>Normalize token text with ICU&apos;s <span class="xref">ICU4N.Text.Normalizer2</span>.</p>
</section>
<h4><a class="xref" href="Lucene.Net.Analysis.Icu.ICUNormalizer2CharFilterFactory.html">ICUNormalizer2CharFilterFactory</a></h4>
<section><p>Factory for <a class="xref" href="Lucene.Net.Analysis.Icu.ICUNormalizer2CharFilter.html">ICUNormalizer2CharFilter</a>.</p>
</section>
<h4><a class="xref" href="Lucene.Net.Analysis.Icu.ICUNormalizer2Filter.html">ICUNormalizer2Filter</a></h4>
<section><p>Normalize token text with ICU&apos;s <span class="xref">ICU4N.Text.Normalizer2</span>.</p>
</section>
<h4><a class="xref" href="Lucene.Net.Analysis.Icu.ICUNormalizer2FilterFactory.html">ICUNormalizer2FilterFactory</a></h4>
<section><p>Factory for <a class="xref" href="Lucene.Net.Analysis.Icu.ICUNormalizer2Filter.html">ICUNormalizer2Filter</a>.</p>
</section>
<h4><a class="xref" href="Lucene.Net.Analysis.Icu.ICUTransformFilter.html">ICUTransformFilter</a></h4>
<section><p>A <span class="xref">Lucene.Net.Analysis.TokenFilter</span> that transforms text with ICU.</p>
</section>
<h4><a class="xref" href="Lucene.Net.Analysis.Icu.ICUTransformFilterFactory.html">ICUTransformFilterFactory</a></h4>
<section><p>Factory for <a class="xref" href="Lucene.Net.Analysis.Icu.ICUTransformFilter.html">ICUTransformFilter</a>.</p>
</section>
</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-beta00013/src/Lucene.Net.Analysis.ICU/overview.md/#L2" class="contribution-link">Improve this Doc</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 The Apache Software Foundation, Licensed under the <a href='http://www.apache.org/licenses/LICENSE-2.0' target='_blank'>Apache License, Version 2.0</a><br> <small>Apache Lucene.Net, Lucene.Net, Apache, the Apache feather logo, and the Apache Lucene.Net project logo are trademarks of The Apache Software Foundation. <br>All other marks mentioned may be trademarks or registered trademarks of their respective owners.</small>
</div>
</div>
</footer>
</div>
<script type="text/javascript" src="https://lucenenet.apache.org/docs/4.8.0-beta00009/styles/docfx.vendor.js"></script>
<script type="text/javascript" src="https://lucenenet.apache.org/docs/4.8.0-beta00009/styles/docfx.js"></script>
<script type="text/javascript" src="https://lucenenet.apache.org/docs/4.8.0-beta00009/styles/main.js"></script>
</body>
</html>