blob: 3d063ebfc60dc0953753700ef5e0898dee54ec8b [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>Class FieldComparer&lt;T&gt;
| Apache Lucene.NET 4.8.0 Documentation </title>
<meta name="viewport" content="width=device-width">
<meta name="title" content="Class FieldComparer&lt;T&gt;
| Apache Lucene.NET 4.8.0 Documentation ">
<meta name="generator" content="docfx 2.47.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.Search.FieldComparer`1">
<h1 id="Lucene_Net_Search_FieldComparer_1" data-uid="Lucene.Net.Search.FieldComparer`1" class="text-break">Class FieldComparer&lt;T&gt;
</h1>
<div class="markdown level0 summary"><p>Expert: a <a class="xref" href="Lucene.Net.Search.FieldComparer.html">FieldComparer</a> compares hits so as to determine their
sort order when collecting the top results with
<a class="xref" href="Lucene.Net.Search.TopFieldCollector.html">TopFieldCollector</a>. The concrete public <a class="xref" href="Lucene.Net.Search.FieldComparer.html">FieldComparer</a>
classes here correspond to the <a class="xref" href="Lucene.Net.Search.SortField.html">SortField</a> types.</p>
<p>This API is designed to achieve high performance
sorting, by exposing a tight interaction with
<a class="xref" href="Lucene.Net.Search.FieldValueHitQueue.html">FieldValueHitQueue</a> as it visits hits. Whenever a hit is
competitive, it&apos;s enrolled into a virtual slot, which is
an <span class="xref">System.Int32</span> ranging from 0 to numHits-1. The
<a class="xref" href="Lucene.Net.Search.FieldComparer.html">FieldComparer</a> is made aware of segment transitions
during searching in case any internal state it&apos;s tracking
needs to be recomputed during these transitions.</p>
<p>A comparer must define these functions:</p>
<p><ul><li><a class="xref" href="Lucene.Net.Search.FieldComparer-1.html#Lucene_Net_Search_FieldComparer_1_Compare_System_Int32_System_Int32_">Compare(Int32, Int32)</a> Compare a hit at &apos;slot a&apos;
with hit &apos;slot b&apos;.</li><li><a class="xref" href="Lucene.Net.Search.FieldComparer-1.html#Lucene_Net_Search_FieldComparer_1_SetBottom_System_Int32_">SetBottom(Int32)</a>This method is called by
<a class="xref" href="Lucene.Net.Search.FieldValueHitQueue.html">FieldValueHitQueue</a> to notify the
<a class="xref" href="Lucene.Net.Search.FieldComparer.html">FieldComparer</a> of the current weakest (&quot;bottom&quot;)
slot. Note that this slot may not hold the weakest
value according to your comparer, in cases where
your comparer is not the primary one (ie, is only
used to break ties from the comparers before it).</li><li><a class="xref" href="Lucene.Net.Search.FieldComparer-1.html#Lucene_Net_Search_FieldComparer_1_CompareBottom_System_Int32_">CompareBottom(Int32)</a>Compare a new hit (docID)
against the &quot;weakest&quot; (bottom) entry in the queue.</li><li><a class="xref" href="Lucene.Net.Search.FieldComparer-1.html#Lucene_Net_Search_FieldComparer_1_SetTopValue_System_Object_">SetTopValue(Object)</a>This method is called by
<a class="xref" href="Lucene.Net.Search.TopFieldCollector.html">TopFieldCollector</a> to notify the
<a class="xref" href="Lucene.Net.Search.FieldComparer.html">FieldComparer</a> of the top most value, which is
used by future calls to <a class="xref" href="Lucene.Net.Search.FieldComparer-1.html#Lucene_Net_Search_FieldComparer_1_CompareTop_System_Int32_">CompareTop(Int32)</a>.</li><li><a class="xref" href="Lucene.Net.Search.FieldComparer-1.html#Lucene_Net_Search_FieldComparer_1_CompareTop_System_Int32_">CompareTop(Int32)</a>Compare a new hit (docID)
against the top value previously set by a call to
<a class="xref" href="Lucene.Net.Search.FieldComparer-1.html#Lucene_Net_Search_FieldComparer_1_SetTopValue_System_Object_">SetTopValue(Object)</a>.</li><li><a class="xref" href="Lucene.Net.Search.FieldComparer-1.html#Lucene_Net_Search_FieldComparer_1_Copy_System_Int32_System_Int32_">Copy(Int32, Int32)</a>Installs a new hit into the
priority queue. The <a class="xref" href="Lucene.Net.Search.FieldValueHitQueue.html">FieldValueHitQueue</a>
calls this method when a new hit is competitive.</li><li><a class="xref" href="Lucene.Net.Search.FieldComparer-1.html#Lucene_Net_Search_FieldComparer_1_SetNextReader_Lucene_Net_Index_AtomicReaderContext_">SetNextReader(AtomicReaderContext)</a>Invoked
when the search is switching to the next segment.
You may need to update internal state of the
comparer, for example retrieving new values from
the <a class="xref" href="Lucene.Net.Search.IFieldCache.html">IFieldCache</a>.</li><li><a class="xref" href="Lucene.Net.Search.FieldComparer.html#Lucene_Net_Search_FieldComparer_Item_System_Int32_">Item[Int32]</a>Return the sort value stored in
the specified slot. This is only called at the end
of the search, in order to populate
<a class="xref" href="Lucene.Net.Search.FieldDoc.html#Lucene_Net_Search_FieldDoc_Fields">Fields</a> when returning the top results.</li></ul>
<p>
<div class="lucene-block lucene-experimental">This is a Lucene.NET EXPERIMENTAL API, use at your own risk</div></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"><a class="xref" href="Lucene.Net.Search.FieldComparer.html">FieldComparer</a></div>
<div class="level2"><span class="xref">FieldComparer&lt;T&gt;</span></div>
<div class="level3"><a class="xref" href="Lucene.Net.Search.FieldComparer.DocComparer.html">FieldComparer.DocComparer</a></div>
<div class="level3"><a class="xref" href="Lucene.Net.Search.FieldComparer.NumericComparer-1.html">FieldComparer.NumericComparer&lt;T&gt;</a></div>
<div class="level3"><a class="xref" href="Lucene.Net.Search.FieldComparer.RelevanceComparer.html">FieldComparer.RelevanceComparer</a></div>
<div class="level3"><a class="xref" href="Lucene.Net.Search.FieldComparer.TermOrdValComparer.html">FieldComparer.TermOrdValComparer</a></div>
<div class="level3"><a class="xref" href="Lucene.Net.Search.FieldComparer.TermValComparer.html">FieldComparer.TermValComparer</a></div>
</div>
<div class="inheritedMembers">
<h5>Inherited Members</h5>
<div>
<a class="xref" href="Lucene.Net.Search.FieldComparer.html#Lucene_Net_Search_FieldComparer_SetScorer_Lucene_Net_Search_Scorer_">FieldComparer.SetScorer(Scorer)</a>
</div>
<div>
<a class="xref" href="Lucene.Net.Search.FieldComparer.html#Lucene_Net_Search_FieldComparer_Item_System_Int32_">FieldComparer.Item[Int32]</a>
</div>
<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.TestFramework/Lucene.Net.Search.html">Lucene.Net.Search</a></h6>
<h6><strong>Assembly</strong>: Lucene.Net.dll</h6>
<h5 id="Lucene_Net_Search_FieldComparer_1_syntax">Syntax</h5>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public abstract class FieldComparer&lt;T&gt; : FieldComparer</code></pre>
</div>
<h5 class="typeParameters">Type Parameters</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="parametername">T</span></td>
<td></td>
</tr>
</tbody>
</table>
<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_Search_FieldComparer_1_Compare_System_Int32_System_Int32_.md&amp;value=---%0Auid%3A%20Lucene.Net.Search.FieldComparer%601.Compare(System.Int32%2CSystem.Int32)%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/Search/FieldComparator.cs/#L102">View Source</a>
</span>
<a id="Lucene_Net_Search_FieldComparer_1_Compare_" data-uid="Lucene.Net.Search.FieldComparer`1.Compare*"></a>
<h4 id="Lucene_Net_Search_FieldComparer_1_Compare_System_Int32_System_Int32_" data-uid="Lucene.Net.Search.FieldComparer`1.Compare(System.Int32,System.Int32)">Compare(Int32, Int32)</h4>
<div class="markdown level1 summary"><p>Compare hit at <code data-dev-comment-type="paramref" class="paramref">slot1</code> with hit at <code data-dev-comment-type="paramref" class="paramref">slot2</code>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="decalaration">Declaration</h5>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public abstract override int Compare(int slot1, int slot2)</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.Int32</span></td>
<td><span class="parametername">slot1</span></td>
<td><p>first slot to compare </p>
</td>
</tr>
<tr>
<td><span class="xref">System.Int32</span></td>
<td><span class="parametername">slot2</span></td>
<td><p>second slot to compare </p>
</td>
</tr>
</tbody>
</table>
<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.Int32</span></td>
<td><p>any N &lt; 0 if <code data-dev-comment-type="paramref" class="paramref">slot2</code>&apos;s value is sorted after
<code data-dev-comment-type="paramref" class="paramref">slot1</code>, any N &gt; 0 if the <code data-dev-comment-type="paramref" class="paramref">slot2</code>&apos;s value is sorted before
<code data-dev-comment-type="paramref" class="paramref">slot1</code> and 0 if they are equal </p>
</td>
</tr>
</tbody>
</table>
<h5 class="overrides">Overrides</h5>
<div><a class="xref" href="Lucene.Net.Search.FieldComparer.html#Lucene_Net_Search_FieldComparer_Compare_System_Int32_System_Int32_">FieldComparer.Compare(Int32, Int32)</a></div>
<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_Search_FieldComparer_1_CompareBottom_System_Int32_.md&amp;value=---%0Auid%3A%20Lucene.Net.Search.FieldComparer%601.CompareBottom(System.Int32)%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/Search/FieldComparator.cs/#L137">View Source</a>
</span>
<a id="Lucene_Net_Search_FieldComparer_1_CompareBottom_" data-uid="Lucene.Net.Search.FieldComparer`1.CompareBottom*"></a>
<h4 id="Lucene_Net_Search_FieldComparer_1_CompareBottom_System_Int32_" data-uid="Lucene.Net.Search.FieldComparer`1.CompareBottom(System.Int32)">CompareBottom(Int32)</h4>
<div class="markdown level1 summary"><p>Compare the bottom of the queue with this doc. This will
only invoked after <a class="xref" href="Lucene.Net.Search.FieldComparer-1.html#Lucene_Net_Search_FieldComparer_1_SetBottom_System_Int32_">SetBottom(Int32)</a> has been called. This
should return the same result as
<a class="xref" href="Lucene.Net.Search.FieldComparer-1.html#Lucene_Net_Search_FieldComparer_1_Compare_System_Int32_System_Int32_">Compare(Int32, Int32)</a> as if bottom were slot1 and the new
document were slot 2.</p>
<p>For a search that hits many results, this method
will be the hotspot (invoked by far the most
frequently).</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="decalaration">Declaration</h5>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public abstract override int CompareBottom(int doc)</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.Int32</span></td>
<td><span class="parametername">doc</span></td>
<td><p>Doc that was hit </p>
</td>
</tr>
</tbody>
</table>
<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.Int32</span></td>
<td><p>Any N &lt; 0 if the doc&apos;s value is sorted after
the bottom entry (not competitive), any N &gt; 0 if the
doc&apos;s value is sorted before the bottom entry and 0 if
they are equal. </p>
</td>
</tr>
</tbody>
</table>
<h5 class="overrides">Overrides</h5>
<div><a class="xref" href="Lucene.Net.Search.FieldComparer.html#Lucene_Net_Search_FieldComparer_CompareBottom_System_Int32_">FieldComparer.CompareBottom(Int32)</a></div>
<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_Search_FieldComparer_1_CompareTop_System_Int32_.md&amp;value=---%0Auid%3A%20Lucene.Net.Search.FieldComparer%601.CompareTop(System.Int32)%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/Search/FieldComparator.cs/#L152">View Source</a>
</span>
<a id="Lucene_Net_Search_FieldComparer_1_CompareTop_" data-uid="Lucene.Net.Search.FieldComparer`1.CompareTop*"></a>
<h4 id="Lucene_Net_Search_FieldComparer_1_CompareTop_System_Int32_" data-uid="Lucene.Net.Search.FieldComparer`1.CompareTop(System.Int32)">CompareTop(Int32)</h4>
<div class="markdown level1 summary"><p>Compare the top value with this doc. This will
only invoked after <a class="xref" href="Lucene.Net.Search.FieldComparer-1.html#Lucene_Net_Search_FieldComparer_1_SetTopValue_System_Object_">SetTopValue(Object)</a> has been called. This
should return the same result as
<a class="xref" href="Lucene.Net.Search.FieldComparer-1.html#Lucene_Net_Search_FieldComparer_1_Compare_System_Int32_System_Int32_">Compare(Int32, Int32)</a> as if topValue were slot1 and the new
document were slot 2. This is only called for searches that
use SearchAfter (deep paging).</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="decalaration">Declaration</h5>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public abstract override int CompareTop(int doc)</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.Int32</span></td>
<td><span class="parametername">doc</span></td>
<td><p>Doc that was hit </p>
</td>
</tr>
</tbody>
</table>
<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.Int32</span></td>
<td><p>Any N &lt; 0 if the doc&apos;s value is sorted after
the bottom entry (not competitive), any N &gt; 0 if the
doc&apos;s value is sorted before the bottom entry and 0 if
they are equal. </p>
</td>
</tr>
</tbody>
</table>
<h5 class="overrides">Overrides</h5>
<div><a class="xref" href="Lucene.Net.Search.FieldComparer.html#Lucene_Net_Search_FieldComparer_CompareTop_System_Int32_">FieldComparer.CompareTop(Int32)</a></div>
<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_Search_FieldComparer_1_CompareValues__0__0_.md&amp;value=---%0Auid%3A%20Lucene.Net.Search.FieldComparer%601.CompareValues(%600%2C%600)%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/Search/FieldComparator.cs/#L183">View Source</a>
</span>
<a id="Lucene_Net_Search_FieldComparer_1_CompareValues_" data-uid="Lucene.Net.Search.FieldComparer`1.CompareValues*"></a>
<h4 id="Lucene_Net_Search_FieldComparer_1_CompareValues__0__0_" data-uid="Lucene.Net.Search.FieldComparer`1.CompareValues(`0,`0)">CompareValues(T, T)</h4>
<div class="markdown level1 summary"><p>Returns -1 if first is less than second. Default
impl to assume the type implements <span class="xref">System.IComparable&lt;T&gt;</span> and
invoke <span class="xref">System.IComparable&lt;T&gt;.CompareTo(T)</span>; be sure to override this method if
your FieldComparer&apos;s type isn&apos;t a <span class="xref">System.IComparable&lt;T&gt;</span> or
if your values may sometimes be <code>null</code></p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="decalaration">Declaration</h5>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public virtual int CompareValues(T first, T second)</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">T</span></td>
<td><span class="parametername">first</span></td>
<td></td>
</tr>
<tr>
<td><span class="xref">T</span></td>
<td><span class="parametername">second</span></td>
<td></td>
</tr>
</tbody>
</table>
<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.Int32</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_Search_FieldComparer_1_CompareValues_System_Object_System_Object_.md&amp;value=---%0Auid%3A%20Lucene.Net.Search.FieldComparer%601.CompareValues(System.Object%2CSystem.Object)%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/Search/FieldComparator.cs/#L208">View Source</a>
</span>
<a id="Lucene_Net_Search_FieldComparer_1_CompareValues_" data-uid="Lucene.Net.Search.FieldComparer`1.CompareValues*"></a>
<h4 id="Lucene_Net_Search_FieldComparer_1_CompareValues_System_Object_System_Object_" data-uid="Lucene.Net.Search.FieldComparer`1.CompareValues(System.Object,System.Object)">CompareValues(Object, Object)</h4>
<div class="markdown level1 summary"><p>Returns -1 if first is less than second. Default
impl to assume the type implements <span class="xref">System.IComparable&lt;T&gt;</span> and
invoke <span class="xref">System.IComparable&lt;T&gt;.CompareTo(T)</span>; be sure to override this method if
your FieldComparer&apos;s type isn&apos;t a <span class="xref">System.IComparable&lt;T&gt;</span> or
if your values may sometimes be <code>null</code></p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="decalaration">Declaration</h5>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override int CompareValues(object first, object second)</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.Object</span></td>
<td><span class="parametername">first</span></td>
<td></td>
</tr>
<tr>
<td><span class="xref">System.Object</span></td>
<td><span class="parametername">second</span></td>
<td></td>
</tr>
</tbody>
</table>
<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.Int32</span></td>
<td></td>
</tr>
</tbody>
</table>
<h5 class="overrides">Overrides</h5>
<div><a class="xref" href="Lucene.Net.Search.FieldComparer.html#Lucene_Net_Search_FieldComparer_CompareValues_System_Object_System_Object_">FieldComparer.CompareValues(Object, Object)</a></div>
<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_Search_FieldComparer_1_Copy_System_Int32_System_Int32_.md&amp;value=---%0Auid%3A%20Lucene.Net.Search.FieldComparer%601.Copy(System.Int32%2CSystem.Int32)%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/Search/FieldComparator.cs/#L162">View Source</a>
</span>
<a id="Lucene_Net_Search_FieldComparer_1_Copy_" data-uid="Lucene.Net.Search.FieldComparer`1.Copy*"></a>
<h4 id="Lucene_Net_Search_FieldComparer_1_Copy_System_Int32_System_Int32_" data-uid="Lucene.Net.Search.FieldComparer`1.Copy(System.Int32,System.Int32)">Copy(Int32, Int32)</h4>
<div class="markdown level1 summary"><p>This method is called when a new hit is competitive.
You should copy any state associated with this document
that will be required for future comparisons, into the
specified slot.</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="decalaration">Declaration</h5>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public abstract override void Copy(int slot, int doc)</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.Int32</span></td>
<td><span class="parametername">slot</span></td>
<td><p>Which slot to copy the hit to </p>
</td>
</tr>
<tr>
<td><span class="xref">System.Int32</span></td>
<td><span class="parametername">doc</span></td>
<td><p>DocID relative to current reader </p>
</td>
</tr>
</tbody>
</table>
<h5 class="overrides">Overrides</h5>
<div><a class="xref" href="Lucene.Net.Search.FieldComparer.html#Lucene_Net_Search_FieldComparer_Copy_System_Int32_System_Int32_">FieldComparer.Copy(Int32, Int32)</a></div>
<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_Search_FieldComparer_1_SetBottom_System_Int32_.md&amp;value=---%0Auid%3A%20Lucene.Net.Search.FieldComparer%601.SetBottom(System.Int32)%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/Search/FieldComparator.cs/#L111">View Source</a>
</span>
<a id="Lucene_Net_Search_FieldComparer_1_SetBottom_" data-uid="Lucene.Net.Search.FieldComparer`1.SetBottom*"></a>
<h4 id="Lucene_Net_Search_FieldComparer_1_SetBottom_System_Int32_" data-uid="Lucene.Net.Search.FieldComparer`1.SetBottom(System.Int32)">SetBottom(Int32)</h4>
<div class="markdown level1 summary"><p>Set the bottom slot, ie the &quot;weakest&quot; (sorted last)
entry in the queue. When <a class="xref" href="Lucene.Net.Search.FieldComparer-1.html#Lucene_Net_Search_FieldComparer_1_CompareBottom_System_Int32_">CompareBottom(Int32)</a> is
called, you should compare against this slot. This
will always be called before <a class="xref" href="Lucene.Net.Search.FieldComparer-1.html#Lucene_Net_Search_FieldComparer_1_CompareBottom_System_Int32_">CompareBottom(Int32)</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="decalaration">Declaration</h5>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public abstract override void SetBottom(int slot)</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.Int32</span></td>
<td><span class="parametername">slot</span></td>
<td><p>the currently weakest (sorted last) slot in the queue </p>
</td>
</tr>
</tbody>
</table>
<h5 class="overrides">Overrides</h5>
<div><a class="xref" href="Lucene.Net.Search.FieldComparer.html#Lucene_Net_Search_FieldComparer_SetBottom_System_Int32_">FieldComparer.SetBottom(Int32)</a></div>
<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_Search_FieldComparer_1_SetNextReader_Lucene_Net_Index_AtomicReaderContext_.md&amp;value=---%0Auid%3A%20Lucene.Net.Search.FieldComparer%601.SetNextReader(Lucene.Net.Index.AtomicReaderContext)%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/Search/FieldComparator.cs/#L174">View Source</a>
</span>
<a id="Lucene_Net_Search_FieldComparer_1_SetNextReader_" data-uid="Lucene.Net.Search.FieldComparer`1.SetNextReader*"></a>
<h4 id="Lucene_Net_Search_FieldComparer_1_SetNextReader_Lucene_Net_Index_AtomicReaderContext_" data-uid="Lucene.Net.Search.FieldComparer`1.SetNextReader(Lucene.Net.Index.AtomicReaderContext)">SetNextReader(AtomicReaderContext)</h4>
<div class="markdown level1 summary"><p>Set a new <a class="xref" href="Lucene.Net.Index.AtomicReaderContext.html">AtomicReaderContext</a>. All subsequent docIDs are relative to
the current reader (you must add docBase if you need to
map it to a top-level docID).</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="decalaration">Declaration</h5>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public abstract override FieldComparer SetNextReader(AtomicReaderContext context)</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><a class="xref" href="Lucene.Net.Index.AtomicReaderContext.html">AtomicReaderContext</a></td>
<td><span class="parametername">context</span></td>
<td><p>Current reader context </p>
</td>
</tr>
</tbody>
</table>
<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.Search.FieldComparer.html">FieldComparer</a></td>
<td><p>The comparer to use for this segment; most
comparers can just return &quot;this&quot; to reuse the same
comparer across segments </p>
</td>
</tr>
</tbody>
</table>
<h5 class="overrides">Overrides</h5>
<div><a class="xref" href="Lucene.Net.Search.FieldComparer.html#Lucene_Net_Search_FieldComparer_SetNextReader_Lucene_Net_Index_AtomicReaderContext_">FieldComparer.SetNextReader(AtomicReaderContext)</a></div>
<h5 class="exceptions">Exceptions</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Type</th>
<th>Condition</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="xref">System.IO.IOException</span></td>
<td><p>If there is a low-level IO error </p>
</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_Search_FieldComparer_1_SetTopValue_System_Object_.md&amp;value=---%0Auid%3A%20Lucene.Net.Search.FieldComparer%601.SetTopValue(System.Object)%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/Search/FieldComparator.cs/#L119">View Source</a>
</span>
<a id="Lucene_Net_Search_FieldComparer_1_SetTopValue_" data-uid="Lucene.Net.Search.FieldComparer`1.SetTopValue*"></a>
<h4 id="Lucene_Net_Search_FieldComparer_1_SetTopValue_System_Object_" data-uid="Lucene.Net.Search.FieldComparer`1.SetTopValue(System.Object)">SetTopValue(Object)</h4>
<div class="markdown level1 summary"><p>Record the top value, for future calls to
<a class="xref" href="Lucene.Net.Search.FieldComparer-1.html#Lucene_Net_Search_FieldComparer_1_CompareTop_System_Int32_">CompareTop(Int32)</a>. This is only called for searches that
use SearchAfter (deep paging), and is called before any
calls to <a class="xref" href="Lucene.Net.Search.FieldComparer-1.html#Lucene_Net_Search_FieldComparer_1_SetNextReader_Lucene_Net_Index_AtomicReaderContext_">SetNextReader(AtomicReaderContext)</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="decalaration">Declaration</h5>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public abstract override void SetTopValue(object value)</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.Object</span></td>
<td><span class="parametername">value</span></td>
<td></td>
</tr>
</tbody>
</table>
<h5 class="overrides">Overrides</h5>
<div><a class="xref" href="Lucene.Net.Search.FieldComparer.html#Lucene_Net_Search_FieldComparer_SetTopValue_System_Object_">FieldComparer.SetTopValue(Object)</a></div>
</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/new/docs-4.8.0-beta00007/websites/apidocs/apiSpec/new?filename=Lucene_Net_Search_FieldComparer_1.md&amp;value=---%0Auid%3A%20Lucene.Net.Search.FieldComparer%601%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" class="contribution-link">Improve this Doc</a>
</li>
<li>
<a href="https://github.com/Shazwazza/lucenenet/blob/docs-update-jan2020/src/Lucene.Net/Search/FieldComparator.cs/#L92" 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>