blob: b02662bd4a4e2d87afd8301338a463b28474f1fc [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.3"/>
<title>Lucene.Net: core/Search/IndexSearcher.cs Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="lucene-net-icon-128x128.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">Lucene.Net
&#160;<span id="projectnumber">3.0.3</span>
</div>
<div id="projectbrief">Lucene.Net is a .NET port of the Java Lucene Indexing Library</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.3 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="Index.html"><span>Main&#160;Page</span></a></li>
<li><a href="namespaces.html"><span>Packages</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>File&#160;Members</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Properties</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_1efe588324fc547683bba4a3f1bac847.html">core</a></li><li class="navelem"><a class="el" href="dir_56f9b3c34a852b92179da152ee78b823.html">Search</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">IndexSearcher.cs</div> </div>
</div><!--header-->
<div class="contents">
<a href="_index_searcher_8cs.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/* </span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one or more</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * contributor license agreements. See the NOTICE file distributed with</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * this work for additional information regarding copyright ownership.</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * The ASF licenses this file to You under the Apache License, Version 2.0</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * (the &quot;License&quot;); you may not use this file except in compliance with</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the License. You may obtain a copy of the License at</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * </span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * </span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * limitations under the License.</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="keyword">using</span> System;</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">using</span> System.Linq;</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">using</span> Lucene.Net.Index;</div>
<div class="line"><a name="l00021"></a><span class="lineno"><a class="code" href="_index_searcher_8cs.html#a2ad6aef8641c7b7a6cf9277f7d54b2cd"> 21</a></span>&#160;<span class="keyword">using</span> <a class="code" href="_more_like_this_8cs.html#a2ad6aef8641c7b7a6cf9277f7d54b2cd">Document</a> = Lucene.Net.Documents.Document;</div>
<div class="line"><a name="l00022"></a><span class="lineno"><a class="code" href="_index_searcher_8cs.html#a64b447ee53d30ce66ebd27b2715e7bca"> 22</a></span>&#160;<span class="keyword">using</span> <a class="code" href="_directory_reader_8cs.html#a64b447ee53d30ce66ebd27b2715e7bca">FieldSelector</a> = Lucene.Net.Documents.FieldSelector;</div>
<div class="line"><a name="l00023"></a><span class="lineno"><a class="code" href="_index_searcher_8cs.html#abf029fdf5416b36731b7e3e3643f6eb0"> 23</a></span>&#160;<span class="keyword">using</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_corrupt_index_exception.html" title="This exception is thrown when Lucene detects an inconsistency in the index. ">CorruptIndexException</a> = Lucene.Net.Index.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_corrupt_index_exception.html#a20de77d88d8c5b91fb579a8c5dac3a47">CorruptIndexException</a>;</div>
<div class="line"><a name="l00024"></a><span class="lineno"><a class="code" href="_index_searcher_8cs.html#a2a6914ea10bbe06764856e29e5674e66"> 24</a></span>&#160;<span class="keyword">using</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a> = Lucene.Net.Index.IndexReader;</div>
<div class="line"><a name="l00025"></a><span class="lineno"><a class="code" href="_index_searcher_8cs.html#a8797eb30ce21b31829d3e3a43a20e3b9"> 25</a></span>&#160;<span class="keyword">using</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html" title="A Term represents a word from text. This is the unit of search. It is composed of two elements...">Term</a> = Lucene.Net.Index.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html#a8d6601bb9e6c004148076104f33d237a" title="Constructs a Term with the given field and text. Note that a null field or null text value results in...">Term</a>;</div>
<div class="line"><a name="l00026"></a><span class="lineno"><a class="code" href="_index_searcher_8cs.html#ac7fdd4fc5daf7ce3e6be563664f8bf64"> 26</a></span>&#160;<span class="keyword">using</span> <a class="code" href="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> = Lucene.Net.Store.Directory;</div>
<div class="line"><a name="l00027"></a><span class="lineno"><a class="code" href="_index_searcher_8cs.html#ab79611a6df21a3f78747a42cd386df5b"> 27</a></span>&#160;<span class="keyword">using</span> <a class="code" href="_index_searcher_8cs.html#ab79611a6df21a3f78747a42cd386df5b">ReaderUtil</a> = Lucene.Net.Util.ReaderUtil;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">namespace </span>Lucene.Net.Search</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; [Serializable]</div>
<div class="line"><a name="l00047"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_index_searcher.html"> 47</a></span>&#160; <span class="keyword">public</span> <span class="keyword">class </span><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_index_searcher.html" title="Implements search over a single IndexReader.">IndexSearcher</a> : <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_searcher.html" title="An abstract base class for search implementations. Implements the main search methods.">Searcher</a></div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; {</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">internal</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a> reader;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">private</span> <span class="keywordtype">bool</span> closeReader;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">private</span> <span class="keywordtype">bool</span> isDisposed;</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="comment">// NOTE: these members might change in incompatible ways</span></div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="comment">// in the next release</span></div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">private</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a>[] subReaders;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">private</span> <span class="keywordtype">int</span>[] docStarts;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
<div class="line"><a name="l00062"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_index_searcher.html#ad66fd33ef2790d5422a1488baa4a7cbe"> 62</a></span>&#160; <span class="keyword">public</span> <a class="code" href="_more_like_this_8cs.html#a507bc55818dbcde9964f629543370b6f">IndexSearcher</a>(<a class="code" href="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> path)</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; : this(<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a>.Open(path, true), true)</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; {</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; }</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; </div>
<div class="line"><a name="l00080"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_index_searcher.html#a4165d340afba32b2089446336aee24e4"> 80</a></span>&#160; <span class="keyword">public</span> <a class="code" href="_more_like_this_8cs.html#a507bc55818dbcde9964f629543370b6f">IndexSearcher</a>(<a class="code" href="_syns2_index_8cs.html#aada057080323f6e867d8f9c189276716">Directory</a> path, <span class="keywordtype">bool</span> readOnly):this(<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a>.Open(path, readOnly), true)</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; {</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div>
<div class="line"><a name="l00092"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_index_searcher.html#a2156db1b7422b0ff7f98ea28472e23d9"> 92</a></span>&#160; <span class="keyword">public</span> <a class="code" href="_more_like_this_8cs.html#a507bc55818dbcde9964f629543370b6f">IndexSearcher</a>(<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a> r):this(r, false)</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; {</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; </div>
<div class="line"><a name="l00104"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_index_searcher.html#afec890d233a9352552fc7bd02e395bfd"> 104</a></span>&#160; <span class="keyword">public</span> <a class="code" href="_more_like_this_8cs.html#a507bc55818dbcde9964f629543370b6f">IndexSearcher</a>(<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a> reader, <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a>[] subReaders, <span class="keywordtype">int</span>[] docStarts)</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; {</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; this.reader = reader;</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; this.subReaders = subReaders;</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; this.docStarts = docStarts;</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; this.closeReader = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; }</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keyword">private</span> <a class="code" href="_more_like_this_8cs.html#a507bc55818dbcde9964f629543370b6f">IndexSearcher</a>(<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a> r, <span class="keywordtype">bool</span> closeReader)</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; {</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; reader = r;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; this.closeReader = closeReader;</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; System.Collections.Generic.IList&lt;<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a>&gt; subReadersList = <span class="keyword">new</span> System.Collections.Generic.List&lt;<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a>&gt;();</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; GatherSubReaders(subReadersList, reader);</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; subReaders = subReadersList.ToArray();</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; docStarts = <span class="keyword">new</span> <span class="keywordtype">int</span>[subReaders.Length];</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordtype">int</span> maxDoc = 0;</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; subReaders.Length; i++)</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; {</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; docStarts[i] = maxDoc;</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; maxDoc += subReaders[i].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#ac7694e685dde51863b8974da924fa439" title="Returns one greater than the largest possible document number. This may be used to, e.g., determine how big to allocate an array which will have an element for every document number in an index. ">MaxDoc</a>;</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; }</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; }</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; </div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keyword">protected</span> <span class="keyword">internal</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> GatherSubReaders(System.Collections.Generic.IList&lt;<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a>&gt; allSubReaders, <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a> r)</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; {</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="_index_searcher_8cs.html#ab79611a6df21a3f78747a42cd386df5b">ReaderUtil</a>.GatherSubReaders(allSubReaders, r);</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keyword">public</span> <span class="keyword">virtual</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a></div>
<div class="line"><a name="l00136"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_index_searcher.html#adf445c7f22d1e5b43539525abf4f8167"> 136</a></span>&#160; {</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> reader; }</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; }</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;</div>
<div class="line"><a name="l00140"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_index_searcher.html#a5cb593c7ae4d9cc57dbac348f257ec43"> 140</a></span>&#160; <span class="keyword">protected</span> <span class="keyword">override</span> <span class="keywordtype">void</span> Dispose(<span class="keywordtype">bool</span> disposing)</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; {</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">if</span> (isDisposed) <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">if</span> (disposing)</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; {</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">if</span> (closeReader)</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; reader.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#a1e6264ef01957145748af40d689eaf4d">Close</a>();</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; isDisposed = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; }</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; </div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="comment">// inherit javadoc</span></div>
<div class="line"><a name="l00154"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_index_searcher.html#ae8fc8c3d082677d990936d2a86fd7a99"> 154</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">int</span> DocFreq(<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html" title="A Term represents a word from text. This is the unit of search. It is composed of two elements...">Term</a> term)</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; {</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">return</span> reader.DocFreq(term);</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; }</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; </div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="comment">// inherit javadoc</span></div>
<div class="line"><a name="l00160"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_index_searcher.html#aed5283dc1e8c56fa09bb2c82337e9d8b"> 160</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <a class="code" href="_more_like_this_8cs.html#a2ad6aef8641c7b7a6cf9277f7d54b2cd">Document</a> Doc(<span class="keywordtype">int</span> i)</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; {</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">return</span> reader.Document(i);</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; }</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; </div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="comment">// inherit javadoc</span></div>
<div class="line"><a name="l00166"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_index_searcher.html#aca502cee0c60f02dad219ef8a09bff15"> 166</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <a class="code" href="_more_like_this_8cs.html#a2ad6aef8641c7b7a6cf9277f7d54b2cd">Document</a> Doc(<span class="keywordtype">int</span> i, <a class="code" href="_directory_reader_8cs.html#a64b447ee53d30ce66ebd27b2715e7bca">FieldSelector</a> fieldSelector)</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; {</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">return</span> reader.Document(i, fieldSelector);</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; }</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; </div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="comment">// inherit javadoc</span></div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">int</span> MaxDoc</div>
<div class="line"><a name="l00173"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_index_searcher.html#add409bcc397282dbb545cd6475d49def"> 173</a></span>&#160; {</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> reader.MaxDoc; }</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; }</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; </div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="comment">// inherit javadoc</span></div>
<div class="line"><a name="l00178"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_index_searcher.html#abf7c93a75b6328ce85bb40ef1146e86d"> 178</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_top_docs.html" title="Represents hits returned by Searcher.Search(Query,Filter,int) and Searcher.Search(Query,int) ">TopDocs</a> Search(<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_weight.html" title="Expert: Calculate query weights and build query scorers. The purpose of Weight is to ensure searching...">Weight</a> weight, <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_filter.html" title="Abstract base class for restricting which documents may be returned during searching.">Filter</a> filter, <span class="keywordtype">int</span> nDocs)</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; {</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; </div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">if</span> (nDocs &lt;= 0)</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; {</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> System.ArgumentException(<span class="stringliteral">&quot;nDocs must be &gt; 0&quot;</span>);</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; }</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; nDocs = Math.Min(nDocs, reader.MaxDoc);</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_top_score_doc_collector.html" title="A Collector implementation that collects the top-scoring hits, returning them as a TopDocs...">TopScoreDocCollector</a> collector = <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_top_score_doc_collector.html" title="A Collector implementation that collects the top-scoring hits, returning them as a TopDocs...">TopScoreDocCollector</a>.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_top_score_doc_collector.html#ab20cd0063f143c8888c10731b46a6cf3" title="Creates a new TopScoreDocCollector given the number of hits to collect and whether documents are scor...">Create</a>(nDocs, !weight.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_weight.html#ad298cceb7caae992cbc9770dc5891cf7" title="Returns true iff this implementation scores docs only out of order. This method is used in conjunctio...">GetScoresDocsOutOfOrder</a>());</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; Search(weight, filter, collector);</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">return</span> collector.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_top_docs_collector_3_01_t_01_4.html#a67468e88f7e0253433b7a5f30b2e303a" title="Returns the top docs that were collected by this collector. ">TopDocs</a>();</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; }</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; </div>
<div class="line"><a name="l00192"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_index_searcher.html#a85593087d18fb176fb8e944f8726f0ff"> 192</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_top_field_docs.html" title="Represents hits returned by Searcher.Search(Query,Filter,int,Sort). ">TopFieldDocs</a> Search(<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_weight.html" title="Expert: Calculate query weights and build query scorers. The purpose of Weight is to ensure searching...">Weight</a> weight, <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_filter.html" title="Abstract base class for restricting which documents may be returned during searching.">Filter</a> filter, <span class="keywordtype">int</span> nDocs, <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_sort.html" title="Encapsulates sort criteria for returned hits.">Sort</a> sort)</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; {</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">return</span> Search(weight, filter, nDocs, sort, <span class="keyword">true</span>);</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; </div>
<div class="line"><a name="l00207"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_index_searcher.html#aa4fd3c1f962c5badde16a98e48e54389"> 207</a></span>&#160; <span class="keyword">public</span> <span class="keyword">virtual</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_top_field_docs.html" title="Represents hits returned by Searcher.Search(Query,Filter,int,Sort). ">TopFieldDocs</a> Search(<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_weight.html" title="Expert: Calculate query weights and build query scorers. The purpose of Weight is to ensure searching...">Weight</a> weight, <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_filter.html" title="Abstract base class for restricting which documents may be returned during searching.">Filter</a> filter, <span class="keywordtype">int</span> nDocs, <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_sort.html" title="Encapsulates sort criteria for returned hits.">Sort</a> sort, <span class="keywordtype">bool</span> fillFields)</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; {</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; nDocs = Math.Min(nDocs, reader.MaxDoc);</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_top_field_collector.html" title="A Collector that sorts by SortField using FieldComparators. See the Create method for instantiating a...">TopFieldCollector</a> collector2 = <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_top_field_collector.html" title="A Collector that sorts by SortField using FieldComparators. See the Create method for instantiating a...">TopFieldCollector</a>.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_top_field_collector.html#acb40dd39119e08534429eb92f0e3ab5f" title="Creates a new TopFieldCollector from the given arguments.">Create</a>(sort, nDocs, fillFields, fieldSortDoTrackScores, fieldSortDoMaxScore, !weight.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_weight.html#ad298cceb7caae992cbc9770dc5891cf7" title="Returns true iff this implementation scores docs only out of order. This method is used in conjunctio...">GetScoresDocsOutOfOrder</a>());</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; Search(weight, filter, collector2);</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">return</span> (<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_top_field_docs.html" title="Represents hits returned by Searcher.Search(Query,Filter,int,Sort). ">TopFieldDocs</a>) collector2.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_top_docs_collector_3_01_t_01_4.html#a67468e88f7e0253433b7a5f30b2e303a" title="Returns the top docs that were collected by this collector. ">TopDocs</a>();</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; }</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; </div>
<div class="line"><a name="l00216"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_index_searcher.html#afec19567d857370aeb009824239eee90"> 216</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">void</span> Search(<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_weight.html" title="Expert: Calculate query weights and build query scorers. The purpose of Weight is to ensure searching...">Weight</a> weight, <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_filter.html" title="Abstract base class for restricting which documents may be returned during searching.">Filter</a> filter, <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_collector.html" title="Expert: Collectors are primarily meant to be used to gather raw results from a search, and implement sorting or custom result filtering, collation, etc. ">Collector</a> collector)</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; {</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; </div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">if</span> (filter == null)</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; {</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; subReaders.Length; i++)</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; {</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="comment">// search each subreader</span></div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; collector.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_collector.html#aa8ff0ddcfa363877a8bb87a31ff38d5d" title="Called before collecting from each IndexReader. All doc ids in Collect(int) will correspond to reader...">SetNextReader</a>(subReaders[i], docStarts[i]);</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_scorer.html" title="Expert: Common scoring functionality for different types of queries.">Scorer</a> scorer = weight.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_weight.html#a87064513b858e1608bf7c66731f89a6b" title="Returns a Scorer which scores documents in/out-of order according to scoreDocsInOrder. NOTE: even if scoreDocsInOrder is false, it is recommended to check whether the returned Scorer indeed scores documents out of order (i.e., call GetScoresDocsOutOfOrder()), as some Scorer implementations will always return documents in-order. NOTE: null can be returned if no documents will be scored by this query.">Scorer</a>(subReaders[i], !collector.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_collector.html#a07ed980f78f4da95c2968646c8b0c279" title="Return true if this collector does not require the matching docIDs to be delivered in int sort order ...">AcceptsDocsOutOfOrder</a>, <span class="keyword">true</span>);</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">if</span> (scorer != null)</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; {</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; scorer.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_scorer.html#a23e72c598a4e46bd528ed19b272fc687" title="Scores and collects all matching documents.">Score</a>(collector);</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; }</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; }</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; {</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; subReaders.Length; i++)</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; {</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="comment">// search each subreader</span></div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; collector.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_collector.html#aa8ff0ddcfa363877a8bb87a31ff38d5d" title="Called before collecting from each IndexReader. All doc ids in Collect(int) will correspond to reader...">SetNextReader</a>(subReaders[i], docStarts[i]);</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; SearchWithFilter(subReaders[i], weight, filter, collector);</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; }</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; }</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; }</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; </div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keyword">private</span> <span class="keywordtype">void</span> SearchWithFilter(<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a> reader, <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_weight.html" title="Expert: Calculate query weights and build query scorers. The purpose of Weight is to ensure searching...">Weight</a> weight, <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_filter.html" title="Abstract base class for restricting which documents may be returned during searching.">Filter</a> filter, <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_collector.html" title="Expert: Collectors are primarily meant to be used to gather raw results from a search, and implement sorting or custom result filtering, collation, etc. ">Collector</a> collector)</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; {</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; </div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; System.Diagnostics.Debug.Assert(filter != null);</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; </div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_scorer.html" title="Expert: Common scoring functionality for different types of queries.">Scorer</a> scorer = weight.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_weight.html#a87064513b858e1608bf7c66731f89a6b" title="Returns a Scorer which scores documents in/out-of order according to scoreDocsInOrder. NOTE: even if scoreDocsInOrder is false, it is recommended to check whether the returned Scorer indeed scores documents out of order (i.e., call GetScoresDocsOutOfOrder()), as some Scorer implementations will always return documents in-order. NOTE: null can be returned if no documents will be scored by this query.">Scorer</a>(reader, <span class="keyword">true</span>, <span class="keyword">false</span>);</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">if</span> (scorer == null)</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; {</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; return ;</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; }</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; </div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordtype">int</span> docID = scorer.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set_iterator.html#a617cbe6c07c261cc2cc86ad3d255152f" title="Returns the following: -1 or NO_MORE_DOCS if NextDoc() or Advance(int) were not called yet...">DocID</a>();</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; System.Diagnostics.Debug.Assert(docID == - 1 || docID == <a class="code" href="_doc_id_bit_set_8cs.html#adbba0575d48e29661f658fa4071fde4f">DocIdSetIterator</a>.NO_MORE_DOCS);</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; </div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="comment">// CHECKME: use ConjunctionScorer here?</span></div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <a class="code" href="_doc_id_bit_set_8cs.html#a4245eee1c0c260a340820cfe67797b43">DocIdSet</a> filterDocIdSet = filter.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_filter.html#a6acd9f9caec9c3a4adba5580593f76c7">GetDocIdSet</a>(reader);</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">if</span> (filterDocIdSet == null)</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; {</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="comment">// this means the filter does not accept any documents.</span></div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; return ;</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; }</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; </div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <a class="code" href="_doc_id_bit_set_8cs.html#adbba0575d48e29661f658fa4071fde4f">DocIdSetIterator</a> filterIter = filterDocIdSet.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set.html#ada9f32eb3d60f5b8702420e19373356c" title="Provides a DocIdSetIterator to access the set. This implementation can return null or EMPTY_DOCIDSET...">Iterator</a>();</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">if</span> (filterIter == null)</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; {</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="comment">// this means the filter does not accept any documents.</span></div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; return ;</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; }</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordtype">int</span> filterDoc = filterIter.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set_iterator.html#a70f16616e044ffd57b07dbc426c34e0d" title="Advances to the next document in the set and returns the doc it is currently on, or NO_MORE_DOCS if t...">NextDoc</a>();</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keywordtype">int</span> scorerDoc = scorer.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set_iterator.html#a4ea4804a0dd948a55077e1dde86b0983" title="Advances to the first beyond the current whose document number is greater than or equal to target...">Advance</a>(filterDoc);</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; </div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; collector.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_collector.html#aa8d9d434cf08dd3422210a7c00ec9e80" title="Called before successive calls to Collect(int). Implementations that need the score of the current do...">SetScorer</a>(scorer);</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">while</span> (<span class="keyword">true</span>)</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; {</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">if</span> (scorerDoc == filterDoc)</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; {</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="comment">// Check if scorer has exhausted, only before collecting.</span></div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">if</span> (scorerDoc == <a class="code" href="_doc_id_bit_set_8cs.html#adbba0575d48e29661f658fa4071fde4f">DocIdSetIterator</a>.NO_MORE_DOCS)</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; {</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; }</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; collector.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_collector.html#a125e477dc1b59bbdb22fa71eeac4fd8b" title="Called once for every document matching a query, with the unbased document number.">Collect</a>(scorerDoc);</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; filterDoc = filterIter.NextDoc();</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; scorerDoc = scorer.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set_iterator.html#a4ea4804a0dd948a55077e1dde86b0983" title="Advances to the first beyond the current whose document number is greater than or equal to target...">Advance</a>(filterDoc);</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; }</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (scorerDoc &gt; filterDoc)</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; {</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; filterDoc = filterIter.Advance(scorerDoc);</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; }</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; {</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; scorerDoc = scorer.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_doc_id_set_iterator.html#a4ea4804a0dd948a55077e1dde86b0983" title="Advances to the first beyond the current whose document number is greater than or equal to target...">Advance</a>(filterDoc);</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; }</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; }</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; }</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; </div>
<div class="line"><a name="l00299"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_index_searcher.html#a9771fbcd3c599c6fc25e7f59cfc0a0a6"> 299</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_query.html" title="The abstract base class for queries. Instantiable subclasses are: TermQuery MultiTermQuery BooleanQ...">Query</a> Rewrite(<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_query.html" title="The abstract base class for queries. Instantiable subclasses are: TermQuery MultiTermQuery BooleanQ...">Query</a> original)</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; {</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_query.html" title="The abstract base class for queries. Instantiable subclasses are: TermQuery MultiTermQuery BooleanQ...">Query</a> query = original;</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_query.html" title="The abstract base class for queries. Instantiable subclasses are: TermQuery MultiTermQuery BooleanQ...">Query</a> rewrittenQuery = query.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_query.html#a0d78f3423d340cf4ddbeb2db9e13d055" title="Expert: called to re-write queries into primitive queries. For example, a PrefixQuery will be rewritt...">Rewrite</a>(reader); rewrittenQuery != query; rewrittenQuery = query.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_query.html#a0d78f3423d340cf4ddbeb2db9e13d055" title="Expert: called to re-write queries into primitive queries. For example, a PrefixQuery will be rewritt...">Rewrite</a>(reader))</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; {</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; query = rewrittenQuery;</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; }</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">return</span> query;</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; }</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; </div>
<div class="line"><a name="l00309"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_index_searcher.html#af4b90c9e877499a589d3866be97eb710"> 309</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_explanation.html" title="Expert: Describes the score computation for document and query. ">Explanation</a> Explain(<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_weight.html" title="Expert: Calculate query weights and build query scorers. The purpose of Weight is to ensure searching...">Weight</a> weight, <span class="keywordtype">int</span> doc)</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; {</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordtype">int</span> n = <a class="code" href="_index_searcher_8cs.html#ab79611a6df21a3f78747a42cd386df5b">ReaderUtil</a>.SubIndex(doc, docStarts);</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keywordtype">int</span> deBasedDoc = doc - docStarts[n];</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; </div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">return</span> weight.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_weight.html#a92fcb99f154bb5edd5ba363d3dab0b14" title="An explanation of the score computation for the named document.">Explain</a>(subReaders[n], deBasedDoc);</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; }</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; </div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keyword">private</span> <span class="keywordtype">bool</span> fieldSortDoTrackScores;</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keyword">private</span> <span class="keywordtype">bool</span> fieldSortDoMaxScore;</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; </div>
<div class="line"><a name="l00332"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_index_searcher.html#a79c4d4bc7e575a1043cd6cc2aef1ed4a"> 332</a></span>&#160; <span class="keyword">public</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> SetDefaultFieldSortScoring(<span class="keywordtype">bool</span> doTrackScores, <span class="keywordtype">bool</span> doMaxScore)</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; {</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; fieldSortDoTrackScores = doTrackScores;</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; fieldSortDoMaxScore = doMaxScore;</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; }</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html" title="IndexReader is an abstract class, providing an interface for accessing an index. Search of an index i...">IndexReader</a> reader_ForNUnit</div>
<div class="line"><a name="l00339"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_index_searcher.html#a3133f69cd1868aaf816d2ed24fbe9620"> 339</a></span>&#160; {</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> reader; }</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; }</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; }</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;}</div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Jan 3 2013 02:12:46 for Lucene.Net by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.3
</small></address>
</body>
</html>