blob: 1e505e11d1954f4c248bfa25741e6c7c1229b50a [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: contrib/Queries/FuzzyLikeThisQuery.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_3a8d697be1e2feab9f01acc78e9570fb.html">contrib</a></li><li class="navelem"><a class="el" href="dir_5b88ab0c8cbeaf4a220fc00c661714a3.html">Queries</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">FuzzyLikeThisQuery.cs</div> </div>
</div><!--header-->
<div class="contents">
<a href="_fuzzy_like_this_query_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.Collections;</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">using</span> System.Collections.Generic;</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="keyword">using</span> System.Linq;</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="keyword">using</span> System.Text;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">using</span> Lucene.Net.Search;</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="keyword">using</span> Lucene.Net.Index;</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="keyword">using</span> Lucene.Net.Analysis;</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="keyword">using</span> Lucene.Net.Analysis.Tokenattributes;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keyword">using</span> Lucene.Net.Support;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">using</span> Lucene.Net.Util;</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;<span class="keyword">namespace </span>Lucene.Net.Search</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;{</div>
<div class="line"><a name="l00048"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_fuzzy_like_this_query.html"> 48</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_fuzzy_like_this_query.html" title="Fuzzifies ALL terms provided as strings and then picks the best n differentiating terms...">FuzzyLikeThisQuery</a> : <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></div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">static</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_similarity.html" title="Expert: Scoring API. Subclasses implement search scoring.">Similarity</a> sim = <span class="keyword">new</span> <a class="code" href="_more_like_this_8cs.html#a7ad608bafa9687ad12fc944e1f4f001f">DefaultSimilarity</a>();</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</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> rewrittenQuery = null;</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; EquatableList&lt;FieldVals&gt; fieldVals = <span class="keyword">new</span> EquatableList&lt;FieldVals&gt;();</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_analyzer.html" title="An Analyzer builds TokenStreams, which analyze text. It thus represents a policy for extracting index...">Analyzer</a> analyzer;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; ScoreTermQueue q;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordtype">int</span> MAX_VARIANTS_PER_TERM = 50;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordtype">bool</span> ignoreTF = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">private</span> <span class="keywordtype">int</span> maxNumTerms;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div>
<div class="line"><a name="l00060"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_fuzzy_like_this_query.html#ab466e827c97fc38335ca2449b2212e4c"> 60</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">int</span> GetHashCode()</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; {</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordtype">int</span> prime = 31;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordtype">int</span> result = 1;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; result = prime * result + ((analyzer == null) ? 0 : analyzer.GetHashCode());</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; result = prime * result</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; + ((fieldVals == null) ? 0 : fieldVals.GetHashCode());</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; result = prime * result + (ignoreTF ? 1231 : 1237);</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; result = prime * result + maxNumTerms;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">return</span> result;</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; }</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div>
<div class="line"><a name="l00072"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_fuzzy_like_this_query.html#af9d50daca4e571bf61a0007997bbb7e9"> 72</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">bool</span> Equals(Object obj)</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; {</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">this</span> == obj)</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">if</span> (obj == null)</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">if</span> (GetType() != obj.GetType())</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_fuzzy_like_this_query.html" title="Fuzzifies ALL terms provided as strings and then picks the best n differentiating terms...">FuzzyLikeThisQuery</a> other = (<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_fuzzy_like_this_query.html" title="Fuzzifies ALL terms provided as strings and then picks the best n differentiating terms...">FuzzyLikeThisQuery</a>)obj;</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">if</span> (analyzer == null)</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; <span class="keywordflow">if</span> (other.analyzer != null)</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; }</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!analyzer.Equals(other.analyzer))</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">if</span> (fieldVals == null)</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; {</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">if</span> (other.fieldVals != null)</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; }</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!fieldVals.Equals(other.fieldVals))</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">if</span> (ignoreTF != other.ignoreTF)</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">if</span> (maxNumTerms != other.maxNumTerms)</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; }</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="comment"> * </span></div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="comment"> * &lt;param name=&quot;maxNumTerms&quot;&gt;The total number of terms clauses that will appear once rewritten as a BooleanQuery&lt;/param&gt;</span></div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="comment"> * &lt;param name=&quot;analyzer&quot;&gt;&lt;/param&gt;</span></div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00108"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_fuzzy_like_this_query.html#aa4460e00f64e969ca2d01b65e24e4481"> 108</a></span>&#160; <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_fuzzy_like_this_query.html" title="Fuzzifies ALL terms provided as strings and then picks the best n differentiating terms...">FuzzyLikeThisQuery</a>(<span class="keywordtype">int</span> maxNumTerms, <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_analyzer.html" title="An Analyzer builds TokenStreams, which analyze text. It thus represents a policy for extracting index...">Analyzer</a> analyzer)</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; {</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; q = <span class="keyword">new</span> ScoreTermQueue(maxNumTerms);</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; this.analyzer = analyzer;</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; this.maxNumTerms = maxNumTerms;</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;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">class </span>FieldVals</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; <span class="keyword">internal</span> String queryString;</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keyword">internal</span> String fieldName;</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keyword">internal</span> <span class="keywordtype">float</span> minSimilarity;</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keyword">internal</span> <span class="keywordtype">int</span> prefixLength;</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keyword">public</span> FieldVals(String name, <span class="keywordtype">float</span> similarity, <span class="keywordtype">int</span> length, String queryString)</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; {</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; fieldName = name;</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; minSimilarity = similarity;</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; prefixLength = length;</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; this.queryString = queryString;</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">public</span> <span class="keyword">override</span> <span class="keywordtype">int</span> GetHashCode()</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; <span class="keywordtype">int</span> prime = 31;</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordtype">int</span> result = 1;</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; result = prime * result</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; + ((fieldName == null) ? 0 : fieldName.GetHashCode());</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; result = prime * result + BitConverter.ToInt32(BitConverter.GetBytes(minSimilarity),0);</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; result = prime * result + prefixLength;</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; result = prime * result</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; + ((queryString == null) ? 0 : queryString.GetHashCode());</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">return</span> result;</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</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="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">bool</span> Equals(Object obj)</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> (<span class="keyword">this</span> == obj)</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">if</span> (obj == null)</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">if</span> (GetType() != obj.GetType())</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; FieldVals other = (FieldVals)obj;</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">if</span> (fieldName == null)</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="keywordflow">if</span> (other.fieldName != null)</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</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">else</span> <span class="keywordflow">if</span> (!fieldName.Equals(other.fieldName))</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">if</span> (BitConverter.ToInt32(BitConverter.GetBytes(minSimilarity), 0) != BitConverter.ToInt32(BitConverter.GetBytes(other.minSimilarity), 0))</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="comment">//if (Float.floatToIntBits(minSimilarity) != Float.floatToIntBits(other.minSimilarity))</span></div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">if</span> (prefixLength != other.prefixLength)</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">if</span> (queryString == null)</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="keywordflow">if</span> (other.queryString != null)</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</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">else</span> <span class="keywordflow">if</span> (!queryString.Equals(other.queryString))</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; }</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</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">/*</span></div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="comment"> * &lt;summary&gt;Adds user input for &quot;fuzzification&quot; &lt;/summary&gt;</span></div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;<span class="comment"> * &lt;param name=&quot;queryString&quot;&gt;The string which will be parsed by the analyzer and for which fuzzy variants will be parsed&lt;/param&gt;</span></div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="comment"> * &lt;param name=&quot;fieldName&quot;&gt;&lt;/param&gt;</span></div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;<span class="comment"> * &lt;param name=&quot;minSimilarity&quot;&gt;The minimum similarity of the term variants (see FuzzyTermEnum)&lt;/param&gt;</span></div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<span class="comment"> * &lt;param name=&quot;prefixLength&quot;&gt;Length of required common prefix on variant terms (see FuzzyTermEnum)&lt;/param&gt;</span></div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00184"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_fuzzy_like_this_query.html#a9c88ebac33a842fb9b87fa0c5abca786"> 184</a></span>&#160; <span class="keyword">public</span> <span class="keywordtype">void</span> AddTerms(String queryString, String fieldName, <span class="keywordtype">float</span> minSimilarity, <span class="keywordtype">int</span> prefixLength)</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; {</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; fieldVals.Add(<span class="keyword">new</span> FieldVals(fieldName, minSimilarity, prefixLength, queryString));</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; }</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keyword">private</span> <span class="keywordtype">void</span> AddTerms(<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, FieldVals f)</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"> 192</span>&#160; <span class="keywordflow">if</span> (f.queryString == null) <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token_stream.html" title="A TokenStream enumerates the sequence of tokens, either from Fields of a Document or from query text...">TokenStream</a> ts = analyzer.TokenStream(f.fieldName, <span class="keyword">new</span> System.IO.StringReader(f.queryString));</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_term_attribute.html" title="The term text of a Token.">ITermAttribute</a> termAtt = ts.AddAttribute&lt;<a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_term_attribute.html" title="The term text of a Token.">ITermAttribute</a>&gt;();</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; <span class="keywordtype">int</span> corpusNumDocs = reader.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#a300ecbc61b021d9ae600e1b00c61a851" title="Returns the number of documents in this index. ">NumDocs</a>();</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <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> internSavingTemplateTerm = <span class="keyword">new</span> <a class="code" href="_more_like_this_8cs.html#a8797eb30ce21b31829d3e3a43a20e3b9">Term</a>(f.fieldName); <span class="comment">//optimization to avoid constructing new Term() objects</span></div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; HashSet&lt;string&gt; processedTerms = <span class="keyword">new</span> HashSet&lt;string&gt;();</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">while</span> (ts.<a class="code" href="class_lucene_1_1_net_1_1_analysis_1_1_token_stream.html#a358a544108511440a57b134e722f6027" title="Consumers (i.e., IndexWriter) use this method to advance the stream to the next token. Implementing classes must implement this method and update the appropriate Util.Attributes with the attributes of the next token.">IncrementToken</a>())</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; {</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; String term = termAtt.<a class="code" href="interface_lucene_1_1_net_1_1_analysis_1_1_tokenattributes_1_1_i_term_attribute.html#acdcd805612ee71187baaf3ab48d73536" title="Returns the Token&#39;s term text.">Term</a>;</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">if</span> (!processedTerms.Contains(term))</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; {</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; processedTerms.Add(term);</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; ScoreTermQueue variantsQ = <span class="keyword">new</span> ScoreTermQueue(MAX_VARIANTS_PER_TERM); <span class="comment">//maxNum variants considered for any one term</span></div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordtype">float</span> minScore = 0;</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <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> startTerm = internSavingTemplateTerm.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html#ab579168593e435880d6e946870c8a07d" title="Optimized construction of new Terms by reusing same field as this Term">CreateTerm</a>(term);</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_fuzzy_term_enum.html" title="Subclass of FilteredTermEnum for enumerating all terms that are similiar to the specified filter term...">FuzzyTermEnum</a> fe = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_fuzzy_term_enum.html" title="Subclass of FilteredTermEnum for enumerating all terms that are similiar to the specified filter term...">FuzzyTermEnum</a>(reader, startTerm, f.minSimilarity, f.prefixLength);</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_enum.html" title="Abstract class for enumerating terms. Term enumerations are always ordered by Term.compareTo(). Each term in the enumeration is greater than all that precede it. ">TermEnum</a> origEnum = reader.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_index_reader.html#a9881fb10c3dbc407157b0c7e9cca7d11" title="Returns an enumeration of all the terms in the index. The enumeration is ordered by Term...">Terms</a>(startTerm);</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordtype">int</span> df = 0;</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">if</span> (startTerm.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html#a576e0c713a41a45f056d1b98bf0ae3e7">Equals</a>(origEnum.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_enum.html#acfd949e542b23691974b3f867bcae47f" title="Returns the current Term in the enumeration.">Term</a>))</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; {</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; df = origEnum.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_enum.html#a02510654c0b4d40c3c9aab1067541749" title="Returns the docFreq of the current Term in the enumeration.">DocFreq</a>(); <span class="comment">//store the df so all variants use same idf</span></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; <span class="keywordtype">int</span> numVariants = 0;</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordtype">int</span> totalVariantDocFreqs = 0;</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">do</span></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; <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> possibleMatch = fe.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_filtered_term_enum.html#ade48f20cda1d3cfafb5f16c92eb71dda" title="Returns the current Term in the enumeration. Returns null if no Term matches or all terms have been e...">Term</a>;</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">if</span> (possibleMatch != null)</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; {</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; numVariants++;</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; totalVariantDocFreqs += fe.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_filtered_term_enum.html#afbe5c7994a87bc31447f30332d2bc425" title="Returns the docFreq of the current Term in the enumeration. Returns -1 if no Term matches or all term...">DocFreq</a>();</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordtype">float</span> score = fe.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_fuzzy_term_enum.html#a6ff05fcbb96c2d3bd5568e9069c87741" title="Equality measure on the term ">Difference</a>();</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">if</span> (variantsQ.Size() &lt; MAX_VARIANTS_PER_TERM || score &gt; minScore)</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; {</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; ScoreTerm st = <span class="keyword">new</span> ScoreTerm(possibleMatch, score, startTerm);</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; variantsQ.InsertWithOverflow(st);</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; minScore = variantsQ.Top().Score; <span class="comment">// maintain minScore</span></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; }</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">while</span> (fe.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_filtered_term_enum.html#a4bfec678e04824c242c337bf5e9419bc" title="Increments the enumeration to the next element. True if one exists. ">Next</a>());</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">if</span> (numVariants &gt; 0)</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="keywordtype">int</span> avgDf = totalVariantDocFreqs / numVariants;</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">if</span> (df == 0)<span class="comment">//no direct match we can use as df for all variants </span></div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; {</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; df = avgDf; <span class="comment">//use avg df of all variants</span></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; <span class="comment">// take the top variants (scored by edit distance) and reset the score</span></div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="comment">// to include an IDF factor then add to the global queue for ranking </span></div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="comment">// overall top query terms</span></div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordtype">int</span> size = variantsQ.Size();</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; size; i++)</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; ScoreTerm st = variantsQ.Pop();</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; st.Score = (st.Score * st.Score) * sim.Idf(df, corpusNumDocs);</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; q.InsertWithOverflow(st);</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; }</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; }</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; }</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"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_fuzzy_like_this_query.html#a4cdfed1c0b46303dd8620e0e92eaf619"> 257</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_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="l00258"></a><span class="lineno"> 258</span>&#160; {</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">if</span> (rewrittenQuery != 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="keywordflow">return</span> rewrittenQuery;</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; }</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="comment">//load up the list of possible terms</span></div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordflow">foreach</span> (FieldVals f <span class="keywordflow">in</span> fieldVals)</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; {</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; AddTerms(reader, f);</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">//clear the list of fields</span></div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; fieldVals.Clear();</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; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_boolean_query.html" title="A Query that matches documents matching boolean combinations of other queries, e.g. TermQuerys, PhraseQuerys or other BooleanQuerys. ">BooleanQuery</a> bq = <span class="keyword">new</span> <a class="code" href="_more_like_this_8cs.html#ae2b9948961aeea34f9c4e4955536f433">BooleanQuery</a>();</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;</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; <span class="comment">//create BooleanQueries to hold the variants for each token/field pair and ensure it</span></div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="comment">// has no coord factor</span></div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="comment">//Step 1: sort the termqueries by term/field</span></div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; HashMap&lt;Term, List&lt;ScoreTerm&gt;&gt; variantQueries = <span class="keyword">new</span> HashMap&lt;Term, List&lt;ScoreTerm&gt;&gt;();</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordtype">int</span> size = q.Size();</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; size; i++)</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; {</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; ScoreTerm st = q.Pop();</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; var l = variantQueries[st.fuzziedSourceTerm];</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">if</span> (l == null)</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; {</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; l = <span class="keyword">new</span> List&lt;ScoreTerm&gt;();</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; variantQueries.Add(st.fuzziedSourceTerm, l);</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; l.Add(st);</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; <span class="comment">//Step 2: Organize the sorted termqueries into zero-coord scoring boolean queries</span></div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">foreach</span>(var variants <span class="keywordflow">in</span> variantQueries.Values)</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; {</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">if</span> (variants.Count == 1)</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; {</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="comment">//optimize where only one selected variant</span></div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; ScoreTerm st = variants[0];</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_term_query.html" title="A Query that matches documents containing a term. This may be combined with other terms with a Boolea...">TermQuery</a> tq = <span class="keyword">new</span> FuzzyTermQuery(st.Term, ignoreTF);</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; tq.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_query.html#a2a58b600e864bed65cc21815fffa0218" title="Gets or sets the boost for this query clause to b. Documents matching this clause will (in addition t...">Boost</a> = st.Score; <span class="comment">// set the boost to a mix of IDF and score</span></div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; bq.Add(tq, <a class="code" href="namespace_lucene_1_1_net_1_1_search.html#a99a7442e50a0ff52bf00ddb319eb9d34">Occur</a>.SHOULD);</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; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; {</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_boolean_query.html" title="A Query that matches documents matching boolean combinations of other queries, e.g. TermQuerys, PhraseQuerys or other BooleanQuerys. ">BooleanQuery</a> termVariants = <span class="keyword">new</span> <a class="code" href="_more_like_this_8cs.html#ae2b9948961aeea34f9c4e4955536f433">BooleanQuery</a>(<span class="keyword">true</span>); <span class="comment">//disable coord and IDF for these term variants</span></div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">foreach</span>(ScoreTerm st <span class="keywordflow">in</span> variants)</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; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_term_query.html" title="A Query that matches documents containing a term. This may be combined with other terms with a Boolea...">TermQuery</a> tq = <span class="keyword">new</span> FuzzyTermQuery(st.Term, ignoreTF); <span class="comment">// found a match</span></div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; tq.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_query.html#a2a58b600e864bed65cc21815fffa0218" title="Gets or sets the boost for this query clause to b. Documents matching this clause will (in addition t...">Boost</a> = st.Score; <span class="comment">// set the boost using the ScoreTerm&#39;s score</span></div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; termVariants.Add(tq, <a class="code" href="namespace_lucene_1_1_net_1_1_search.html#a99a7442e50a0ff52bf00ddb319eb9d34">Occur</a>.SHOULD); <span class="comment">// add to query </span></div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; }</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; bq.Add(termVariants, <a class="code" href="namespace_lucene_1_1_net_1_1_search.html#a99a7442e50a0ff52bf00ddb319eb9d34">Occur</a>.SHOULD); <span class="comment">// add to query</span></div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; }</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; }</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="comment">//TODO possible alternative step 3 - organize above booleans into a new layer of field-based</span></div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="comment">// booleans with a minimum-should-match of NumFields-1?</span></div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; bq.Boost = Boost;</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; this.rewrittenQuery = bq;</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">return</span> bq;</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; }</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="comment">//Holds info for a fuzzy term variant - initially score is set to edit distance (for ranking best</span></div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="comment">// term variants) then is reset with IDF for use in ranking against all other</span></div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="comment">// terms/fields</span></div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keyword">private</span> <span class="keyword">class </span>ScoreTerm</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; {</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keyword">public</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> <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> { <span class="keyword">get</span>; <span class="keyword">set</span>; }</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keyword">public</span> <span class="keywordtype">float</span> Score { <span class="keyword">get</span>; <span class="keyword">set</span>; }</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keyword">internal</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> fuzziedSourceTerm;</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keyword">public</span> ScoreTerm(<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, <span class="keywordtype">float</span> score, <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> fuzziedSourceTerm)</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; {</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; this.<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="l00333"></a><span class="lineno"> 333</span>&#160; this.Score = score;</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; this.fuzziedSourceTerm = fuzziedSourceTerm;</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; }</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">private</span> <span class="keyword">class </span>ScoreTermQueue : <a class="code" href="namespace_spell_checker_1_1_net_1_1_search_1_1_spell.html#a050da50134c60f7d9891255871a07fc1">PriorityQueue</a>&lt;ScoreTerm&gt;</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; {</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keyword">public</span> ScoreTermQueue(<span class="keywordtype">int</span> size)</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; Initialize(size);</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; }</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="comment">/* (non-Javadoc)</span></div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;<span class="comment"> * &lt;see cref=&quot;org.apache.lucene.util.PriorityQueue.lessThan(java.lang.Object, java.lang.Object)&quot;/&gt;</span></div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">bool</span> LessThan(ScoreTerm termA, ScoreTerm termB)</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; {</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordflow">if</span> (termA.Score == termB.Score)</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">return</span> termA.Term.CompareTo(termB.Term) &gt; 0;</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordflow">return</span> termA.Score &lt; termB.Score;</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; }</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; }</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="comment">//overrides basic TermQuery to negate effects of IDF (idf is factored into boost of containing BooleanQuery)</span></div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keyword">private</span> <span class="keyword">class </span>FuzzyTermQuery : <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_term_query.html" title="A Query that matches documents containing a term. This may be combined with other terms with a Boolea...">TermQuery</a></div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; {</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordtype">bool</span> ignoreTF;</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; </div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keyword">public</span> FuzzyTermQuery(<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> t, <span class="keywordtype">bool</span> ignoreTF): base(t)</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; {</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; this.ignoreTF = ignoreTF;</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; }</div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</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_similarity.html" title="Expert: Scoring API. Subclasses implement search scoring.">Similarity</a> GetSimilarity(<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> searcher)</div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; {</div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_similarity.html" title="Expert: Scoring API. Subclasses implement search scoring.">Similarity</a> result = base.GetSimilarity(searcher);</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; result = <span class="keyword">new</span> AnonymousSimilarityDelegator(<span class="keyword">this</span>,result);</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keywordflow">return</span> result;</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; }</div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keyword">class </span>AnonymousSimilarityDelegator : <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_similarity_delegator.html" title="Expert: Delegating scoring implementation. Useful in Query.GetSimilarity(Searcher) implementations...">SimilarityDelegator</a></div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; {</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; FuzzyTermQuery parent = null;</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keyword">public</span> AnonymousSimilarityDelegator(FuzzyTermQuery parent,<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_similarity.html" title="Expert: Scoring API. Subclasses implement search scoring.">Similarity</a> result) : base(result)</div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; {</div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; this.parent = parent;</div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; }</div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">float</span> Tf(<span class="keywordtype">float</span> freq)</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; {</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keywordflow">if</span> (parent.ignoreTF)</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; {</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">return</span> 1; <span class="comment">//ignore tf</span></div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; }</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keywordflow">return</span> base.Tf(freq);</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; }</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">float</span> Idf(<span class="keywordtype">int</span> docFreq, <span class="keywordtype">int</span> numDocs)</div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; {</div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="comment">//IDF is already factored into individual term boosts</span></div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordflow">return</span> 1;</div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; }</div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; }</div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; }</div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160;</div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160;</div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="comment">/* (non-Javadoc)</span></div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;<span class="comment"> * &lt;see cref=&quot;org.apache.lucene.search.Query.toString(java.lang.String)&quot;/&gt;</span></div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00404"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_fuzzy_like_this_query.html#a4855c97fe9b2b9c960c2d75212b5bb1b"> 404</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> String ToString(String field)</div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; {</div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keywordflow">return</span> null;</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; }</div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;</div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;</div>
<div class="line"><a name="l00410"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_fuzzy_like_this_query.html#a382e36e45a8595bef65d5ff3b81d2c39"> 410</a></span>&#160; <span class="keyword">public</span> <span class="keywordtype">bool</span> IsIgnoreTF()</div>
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; {</div>
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keywordflow">return</span> ignoreTF;</div>
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; }</div>
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160;</div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;</div>
<div class="line"><a name="l00416"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_fuzzy_like_this_query.html#a3597b5ad4676365657b74d21e7befe4c"> 416</a></span>&#160; <span class="keyword">public</span> <span class="keywordtype">void</span> SetIgnoreTF(<span class="keywordtype">bool</span> ignoreTF)</div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; {</div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; this.ignoreTF = ignoreTF;</div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; }</div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;</div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; }</div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</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:43 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>