blob: b32c52bb68bd79f103b84ad874c8c5a369fa58ea [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/Function/CustomScoreQuery.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><li class="navelem"><a class="el" href="dir_cb123a44de33b5e9808df0e59b6a0beb.html">Function</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">CustomScoreQuery.cs</div> </div>
</div><!--header-->
<div class="contents">
<a href="_custom_score_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.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="_custom_score_query_8cs.html#a2a6914ea10bbe06764856e29e5674e66"> 21</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="l00022"></a><span class="lineno"><a class="code" href="_custom_score_query_8cs.html#aeff40eaf34e2b78f761d305f48b95699"> 22</a></span>&#160;<span class="keyword">using</span> <a class="code" href="_boolean_query_8cs.html#aeff40eaf34e2b78f761d305f48b95699">ToStringUtils</a> = Lucene.Net.Util.ToStringUtils;</div>
<div class="line"><a name="l00023"></a><span class="lineno"><a class="code" href="_custom_score_query_8cs.html#aaff36a95cdad7bc1affaff3241d83f90"> 23</a></span>&#160;<span class="keyword">using</span> <a class="code" href="_custom_score_query_8cs.html#aaff36a95cdad7bc1affaff3241d83f90">ComplexExplanation</a> = Lucene.Net.Search.ComplexExplanation;</div>
<div class="line"><a name="l00024"></a><span class="lineno"><a class="code" href="_custom_score_query_8cs.html#aea5b3dcb7c8a52294feb57dcaa878033"> 24</a></span>&#160;<span class="keyword">using</span> <a class="code" href="_custom_score_query_8cs.html#aea5b3dcb7c8a52294feb57dcaa878033">Explanation</a> = Lucene.Net.Search.Explanation;</div>
<div class="line"><a name="l00025"></a><span class="lineno"><a class="code" href="_custom_score_query_8cs.html#accbc7c5687907350ba0e2681b41e1b0d"> 25</a></span>&#160;<span class="keyword">using</span> <a class="code" href="_more_like_this_8cs.html#accbc7c5687907350ba0e2681b41e1b0d">Query</a> = Lucene.Net.Search.Query;</div>
<div class="line"><a name="l00026"></a><span class="lineno"><a class="code" href="_custom_score_query_8cs.html#a83f1a9bf052559c9fc4b5dc2c3d490f1"> 26</a></span>&#160;<span class="keyword">using</span> <a class="code" href="_documents_writer_8cs.html#a83f1a9bf052559c9fc4b5dc2c3d490f1">Scorer</a> = Lucene.Net.Search.Scorer;</div>
<div class="line"><a name="l00027"></a><span class="lineno"><a class="code" href="_custom_score_query_8cs.html#a4be53b8845ef8ff2a91031c18774a62c"> 27</a></span>&#160;<span class="keyword">using</span> <a class="code" href="_document_8cs.html#a4be53b8845ef8ff2a91031c18774a62c">Searcher</a> = Lucene.Net.Search.Searcher;</div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="code" href="_custom_score_query_8cs.html#a5431a3a4edd067eec50ca39b5ea99c31"> 28</a></span>&#160;<span class="keyword">using</span> <a class="code" href="_documents_writer_8cs.html#a5431a3a4edd067eec50ca39b5ea99c31">Similarity</a> = Lucene.Net.Search.Similarity;</div>
<div class="line"><a name="l00029"></a><span class="lineno"><a class="code" href="_custom_score_query_8cs.html#af0d29c976e72f83236dc8d0fa23aaf32"> 29</a></span>&#160;<span class="keyword">using</span> <a class="code" href="_documents_writer_8cs.html#af0d29c976e72f83236dc8d0fa23aaf32">Weight</a> = Lucene.Net.Search.Weight;</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.Function</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;{</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; [Serializable]</div>
<div class="line"><a name="l00049"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html"> 49</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_function_1_1_custom_score_query.html" title="Query that sets document score as a programmatic function of several (sub) scores: the score of its s...">CustomScoreQuery</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>, System.ICloneable</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; {</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">private</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> subQuery;</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">private</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_value_source_query.html" title="Expert: A Query that sets the scores of document to the values obtained from a ValueSource. This query provides a score for each and every undeleted document in the index. The value source can be based on a (cached) value of an indexed field, but it can also be based on an external source, e.g. values read from an external database. Score is set as: Score(doc,query) = query.getBoost()2 * valueSource(doc).">ValueSourceQuery</a>[] valSrcQueries; <span class="comment">// never null (empty array if there are no valSrcQueries).</span></div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">private</span> <span class="keywordtype">bool</span> strict = <span class="keyword">false</span>; <span class="comment">// if true, valueSource part of query does not take part in weights normalization. </span></div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
<div class="line"><a name="l00059"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html#a3ac44c769ab707634418c4f26077546b"> 59</a></span>&#160; <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html" title="Query that sets document score as a programmatic function of several (sub) scores: the score of its s...">CustomScoreQuery</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> subQuery):this(subQuery, new <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_value_source_query.html" title="Expert: A Query that sets the scores of document to the values obtained from a ValueSource. This query provides a score for each and every undeleted document in the index. The value source can be based on a (cached) value of an indexed field, but it can also be based on an external source, e.g. values read from an external database. Score is set as: Score(doc,query) = query.getBoost()2 * valueSource(doc).">ValueSourceQuery</a>[0])</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {</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; </div>
<div class="line"><a name="l00071"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html#a76123561c29abbdfcb530f93e30e66dc"> 71</a></span>&#160; <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html#a76123561c29abbdfcb530f93e30e66dc" title="Create a CustomScoreQuery over input subQuery and a ValueSourceQuery.">CustomScoreQuery</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> subQuery, <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_value_source_query.html" title="Expert: A Query that sets the scores of document to the values obtained from a ValueSource. This query provides a score for each and every undeleted document in the index. The value source can be based on a (cached) value of an indexed field, but it can also be based on an external source, e.g. values read from an external database. Score is set as: Score(doc,query) = query.getBoost()2 * valueSource(doc).">ValueSourceQuery</a> valSrcQuery):this(subQuery, valSrcQuery != null?new <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_value_source_query.html" title="Expert: A Query that sets the scores of document to the values obtained from a ValueSource. This query provides a score for each and every undeleted document in the index. The value source can be based on a (cached) value of an indexed field, but it can also be based on an external source, e.g. values read from an external database. Score is set as: Score(doc,query) = query.getBoost()2 * valueSource(doc).">ValueSourceQuery</a>[]{valSrcQuery}:<span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_value_source_query.html" title="Expert: A Query that sets the scores of document to the values obtained from a ValueSource. This query provides a score for each and every undeleted document in the index. The value source can be based on a (cached) value of an indexed field, but it can also be based on an external source, e.g. values read from an external database. Score is set as: Score(doc,query) = query.getBoost()2 * valueSource(doc).">ValueSourceQuery</a>[0])</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; {</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; </div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keyword">public</span> CustomScoreQuery(<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> subQuery, params ValueSourceQuery[] valSrcQueries)</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; {</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; this.subQuery = subQuery;</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; this.valSrcQueries = valSrcQueries != null?valSrcQueries:<span class="keyword">new</span> ValueSourceQuery[0];</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">if</span> (subQuery == null)</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> System.ArgumentException(<span class="stringliteral">&quot;&lt;subquery&gt; must not be null!&quot;</span>);</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; </div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="comment">/*(non-Javadoc) &lt;see cref=&quot;Lucene.Net.Search.Query.rewrite(Lucene.Net.Index.IndexReader) */</span></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_function_1_1_custom_score_query.html#ac570d1b0a8a2a3c6e33d5be01539df80"> 92</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="l00093"></a><span class="lineno"> 93</span>&#160; {</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html" title="Query that sets document score as a programmatic function of several (sub) scores: the score of its s...">CustomScoreQuery</a> clone = null;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</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> sq = subQuery.<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="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">if</span> (sq != subQuery)</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; {</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; clone = (<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html" title="Query that sets document score as a programmatic function of several (sub) scores: the score of its s...">CustomScoreQuery</a>)Clone();</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; clone.subQuery = sq;</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="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; valSrcQueries.Length; i++)</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; {</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_value_source_query.html" title="Expert: A Query that sets the scores of document to the values obtained from a ValueSource. This query provides a score for each and every undeleted document in the index. The value source can be based on a (cached) value of an indexed field, but it can also be based on an external source, e.g. values read from an external database. Score is set as: Score(doc,query) = query.getBoost()2 * valueSource(doc).">ValueSourceQuery</a> v = (<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_value_source_query.html" title="Expert: A Query that sets the scores of document to the values obtained from a ValueSource. This query provides a score for each and every undeleted document in the index. The value source can be based on a (cached) value of an indexed field, but it can also be based on an external source, e.g. values read from an external database. Score is set as: Score(doc,query) = query.getBoost()2 * valueSource(doc).">ValueSourceQuery</a>)valSrcQueries[i].Rewrite(reader);</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">if</span> (v != valSrcQueries[i])</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; {</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">if</span> (clone == null) clone = (<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html" title="Query that sets document score as a programmatic function of several (sub) scores: the score of its s...">CustomScoreQuery</a>)Clone();</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; clone.valSrcQueries[i] = v;</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;</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">return</span> (clone == null) ? <span class="keyword">this</span> : clone;</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; </div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="comment">/*(non-Javadoc) &lt;see cref=&quot;Lucene.Net.Search.Query.extractTerms(java.util.Set) */</span></div>
<div class="line"><a name="l00117"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html#a7d54de7f8d501f5550cec69bd7f45e95"> 117</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">void</span> ExtractTerms(System.Collections.Generic.ISet&lt;<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>&gt; terms)</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; {</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; subQuery.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_query.html#a9f47bf807320ce75a9096c983ab358d7" title="Expert: adds all terms occuring in this query to the terms set. Only works if this query is in its re...">ExtractTerms</a>(terms);</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; valSrcQueries.Length; i++)</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; {</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; valSrcQueries[i].ExtractTerms(terms);</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; }</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; </div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="comment">/*(non-Javadoc) &lt;see cref=&quot;Lucene.Net.Search.Query.clone() */</span></div>
<div class="line"><a name="l00127"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html#a6762ed2d680939f8bb6e24a384c05f25"> 127</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> System.Object Clone()</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; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html" title="Query that sets document score as a programmatic function of several (sub) scores: the score of its s...">CustomScoreQuery</a> clone = (<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html" title="Query that sets document score as a programmatic function of several (sub) scores: the score of its s...">CustomScoreQuery</a>) base.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html#a6762ed2d680939f8bb6e24a384c05f25" title="Returns a clone of this query. ">Clone</a>();</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; clone.subQuery = (<a class="code" href="_more_like_this_8cs.html#accbc7c5687907350ba0e2681b41e1b0d">Query</a>) subQuery.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_query.html#aa06acccee0ba99acb9f6fea24dff856d" title="Returns a clone of this query. ">Clone</a>();</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; clone.valSrcQueries = <span class="keyword">new</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_value_source_query.html" title="Expert: A Query that sets the scores of document to the values obtained from a ValueSource. This query provides a score for each and every undeleted document in the index. The value source can be based on a (cached) value of an indexed field, but it can also be based on an external source, e.g. values read from an external database. Score is set as: Score(doc,query) = query.getBoost()2 * valueSource(doc).">ValueSourceQuery</a>[valSrcQueries.Length];</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; valSrcQueries.Length; i++)</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; {</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; clone.valSrcQueries[i] = (<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_value_source_query.html" title="Expert: A Query that sets the scores of document to the values obtained from a ValueSource. This query provides a score for each and every undeleted document in the index. The value source can be based on a (cached) value of an indexed field, but it can also be based on an external source, e.g. values read from an external database. Score is set as: Score(doc,query) = query.getBoost()2 * valueSource(doc).">ValueSourceQuery</a>) valSrcQueries[i].Clone();</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; }</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">return</span> clone;</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</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; <span class="comment">/* (non-Javadoc) &lt;see cref=&quot;Lucene.Net.Search.Query.toString(java.lang.String) */</span></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_function_1_1_custom_score_query.html#a93033d589a0bf85e4d7957c1000906c6"> 140</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> System.String ToString(System.String field)</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; System.Text.StringBuilder sb = <span class="keyword">new</span> System.Text.StringBuilder(Name()).Append(<span class="stringliteral">&quot;(&quot;</span>);</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; sb.Append(subQuery.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_query.html#a5c948f4230c7d9d1acf3dc38551137d5" title="Prints a query to a string, with field assumed to be the default field and omitted. The representation used is one that is supposed to be readable by QueryParser. However, there are the following limitations: If the query was created by the parser, the printed representation may not be exactly what was parsed. For example, characters that need to be escaped will be represented without the required backslash. Some of the more complicated queries (e.g. span queries) don&#39;t have a representation that can be parsed by QueryParser. ">ToString</a>(field));</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; valSrcQueries.Length; i++)</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; sb.Append(<span class="stringliteral">&quot;, &quot;</span>).Append(valSrcQueries[i].ToString(field));</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; }</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; sb.Append(<span class="stringliteral">&quot;)&quot;</span>);</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; sb.Append(strict?<span class="stringliteral">&quot; STRICT&quot;</span>:<span class="stringliteral">&quot;&quot;</span>);</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">return</span> sb.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html#a93033d589a0bf85e4d7957c1000906c6" title="Prints a query to a string, with field assumed to be the default field and omitted. The representation used is one that is supposed to be readable by QueryParser. However, there are the following limitations: If the query was created by the parser, the printed representation may not be exactly what was parsed. For example, characters that need to be escaped will be represented without the required backslash. Some of the more complicated queries (e.g. span queries) don&#39;t have a representation that can be parsed by QueryParser. ">ToString</a>() + <a class="code" href="_boolean_query_8cs.html#aeff40eaf34e2b78f761d305f48b95699">ToStringUtils</a>.Boost(Boost);</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="l00154"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html#a85366d3a62d515d6cd3bf0687592be69"> 154</a></span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">bool</span> Equals(System.Object o)</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">if</span> (GetType() != o.GetType())</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; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; }</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html" title="Query that sets document score as a programmatic function of several (sub) scores: the score of its s...">CustomScoreQuery</a> other = (<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html" title="Query that sets document score as a programmatic function of several (sub) scores: the score of its s...">CustomScoreQuery</a>) o;</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">if</span> (this.Boost != other.<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> ||</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; !<span class="keyword">this</span>.subQuery.Equals(other.subQuery) ||</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; this.strict != other.strict ||</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; this.valSrcQueries.Length != other.valSrcQueries.Length)</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; {</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;</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="comment">// SequenceEqual should properly mimic java&#39;s Array.equals()</span></div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">return</span> valSrcQueries.SequenceEqual(other.valSrcQueries);</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="l00174"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html#a839a0e9d323f46c8ab9e2b0e39b26e59"> 174</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="l00175"></a><span class="lineno"> 175</span>&#160; {</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordtype">int</span> valSrcHash = 0;</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; valSrcQueries.Length; i++)</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; {</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="comment">// TODO: Simplify this hash code generation</span></div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; valSrcHash += valSrcQueries[i].<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html#a839a0e9d323f46c8ab9e2b0e39b26e59" title="Returns a hash code value for this object. ">GetHashCode</a>();</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; }</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">return</span> (GetType().GetHashCode() + subQuery.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_query.html#a4a1966528d60f0f34294a4b1458dab1c">GetHashCode</a>() + valSrcHash) ^</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; BitConverter.ToInt32(BitConverter.GetBytes(Boost), 0) ^ (strict ? 1234 : 4321);</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; }</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</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_function_1_1_custom_score_query.html#aab7ecc65053fd215dd983cc6dbac19a5"> 192</a></span>&#160; <span class="keyword">protected</span> <span class="keyword">virtual</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_provider.html" title="An instance of this subclass should be returned by CustomScoreQuery.GetCustomScoreProvider, if you want to modify the custom score calculation of a CustomScoreQuery.">CustomScoreProvider</a> GetCustomScoreProvider(<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="l00193"></a><span class="lineno"> 193</span>&#160; {</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="comment">// when deprecated methods are removed, do not extend class here, just return new default CustomScoreProvider</span></div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> AnonymousCustomScoreProvider(<span class="keyword">this</span>, reader);</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keyword">class </span>AnonymousCustomScoreProvider : <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_provider.html" title="An instance of this subclass should be returned by CustomScoreQuery.GetCustomScoreProvider, if you want to modify the custom score calculation of a CustomScoreQuery.">CustomScoreProvider</a></div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; {</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html" title="Query that sets document score as a programmatic function of several (sub) scores: the score of its s...">CustomScoreQuery</a> parent;</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keyword">public</span> AnonymousCustomScoreProvider(<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html" title="Query that sets document score as a programmatic function of several (sub) scores: the score of its s...">CustomScoreQuery</a> parent, <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) : base(reader)</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; {</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; this.parent = parent;</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; }</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">float</span> CustomScore(<span class="keywordtype">int</span> doc, <span class="keywordtype">float</span> subQueryScore, <span class="keywordtype">float</span>[] valSrcScores)</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; {</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">return</span> parent.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html#a7180811f8c617d6e40ca7d10332fd720" title="Compute a custom score by the subQuery score and a number of ValueSourceQuery scores.">CustomScore</a>(doc, subQueryScore, valSrcScores);</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;</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">float</span> CustomScore(<span class="keywordtype">int</span> doc, <span class="keywordtype">float</span> subQueryScore, <span class="keywordtype">float</span> valSrcScore)</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; {</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">return</span> parent.CustomScore(doc, subQueryScore, valSrcScore);</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; }</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="keyword">public</span> <span class="keyword">override</span> <a class="code" href="_custom_score_query_8cs.html#aea5b3dcb7c8a52294feb57dcaa878033">Explanation</a> CustomExplain(<span class="keywordtype">int</span> doc, <a class="code" href="_custom_score_query_8cs.html#aea5b3dcb7c8a52294feb57dcaa878033">Explanation</a> subQueryExpl, <a class="code" href="_custom_score_query_8cs.html#aea5b3dcb7c8a52294feb57dcaa878033">Explanation</a>[] valSrcExpls)</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; {</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">return</span> parent.CustomExplain(doc, subQueryExpl, valSrcExpls);</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;</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <a class="code" href="_custom_score_query_8cs.html#aea5b3dcb7c8a52294feb57dcaa878033">Explanation</a> CustomExplain(<span class="keywordtype">int</span> doc, <a class="code" href="_custom_score_query_8cs.html#aea5b3dcb7c8a52294feb57dcaa878033">Explanation</a> subQueryExpl, <a class="code" href="_custom_score_query_8cs.html#aea5b3dcb7c8a52294feb57dcaa878033">Explanation</a> valSrcExpl)</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; <span class="keywordflow">return</span> parent.CustomExplain(doc, subQueryExpl, valSrcExpl);</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; }</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; }</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; </div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; [Obsolete(<span class="stringliteral">&quot;Will be removed in Lucene 3.1&quot;</span>)]</div>
<div class="line"><a name="l00237"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html#a7180811f8c617d6e40ca7d10332fd720"> 237</a></span>&#160; <span class="keyword">public</span> <span class="keyword">virtual</span> <span class="keywordtype">float</span> CustomScore(<span class="keywordtype">int</span> doc, <span class="keywordtype">float</span> subQueryScore, <span class="keywordtype">float</span>[] valSrcScores)</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; <span class="keywordflow">if</span> (valSrcScores.Length == 1)</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; <span class="keywordflow">return</span> CustomScore(doc, subQueryScore, valSrcScores[0]);</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="keywordflow">if</span> (valSrcScores.Length == 0)</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; <span class="keywordflow">return</span> CustomScore(doc, subQueryScore, 1);</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; }</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordtype">float</span> score = subQueryScore;</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; valSrcScores.Length; i++)</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; {</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; score *= valSrcScores[i];</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; <span class="keywordflow">return</span> score;</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="l00263"></a><span class="lineno"> 263</span>&#160; [Obsolete(<span class="stringliteral">&quot;Will be removed in Lucene 3.1&quot;</span>)]</div>
<div class="line"><a name="l00264"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html#a1aac8d22878d520e70c89e284bf66916"> 264</a></span>&#160; <span class="keyword">public</span> <span class="keyword">virtual</span> <span class="keywordtype">float</span> CustomScore(<span class="keywordtype">int</span> doc, <span class="keywordtype">float</span> subQueryScore, <span class="keywordtype">float</span> valSrcScore)</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; <span class="keywordflow">return</span> subQueryScore * valSrcScore;</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;</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; </div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; </div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; [Obsolete(<span class="stringliteral">&quot;Will be removed in Lucene 3.1&quot;</span>)]</div>
<div class="line"><a name="l00279"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html#a93ca8accd3053f0766336cd275e5fb3b"> 279</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_explanation.html" title="Expert: Describes the score computation for document and query. ">Explanation</a> CustomExplain(<span class="keywordtype">int</span> doc, <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> subQueryExpl, <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>[] valSrcExpls)</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; <span class="keywordflow">if</span> (valSrcExpls.Length == 1)</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; {</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">return</span> CustomExplain(doc, subQueryExpl, valSrcExpls[0]);</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; <span class="keywordflow">if</span> (valSrcExpls.Length == 0)</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; {</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">return</span> subQueryExpl;</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; }</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordtype">float</span> valSrcScore = 1;</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; valSrcExpls.Length; i++)</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; valSrcScore *= valSrcExpls[i].<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_explanation.html#ae7933fa7759da03b13211cf2804c40af" title="The value assigned to this explanation node. ">Value</a>;</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; <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> exp = <span class="keyword">new</span> <a class="code" href="_custom_score_query_8cs.html#aea5b3dcb7c8a52294feb57dcaa878033">Explanation</a>(valSrcScore * subQueryExpl.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_explanation.html#ae7933fa7759da03b13211cf2804c40af" title="The value assigned to this explanation node. ">Value</a>, <span class="stringliteral">&quot;custom score: product of:&quot;</span>);</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; exp.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_explanation.html#a61e84f9a277600115dbc3457ca276abd" title="Adds a sub-node to this explanation node. ">AddDetail</a>(subQueryExpl);</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; valSrcExpls.Length; i++)</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; exp.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_explanation.html#a61e84f9a277600115dbc3457ca276abd" title="Adds a sub-node to this explanation node. ">AddDetail</a>(valSrcExpls[i]);</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; }</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">return</span> exp;</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; }</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; </div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; [Obsolete(<span class="stringliteral">&quot;Will be removed in Lucene 3.1&quot;</span>)]</div>
<div class="line"><a name="l00310"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html#a0d64d9e235bcf502e467c20c5116c253"> 310</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_explanation.html" title="Expert: Describes the score computation for document and query. ">Explanation</a> CustomExplain(<span class="keywordtype">int</span> doc, <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> subQueryExpl, <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> valSrcExpl)</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; <span class="keywordtype">float</span> valSrcScore = 1;</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">if</span> (valSrcExpl != null)</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; {</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; valSrcScore *= valSrcExpl.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_explanation.html#ae7933fa7759da03b13211cf2804c40af" title="The value assigned to this explanation node. ">Value</a>;</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; <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> exp = <span class="keyword">new</span> <a class="code" href="_custom_score_query_8cs.html#aea5b3dcb7c8a52294feb57dcaa878033">Explanation</a>(valSrcScore * subQueryExpl.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_explanation.html#ae7933fa7759da03b13211cf2804c40af" title="The value assigned to this explanation node. ">Value</a>, <span class="stringliteral">&quot;custom score: product of:&quot;</span>);</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; exp.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_explanation.html#a61e84f9a277600115dbc3457ca276abd" title="Adds a sub-node to this explanation node. ">AddDetail</a>(subQueryExpl);</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; exp.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_explanation.html#a61e84f9a277600115dbc3457ca276abd" title="Adds a sub-node to this explanation node. ">AddDetail</a>(valSrcExpl);</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">return</span> exp;</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; }</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; </div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="comment">//=========================== W E I G H T ============================</span></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; [Serializable]</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keyword">private</span> <span class="keyword">class </span>CustomWeight:<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></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">private</span> <span class="keywordtype">void</span> InitBlock(<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html" title="Query that sets document score as a programmatic function of several (sub) scores: the score of its s...">CustomScoreQuery</a> enclosingInstance)</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; this.enclosingInstance = enclosingInstance;</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; <span class="keyword">private</span> CustomScoreQuery enclosingInstance;</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keyword">public</span> CustomScoreQuery Enclosing_Instance</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; {</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keyword">get</span></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; <span class="keywordflow">return</span> enclosingInstance;</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; }</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; }</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keyword">internal</span> <a class="code" href="_documents_writer_8cs.html#a5431a3a4edd067eec50ca39b5ea99c31">Similarity</a> similarity;</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keyword">internal</span> <a class="code" href="_documents_writer_8cs.html#af0d29c976e72f83236dc8d0fa23aaf32">Weight</a> subQueryWeight;</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keyword">internal</span> <a class="code" href="_documents_writer_8cs.html#af0d29c976e72f83236dc8d0fa23aaf32">Weight</a>[] valSrcWeights;</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keyword">internal</span> <span class="keywordtype">bool</span> qStrict;</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; </div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keyword">public</span> CustomWeight(CustomScoreQuery enclosingInstance, <a class="code" href="_document_8cs.html#a4be53b8845ef8ff2a91031c18774a62c">Searcher</a> searcher)</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; {</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; InitBlock(enclosingInstance);</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; this.similarity = Enclosing_Instance.GetSimilarity(searcher);</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; this.subQueryWeight = Enclosing_Instance.subQuery.Weight(searcher);</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; this.valSrcWeights = <span class="keyword">new</span> <a class="code" href="_documents_writer_8cs.html#af0d29c976e72f83236dc8d0fa23aaf32">Weight</a>[Enclosing_Instance.valSrcQueries.Length];</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; Enclosing_Instance.valSrcQueries.Length; i++)</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; {</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; this.valSrcWeights[i] = Enclosing_Instance.valSrcQueries[i].CreateWeight(searcher);</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; this.qStrict = Enclosing_Instance.strict;</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; </div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="comment">/*(non-Javadoc) &lt;see cref=&quot;Lucene.Net.Search.Weight.getQuery() */</span></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="keyword">public</span> <span class="keyword">override</span> <a class="code" href="_more_like_this_8cs.html#accbc7c5687907350ba0e2681b41e1b0d">Query</a> <a class="code" href="_more_like_this_8cs.html#accbc7c5687907350ba0e2681b41e1b0d">Query</a></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">get</span> { <span class="keywordflow">return</span> Enclosing_Instance; }</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;</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="comment">/*(non-Javadoc) &lt;see cref=&quot;Lucene.Net.Search.Weight.getValue() */</span></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> <span class="keywordtype">float</span> Value</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; <span class="keyword">get</span> { <span class="keywordflow">return</span> Enclosing_Instance.Boost; }</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; }</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="comment">/*(non-Javadoc) &lt;see cref=&quot;Lucene.Net.Search.Weight.sumOfSquaredWeights() */</span></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">public</span> <span class="keyword">override</span> <span class="keywordtype">float</span> GetSumOfSquaredWeights()</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; <span class="keywordtype">float</span> sum = subQueryWeight.GetSumOfSquaredWeights();</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; valSrcWeights.Length; i++)</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; <span class="keywordflow">if</span> (qStrict)</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; var sumsq = valSrcWeights[i].GetSumOfSquaredWeights();</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="comment">// do not include ValueSource part in the query normalization</span></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">else</span></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; sum += valSrcWeights[i].GetSumOfSquaredWeights();</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; }</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; sum *= Enclosing_Instance.Boost*Enclosing_Instance.Boost; <span class="comment">// boost each sub-weight</span></div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keywordflow">return</span> sum;</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; }</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">/*(non-Javadoc) &lt;see cref=&quot;Lucene.Net.Search.Weight.normalize(float) */</span></div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">void</span> Normalize(<span class="keywordtype">float</span> norm)</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; norm *= Enclosing_Instance.Boost; <span class="comment">// incorporate boost</span></div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; subQueryWeight.Normalize(norm);</div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; valSrcWeights.Length; i++)</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="keywordflow">if</span> (qStrict)</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; {</div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; valSrcWeights[i].Normalize(1); <span class="comment">// do not normalize the ValueSource part</span></div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; }</div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; {</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; valSrcWeights[i].Normalize(norm);</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"> 410</span>&#160; }</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="keyword">public</span> <span class="keyword">override</span> <a class="code" href="_documents_writer_8cs.html#a83f1a9bf052559c9fc4b5dc2c3d490f1">Scorer</a> <a class="code" href="_documents_writer_8cs.html#a83f1a9bf052559c9fc4b5dc2c3d490f1">Scorer</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, <span class="keywordtype">bool</span> scoreDocsInOrder, <span class="keywordtype">bool</span> topScorer)</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; <span class="comment">// Pass true for &quot;scoresDocsInOrder&quot;, because we</span></div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="comment">// require in-order scoring, even if caller does not,</span></div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="comment">// since we call advance on the valSrcScorers. Pass</span></div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="comment">// false for &quot;topScorer&quot; because we will not invoke</span></div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="comment">// score(Collector) on these scorers:</span></div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <a class="code" href="_documents_writer_8cs.html#a83f1a9bf052559c9fc4b5dc2c3d490f1">Scorer</a> subQueryScorer = subQueryWeight.Scorer(reader, <span class="keyword">true</span>, <span class="keyword">false</span>);</div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keywordflow">if</span> (subQueryScorer == null)</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; <span class="keywordflow">return</span> null;</div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; }</div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <a class="code" href="_documents_writer_8cs.html#a83f1a9bf052559c9fc4b5dc2c3d490f1">Scorer</a>[] valSrcScorers = <span class="keyword">new</span> <a class="code" href="_documents_writer_8cs.html#a83f1a9bf052559c9fc4b5dc2c3d490f1">Scorer</a>[valSrcWeights.Length];</div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; valSrcScorers.Length; i++)</div>
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; {</div>
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; valSrcScorers[i] = valSrcWeights[i].Scorer(reader, <span class="keyword">true</span>, topScorer);</div>
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; }</div>
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> CustomScorer(enclosingInstance, similarity, reader, <span class="keyword">this</span>, subQueryScorer, valSrcScorers);</div>
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; }</div>
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; </div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <a class="code" href="_custom_score_query_8cs.html#aea5b3dcb7c8a52294feb57dcaa878033">Explanation</a> Explain(<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, <span class="keywordtype">int</span> doc)</div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; {</div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <a class="code" href="_custom_score_query_8cs.html#aea5b3dcb7c8a52294feb57dcaa878033">Explanation</a> explain = DoExplain(reader, doc);</div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keywordflow">return</span> explain == null?<span class="keyword">new</span> <a class="code" href="_custom_score_query_8cs.html#aea5b3dcb7c8a52294feb57dcaa878033">Explanation</a>(0.0f, <span class="stringliteral">&quot;no matching docs&quot;</span>):explain;</div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; }</div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; </div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keyword">private</span> <a class="code" href="_custom_score_query_8cs.html#aea5b3dcb7c8a52294feb57dcaa878033">Explanation</a> DoExplain(<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, <span class="keywordtype">int</span> doc)</div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; {</div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <a class="code" href="_custom_score_query_8cs.html#aea5b3dcb7c8a52294feb57dcaa878033">Explanation</a> subQueryExpl = subQueryWeight.Explain(reader, doc);</div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordflow">if</span> (!subQueryExpl.IsMatch)</div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; {</div>
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="keywordflow">return</span> subQueryExpl;</div>
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; }</div>
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="comment">// match</span></div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <a class="code" href="_custom_score_query_8cs.html#aea5b3dcb7c8a52294feb57dcaa878033">Explanation</a>[] valSrcExpls = <span class="keyword">new</span> <a class="code" href="_custom_score_query_8cs.html#aea5b3dcb7c8a52294feb57dcaa878033">Explanation</a>[valSrcWeights.Length];</div>
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; valSrcWeights.Length; i++)</div>
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; {</div>
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; valSrcExpls[i] = valSrcWeights[i].Explain(reader, doc);</div>
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; }</div>
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <a class="code" href="_custom_score_query_8cs.html#aea5b3dcb7c8a52294feb57dcaa878033">Explanation</a> customExp = Enclosing_Instance.GetCustomScoreProvider(reader).CustomExplain(doc, subQueryExpl, valSrcExpls);</div>
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keywordtype">float</span> sc = Value * customExp.Value;</div>
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <a class="code" href="_custom_score_query_8cs.html#aea5b3dcb7c8a52294feb57dcaa878033">Explanation</a> res = <span class="keyword">new</span> <a class="code" href="_custom_score_query_8cs.html#aaff36a95cdad7bc1affaff3241d83f90">ComplexExplanation</a>(<span class="keyword">true</span>, sc, Enclosing_Instance.ToString() + <span class="stringliteral">&quot;, product of:&quot;</span>);</div>
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; res.AddDetail(customExp);</div>
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; res.AddDetail(<span class="keyword">new</span> <a class="code" href="_custom_score_query_8cs.html#aea5b3dcb7c8a52294feb57dcaa878033">Explanation</a>(Value, <span class="stringliteral">&quot;queryBoost&quot;</span>)); <span class="comment">// actually using the q boost as q weight (== weight value)</span></div>
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keywordflow">return</span> res;</div>
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; }</div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;</div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">bool</span> GetScoresDocsOutOfOrder()</div>
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; {</div>
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; }</div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; }</div>
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; </div>
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; </div>
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="comment">//=========================== S C O R E R ============================</span></div>
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; </div>
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keyword">private</span> <span class="keyword">class </span>CustomScorer:<a class="code" href="_documents_writer_8cs.html#a83f1a9bf052559c9fc4b5dc2c3d490f1">Scorer</a></div>
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; {</div>
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keyword">private</span> <span class="keywordtype">void</span> InitBlock(CustomScoreQuery enclosingInstance)</div>
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; {</div>
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; this.enclosingInstance = enclosingInstance;</div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; }</div>
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keyword">private</span> CustomScoreQuery enclosingInstance;</div>
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="keyword">public</span> CustomScoreQuery Enclosing_Instance</div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; {</div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="keyword">get</span></div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; {</div>
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keywordflow">return</span> enclosingInstance;</div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; }</div>
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; </div>
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; }</div>
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keyword">private</span> <span class="keywordtype">float</span> qWeight;</div>
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keyword">private</span> <a class="code" href="_documents_writer_8cs.html#a83f1a9bf052559c9fc4b5dc2c3d490f1">Scorer</a> subQueryScorer;</div>
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="keyword">private</span> <a class="code" href="_documents_writer_8cs.html#a83f1a9bf052559c9fc4b5dc2c3d490f1">Scorer</a>[] valSrcScorers;</div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</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> reader;</div>
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keyword">private</span> CustomScoreProvider provider;</div>
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keyword">private</span> <span class="keywordtype">float</span>[] vScores; <span class="comment">// reused in score() to avoid allocating this array for each doc </span></div>
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; </div>
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="comment">// constructor</span></div>
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="keyword">internal</span> CustomScorer(CustomScoreQuery enclosingInstance, <a class="code" href="_documents_writer_8cs.html#a5431a3a4edd067eec50ca39b5ea99c31">Similarity</a> similarity, <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, CustomWeight w, <a class="code" href="_documents_writer_8cs.html#a83f1a9bf052559c9fc4b5dc2c3d490f1">Scorer</a> subQueryScorer, <a class="code" href="_documents_writer_8cs.html#a83f1a9bf052559c9fc4b5dc2c3d490f1">Scorer</a>[] valSrcScorers):base(similarity)</div>
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; {</div>
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; InitBlock(enclosingInstance);</div>
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; this.qWeight = w.Value;</div>
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; this.subQueryScorer = subQueryScorer;</div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; this.valSrcScorers = valSrcScorers;</div>
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; this.reader = reader;</div>
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; this.vScores = <span class="keyword">new</span> <span class="keywordtype">float</span>[valSrcScorers.Length];</div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; this.provider = this.Enclosing_Instance.GetCustomScoreProvider(reader);</div>
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; }</div>
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; </div>
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">int</span> NextDoc()</div>
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; {</div>
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordtype">int</span> doc = subQueryScorer.NextDoc();</div>
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordflow">if</span> (doc != NO_MORE_DOCS)</div>
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; {</div>
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; valSrcScorers.Length; i++)</div>
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; {</div>
<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; valSrcScorers[i].Advance(doc);</div>
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; }</div>
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; }</div>
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keywordflow">return</span> doc;</div>
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; }</div>
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; </div>
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">int</span> DocID()</div>
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; {</div>
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="keywordflow">return</span> subQueryScorer.DocID();</div>
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; }</div>
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; </div>
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="comment">/*(non-Javadoc) &lt;see cref=&quot;Lucene.Net.Search.Scorer.score() */</span></div>
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">float</span> Score()</div>
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; {</div>
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; valSrcScorers.Length; i++)</div>
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; {</div>
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; vScores[i] = valSrcScorers[i].Score();</div>
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; }</div>
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keywordflow">return</span> qWeight * provider.CustomScore(subQueryScorer.DocID(), subQueryScorer.Score(), vScores);</div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; }</div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; </div>
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">int</span> Advance(<span class="keywordtype">int</span> target)</div>
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; {</div>
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordtype">int</span> doc = subQueryScorer.Advance(target);</div>
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordflow">if</span> (doc != NO_MORE_DOCS)</div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; {</div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; valSrcScorers.Length; i++)</div>
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; {</div>
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; valSrcScorers[i].Advance(doc);</div>
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; }</div>
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; }</div>
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="keywordflow">return</span> doc;</div>
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; }</div>
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; }</div>
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; </div>
<div class="line"><a name="l00545"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html#a17ef203d1bac3cf33260527df87a3133"> 545</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_weight.html" title="Expert: Calculate query weights and build query scorers. The purpose of Weight is to ensure searching...">Weight</a> CreateWeight(<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="l00546"></a><span class="lineno"> 546</span>&#160; {</div>
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> CustomWeight(<span class="keyword">this</span>, searcher);</div>
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; }</div>
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; </div>
<div class="line"><a name="l00558"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html#a1e2dee2ab7bf453a6422c47bd0909e12"> 558</a></span>&#160; <span class="keyword">public</span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> IsStrict()</div>
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; {</div>
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <span class="keywordflow">return</span> strict;</div>
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; }</div>
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; </div>
<div class="line"><a name="l00568"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html#a76dc608de9c979883c26e55e5db89f7a"> 568</a></span>&#160; <span class="keyword">public</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> SetStrict(<span class="keywordtype">bool</span> strict)</div>
<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; {</div>
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; this.strict = strict;</div>
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; }</div>
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; </div>
<div class="line"><a name="l00574"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_function_1_1_custom_score_query.html#a6743793b7df20182b16b989784993723"> 574</a></span>&#160; <span class="keyword">public</span> <span class="keyword">virtual</span> System.String Name()</div>
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; {</div>
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;custom&quot;</span>;</div>
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; }</div>
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; }</div>
<div class="line"><a name="l00579"></a><span class="lineno"> 579</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:45 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>