blob: c59b0ba991ec3276fbfc65220b3c0894e6ef7246 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.3"/>
<title>Lucene.Net: contrib/FastVectorHighlighter/FieldQuery.cs Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="lucene-net-icon-128x128.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">Lucene.Net
&#160;<span id="projectnumber">3.0.3</span>
</div>
<div id="projectbrief">Lucene.Net is a .NET port of the Java Lucene Indexing Library</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.3 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="Index.html"><span>Main&#160;Page</span></a></li>
<li><a href="namespaces.html"><span>Packages</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>File&#160;Members</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Properties</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_3a8d697be1e2feab9f01acc78e9570fb.html">contrib</a></li><li class="navelem"><a class="el" href="dir_323f0a7eb8d8689f5a0dcb4a69f8f265.html">FastVectorHighlighter</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">FieldQuery.cs</div> </div>
</div><!--header-->
<div class="contents">
<a href="_field_query_8cs.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one or more</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * contributor license agreements. See the NOTICE file distributed with</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * this work for additional information regarding copyright ownership.</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * The ASF licenses this file to You under the Apache License, Version 2.0</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * (the &quot;License&quot;); you may not use this file except in compliance with</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * the License. You may obtain a copy of the License at</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * limitations under the License.</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="keyword">using</span> System;</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">using</span> System.Collections.Generic;</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">using</span> System.Text;</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="keyword">using</span> Lucene.Net.Search;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="keyword">using</span> Lucene.Net.Index;</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">using</span> Lucene.Net.Support.Compatibility;</div>
<div class="line"><a name="l00025"></a><span class="lineno"><a class="code" href="_field_query_8cs.html#a2d1cbe4942c5a9c67961e361dbfb4a51"> 25</a></span>&#160;<span class="keyword">using</span> <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_info.html" title="A TermInfo is the record of information stored for a term.">TermInfo</a> = Lucene.Net.Search.Vectorhighlight.FieldTermStack.TermInfo;</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="keyword">namespace </span>Lucene.Net.Search.Vectorhighlight</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;{</div>
<div class="line"><a name="l00029"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query.html"> 29</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_vectorhighlight_1_1_field_query.html">FieldQuery</a></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="keywordtype">bool</span> fieldMatch;</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; <span class="comment">// fieldMatch==true, Map&lt;fieldName,QueryPhraseMap&gt;</span></div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="comment">// fieldMatch==false, Map&lt;null,QueryPhraseMap&gt;</span></div>
<div class="line"><a name="l00035"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query.html#a1f7ae00c8c0f3d270d047a7021bc8c5d"> 35</a></span>&#160; <span class="keyword">public</span> HashMap&lt;String, QueryPhraseMap&gt; rootMaps = <span class="keyword">new</span> HashMap&lt;String, QueryPhraseMap&gt;();</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="comment">// fieldMatch==true, Map&lt;fieldName,setOfTermsInQueries&gt;</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="comment">// fieldMatch==false, Map&lt;null,setOfTermsInQueries&gt;</span></div>
<div class="line"><a name="l00039"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query.html#a4afc2fffa6889249ff98414ac853ecf5"> 39</a></span>&#160; <span class="keyword">public</span> HashMap&lt;String, List&lt;String&gt;&gt; termSetMap = <span class="keyword">new</span> HashMap&lt;String, List&lt;String&gt;&gt;();</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">int</span> termOrPhraseNumber; <span class="comment">// used for colored tag support</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div>
<div class="line"><a name="l00043"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query.html#aa55762a823d24da40e7e2804bc164cb2"> 43</a></span>&#160; <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query.html">FieldQuery</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> query, <span class="keywordtype">bool</span> phraseHighlight, <span class="keywordtype">bool</span> fieldMatch)</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; {</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; this.fieldMatch = fieldMatch;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; Dictionary&lt;Query, Query&gt; flatQueries = <span class="keyword">new</span> Dictionary&lt;Query, Query&gt;();</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; flatten(query, flatQueries);</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; SaveTerms(flatQueries);</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; Dictionary&lt;Query, Query&gt; expandQueries = expand(flatQueries);</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; <span class="keywordflow">foreach</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> flatQuery <span class="keywordflow">in</span> expandQueries.Keys)</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html">QueryPhraseMap</a> rootMap = getRootMap(flatQuery);</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; rootMap.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html#a3caff12eb5091d3c9ecc5e049cc0e6d4">Add</a>(flatQuery);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">if</span> (!phraseHighlight &amp;&amp; flatQuery is <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_phrase_query.html" title="A Query that matches documents containing a particular sequence of terms. A PhraseQuery is built by Q...">PhraseQuery</a>)</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; {</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; PhraseQuery pq = (<a class="code" href="_abstract_field_8cs.html#a945cd0e79343408e87508a19920e3941">PhraseQuery</a>)flatQuery;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">if</span> (pq.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_phrase_query.html#a6c528be9ef94f3907e29430abc936b66" title="Returns the set of terms in this phrase. ">GetTerms</a>().Length &gt; 1)</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; {</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">foreach</span> (<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html" title="A Term represents a word from text. This is the unit of search. It is composed of two elements...">Term</a> term <span class="keywordflow">in</span> pq.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_phrase_query.html#a6c528be9ef94f3907e29430abc936b66" title="Returns the set of terms in this phrase. ">GetTerms</a>())</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; rootMap.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html#afa86a06623a10a33582e807bd68d26cc">AddTerm</a>(term.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html#afe11c449ea7db39725c494b2c2574847" title="Returns the text of this term. In the case of words, this is simply the text of the word...">Text</a>, flatQuery.<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="l00062"></a><span class="lineno"> 62</span>&#160; }</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; }</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; }</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div>
<div class="line"><a name="l00067"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query.html#af73d1f1e24823846649536e38421dba1"> 67</a></span>&#160; <span class="keyword">public</span> <span class="keywordtype">void</span> flatten(<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> sourceQuery, Dictionary&lt;Query, Query&gt; flatQueries)</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">if</span> (sourceQuery is <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_boolean_query.html" title="A Query that matches documents matching boolean combinations of other queries, e.g. TermQuerys, PhraseQuerys or other BooleanQuerys. ">BooleanQuery</a>)</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; {</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; BooleanQuery bq = (<a class="code" href="_more_like_this_8cs.html#ae2b9948961aeea34f9c4e4955536f433">BooleanQuery</a>)sourceQuery;</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">foreach</span> (<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_boolean_clause.html" title="A clause in a BooleanQuery. ">BooleanClause</a> clause <span class="keywordflow">in</span> bq.GetClauses())</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; {</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">if</span> (!clause.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_boolean_clause.html#a8732e5a2a1711dad803c623bbff8d803">IsProhibited</a>)</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; flatten(clause.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_boolean_clause.html#aa8392a0594e9c756e506e424eb34d269" title="The query whose matching documents are combined by the boolean query.">Query</a>, flatQueries);</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; }</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sourceQuery is <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_prefix_query.html" title="A Query that matches documents containing terms with a specified prefix. A PrefixQuery is built by Qu...">PrefixQuery</a>)</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">if</span> (!flatQueries.ContainsKey(sourceQuery))</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; flatQueries.Add(sourceQuery, sourceQuery);</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sourceQuery is <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_disjunction_max_query.html" title="A query that generates the union of documents produced by its subqueries, and that scores each docume...">DisjunctionMaxQuery</a>)</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; DisjunctionMaxQuery dmq = (<a class="code" href="_payload_span_util_8cs.html#a293b1a238d8f7a4277a888a28ca86e65">DisjunctionMaxQuery</a>)sourceQuery;</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">foreach</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> query <span class="keywordflow">in</span> dmq)</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; {</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; flatten(query, flatQueries);</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="keywordflow">else</span> <span class="keywordflow">if</span> (sourceQuery is <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_term_query.html" title="A Query that matches documents containing a term. This may be combined with other terms with a Boolea...">TermQuery</a>)</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; {</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">if</span> (!flatQueries.ContainsKey(sourceQuery))</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; flatQueries.Add(sourceQuery, sourceQuery);</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sourceQuery is <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_phrase_query.html" title="A Query that matches documents containing a particular sequence of terms. A PhraseQuery is built by Q...">PhraseQuery</a>)</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; {</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">if</span> (!flatQueries.ContainsKey(sourceQuery))</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; {</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; PhraseQuery pq = (<a class="code" href="_abstract_field_8cs.html#a945cd0e79343408e87508a19920e3941">PhraseQuery</a>)sourceQuery;</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">if</span> (pq.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_phrase_query.html#a6c528be9ef94f3907e29430abc936b66" title="Returns the set of terms in this phrase. ">GetTerms</a>().Length &gt; 1)</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; flatQueries.Add(pq, pq);</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pq.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_phrase_query.html#a6c528be9ef94f3907e29430abc936b66" title="Returns the set of terms in this phrase. ">GetTerms</a>().Length == 1)</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_query.html" title="The abstract base class for queries. Instantiable subclasses are: TermQuery MultiTermQuery BooleanQ...">Query</a> q = <span class="keyword">new</span> <a class="code" href="_more_like_this_8cs.html#a13f0b68c1e7c8f509c3a0be1441df5d9">TermQuery</a>(pq.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_phrase_query.html#a6c528be9ef94f3907e29430abc936b66" title="Returns the set of terms in this phrase. ">GetTerms</a>()[0]);</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; flatQueries.Add(q, q);</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; }</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; }</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; {</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="comment">// Fallback to using extracted terms</span></div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; ISet&lt;Term&gt; terms = SetFactory.CreateHashSet&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;();</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">try</span></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; sourceQuery.<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="l00117"></a><span class="lineno"> 117</span>&#160; }</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">catch</span> (NotSupportedException)</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; { <span class="comment">// thrown by default impl</span></div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">return</span>; <span class="comment">// ignore error and discard query</span></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;</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">foreach</span> (var term <span class="keywordflow">in</span> terms)</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; flatten(<span class="keyword">new</span> <a class="code" href="_more_like_this_8cs.html#a13f0b68c1e7c8f509c3a0be1441df5d9">TermQuery</a>(term), flatQueries);</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; }</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; }</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; }</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="comment"> * Create expandQueries from flatQueries.</span></div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="comment"> * </span></div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;<span class="comment"> * expandQueries := flatQueries + overlapped phrase queries</span></div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;<span class="comment"> * </span></div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="comment"> * ex1) flatQueries={a,b,c}</span></div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="comment"> * =&gt; expandQueries={a,b,c}</span></div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="comment"> * ex2) flatQueries={a,&quot;b c&quot;,&quot;c d&quot;}</span></div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;<span class="comment"> * =&gt; expandQueries={a,&quot;b c&quot;,&quot;c d&quot;,&quot;b c d&quot;}</span></div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="comment"> */</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_vectorhighlight_1_1_field_query.html#a69896ac0c4594800c9129117c7a02747"> 140</a></span>&#160; <span class="keyword">public</span> Dictionary&lt;Query, Query&gt; expand(Dictionary&lt;Query, Query&gt; flatQueries)</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; Dictionary&lt;Query, Query&gt; expandQueries = <span class="keyword">new</span> Dictionary&lt;Query, Query&gt;();</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">foreach</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> query <span class="keywordflow">in</span> <span class="keyword">new</span> Dictionary&lt;Query, Query&gt;(flatQueries).Keys)</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; {</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="comment">//Query query = i.next();</span></div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; flatQueries.Remove(query);</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; expandQueries.Add(query, query);</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">if</span> (!(query is <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_phrase_query.html" title="A Query that matches documents containing a particular sequence of terms. A PhraseQuery is built by Q...">PhraseQuery</a>)) <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">foreach</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> qj <span class="keywordflow">in</span> flatQueries.Keys)</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; {</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">if</span> (!(qj is <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_phrase_query.html" title="A Query that matches documents containing a particular sequence of terms. A PhraseQuery is built by Q...">PhraseQuery</a>)) <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; CheckOverlap(expandQueries, (PhraseQuery)query, (PhraseQuery)qj);</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; }</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">return</span> expandQueries;</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; }</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="comment">/*</span></div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;<span class="comment"> * Check if PhraseQuery A and B have overlapped part.</span></div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="comment"> * </span></div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="comment"> * ex1) A=&quot;a b&quot;, B=&quot;b c&quot; =&gt; overlap; expandQueries={&quot;a b c&quot;}</span></div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="comment"> * ex2) A=&quot;b c&quot;, B=&quot;a b&quot; =&gt; overlap; expandQueries={&quot;a b c&quot;}</span></div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="comment"> * ex3) A=&quot;a b&quot;, B=&quot;c d&quot; =&gt; no overlap; expandQueries={}</span></div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keyword">private</span> <span class="keywordtype">void</span> CheckOverlap(Dictionary&lt;Query, Query&gt; expandQueries, <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_phrase_query.html" title="A Query that matches documents containing a particular sequence of terms. A PhraseQuery is built by Q...">PhraseQuery</a> a, <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_phrase_query.html" title="A Query that matches documents containing a particular sequence of terms. A PhraseQuery is built by Q...">PhraseQuery</a> b)</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; {</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">if</span> (a.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_phrase_query.html#ab0b42bf7038acb8464c7a31de6c1fb22" title="Sets the number of other words permitted between words in query phrase. If zero, then this is an exac...">Slop</a> != b.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_phrase_query.html#ab0b42bf7038acb8464c7a31de6c1fb22" title="Sets the number of other words permitted between words in query phrase. If zero, then this is an exac...">Slop</a>) <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html" title="A Term represents a word from text. This is the unit of search. It is composed of two elements...">Term</a>[] ats = a.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_phrase_query.html#a6c528be9ef94f3907e29430abc936b66" title="Returns the set of terms in this phrase. ">GetTerms</a>();</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html" title="A Term represents a word from text. This is the unit of search. It is composed of two elements...">Term</a>[] bts = b.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_phrase_query.html#a6c528be9ef94f3907e29430abc936b66" title="Returns the set of terms in this phrase. ">GetTerms</a>();</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">if</span> (fieldMatch &amp;&amp; !ats[0].<a class="code" href="_syns2_index_8cs.html#a6d7b175c6799cf1d18e9493727d23fc6">Field</a>.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html#a576e0c713a41a45f056d1b98bf0ae3e7">Equals</a>(bts[0].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html#a2ecfa7c0860798920d089654f34aa222" title="Returns the field of this term, an interned string. The field indicates the part of a document which ...">Field</a>)) <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; CheckOverlap(expandQueries, ats, bts, a.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_phrase_query.html#ab0b42bf7038acb8464c7a31de6c1fb22" title="Sets the number of other words permitted between words in query phrase. If zero, then this is an exac...">Slop</a>, a.<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="l00172"></a><span class="lineno"> 172</span>&#160; CheckOverlap(expandQueries, bts, ats, b.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_phrase_query.html#ab0b42bf7038acb8464c7a31de6c1fb22" title="Sets the number of other words permitted between words in query phrase. If zero, then this is an exac...">Slop</a>, b.<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="l00173"></a><span class="lineno"> 173</span>&#160; }</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="comment"> * Check if src and dest have overlapped part and if it is, create PhraseQueries and add expandQueries.</span></div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;<span class="comment"> * </span></div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="comment"> * ex1) src=&quot;a b&quot;, dest=&quot;c d&quot; =&gt; no overlap</span></div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;<span class="comment"> * ex2) src=&quot;a b&quot;, dest=&quot;a b c&quot; =&gt; no overlap</span></div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="comment"> * ex3) src=&quot;a b&quot;, dest=&quot;b c&quot; =&gt; overlap; expandQueries={&quot;a b c&quot;}</span></div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;<span class="comment"> * ex4) src=&quot;a b c&quot;, dest=&quot;b c d&quot; =&gt; overlap; expandQueries={&quot;a b c d&quot;}</span></div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<span class="comment"> * ex5) src=&quot;a b c&quot;, dest=&quot;b c&quot; =&gt; no overlap</span></div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;<span class="comment"> * ex6) src=&quot;a b c&quot;, dest=&quot;b&quot; =&gt; no overlap</span></div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;<span class="comment"> * ex7) src=&quot;a a a a&quot;, dest=&quot;a a a&quot; =&gt; overlap;</span></div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;<span class="comment"> * expandQueries={&quot;a a a a a&quot;,&quot;a a a a a a&quot;}</span></div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;<span class="comment"> * ex8) src=&quot;a b c d&quot;, dest=&quot;b c&quot; =&gt; no overlap</span></div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keyword">private</span> <span class="keywordtype">void</span> CheckOverlap(Dictionary&lt;Query, Query&gt; expandQueries, <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>[] src, <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>[] dest, <span class="keywordtype">int</span> slop, <span class="keywordtype">float</span> boost)</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; {</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="comment">// beginning from 1 (not 0) is safe because that the PhraseQuery has multiple terms</span></div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="comment">// is guaranteed in flatten() method (if PhraseQuery has only one term, flatten()</span></div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="comment">// converts PhraseQuery to TermQuery)</span></div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 1; i &lt; src.Length; i++)</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; {</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordtype">bool</span> overlap = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = i; j &lt; src.Length; j++)</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="keywordflow">if</span> ((j - i) &lt; dest.Length &amp;&amp; !src[j].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html#afe11c449ea7db39725c494b2c2574847" title="Returns the text of this term. In the case of words, this is simply the text of the word...">Text</a>.Equals(dest[j - i].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html#afe11c449ea7db39725c494b2c2574847" title="Returns the text of this term. In the case of words, this is simply the text of the word...">Text</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; overlap = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keywordflow">break</span>;</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; }</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">if</span> (overlap &amp;&amp; src.Length - i &lt; dest.Length)</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; {</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_phrase_query.html" title="A Query that matches documents containing a particular sequence of terms. A PhraseQuery is built by Q...">PhraseQuery</a> pq = <span class="keyword">new</span> <a class="code" href="_abstract_field_8cs.html#a945cd0e79343408e87508a19920e3941">PhraseQuery</a>();</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">foreach</span> (<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html" title="A Term represents a word from text. This is the unit of search. It is composed of two elements...">Term</a> srcTerm <span class="keywordflow">in</span> src)</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; pq.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_phrase_query.html#a73747b1c2a28259caf60036f80bc5ad8" title="Adds a term to the end of the query phrase. The relative position of the term is the one immediately ...">Add</a>(srcTerm);</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = src.Length - i; k &lt; dest.Length; k++)</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; {</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; pq.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_phrase_query.html#a73747b1c2a28259caf60036f80bc5ad8" title="Adds a term to the end of the query phrase. The relative position of the term is the one immediately ...">Add</a>(<span class="keyword">new</span> <a class="code" href="_more_like_this_8cs.html#a8797eb30ce21b31829d3e3a43a20e3b9">Term</a>(src[0].<a class="code" href="_syns2_index_8cs.html#a6d7b175c6799cf1d18e9493727d23fc6">Field</a>, dest[k].Text));</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; pq.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_phrase_query.html#ab0b42bf7038acb8464c7a31de6c1fb22" title="Sets the number of other words permitted between words in query phrase. If zero, then this is an exac...">Slop</a> = slop;</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; pq.<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> = boost;</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordflow">if</span> (!expandQueries.ContainsKey(pq))</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; expandQueries.Add(pq, pq);</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; }</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; }</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; }</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;</div>
<div class="line"><a name="l00221"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query.html#a059eebcb222ed622c052cfb9348a1617"> 221</a></span>&#160; <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html">QueryPhraseMap</a> getRootMap(<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_query.html" title="The abstract base class for queries. Instantiable subclasses are: TermQuery MultiTermQuery BooleanQ...">Query</a> query)</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; {</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; String key = GetKey(query);</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html">QueryPhraseMap</a> map = rootMaps.Get(key);</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">if</span> (map == null)</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; {</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; map = <span class="keyword">new</span> <a class="code" href="_field_phrase_list_8cs.html#a0b0a66a2fa1e2429ddbb8c0a90b7ac4a">QueryPhraseMap</a>(<span class="keyword">this</span>);</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; rootMaps.Put(key, map);</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; }</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">return</span> map;</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;<span class="comment"> * Return &#39;key&#39; string. &#39;key&#39; is the field name of the Query.</span></div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;<span class="comment"> * If not fieldMatch, &#39;key&#39; will be null.</span></div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keyword">private</span> String GetKey(<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_query.html" title="The abstract base class for queries. Instantiable subclasses are: TermQuery MultiTermQuery BooleanQ...">Query</a> query)</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> (!fieldMatch) <span class="keywordflow">return</span> null;</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">if</span> (query is <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_term_query.html" title="A Query that matches documents containing a term. This may be combined with other terms with a Boolea...">TermQuery</a>)</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">return</span> ((TermQuery)query).Term.Field;</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> (query is <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_prefix_query.html" title="A Query that matches documents containing terms with a specified prefix. A PrefixQuery is built by Qu...">PrefixQuery</a>)</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordflow">return</span> ((PrefixQuery)query).Prefix.Field;</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">if</span> (query is <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_phrase_query.html" title="A Query that matches documents containing a particular sequence of terms. A PhraseQuery is built by Q...">PhraseQuery</a>)</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; {</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; PhraseQuery pq = (<a class="code" href="_abstract_field_8cs.html#a945cd0e79343408e87508a19920e3941">PhraseQuery</a>)query;</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html" title="A Term represents a word from text. This is the unit of search. It is composed of two elements...">Term</a>[] terms = pq.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_phrase_query.html#a6c528be9ef94f3907e29430abc936b66" title="Returns the set of terms in this phrase. ">GetTerms</a>();</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">return</span> terms[0].<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html#a2ecfa7c0860798920d089654f34aa222" title="Returns the field of this term, an interned string. The field indicates the part of a document which ...">Field</a>;</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; }</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> ApplicationException(<span class="stringliteral">&quot;query \&quot;&quot;</span> + query + <span class="stringliteral">&quot;\&quot; must be flatten first.&quot;</span>);</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; }</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;<span class="comment"> * Save the set of terms in the queries to termSetMap.</span></div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;<span class="comment"> * </span></div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;<span class="comment"> * ex1) q=name:john</span></div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;<span class="comment"> * - fieldMatch==true</span></div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;<span class="comment"> * termSetMap=Map&lt;&quot;name&quot;,Set&lt;&quot;john&quot;&gt;&gt;</span></div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;<span class="comment"> * - fieldMatch==false</span></div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;<span class="comment"> * termSetMap=Map&lt;null,Set&lt;&quot;john&quot;&gt;&gt;</span></div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;<span class="comment"> * </span></div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;<span class="comment"> * ex2) q=name:john title:manager</span></div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;<span class="comment"> * - fieldMatch==true</span></div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;<span class="comment"> * termSetMap=Map&lt;&quot;name&quot;,Set&lt;&quot;john&quot;&gt;,</span></div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;<span class="comment"> * &quot;title&quot;,Set&lt;&quot;manager&quot;&gt;&gt;</span></div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;<span class="comment"> * - fieldMatch==false</span></div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;<span class="comment"> * termSetMap=Map&lt;null,Set&lt;&quot;john&quot;,&quot;manager&quot;&gt;&gt;</span></div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="comment"> * </span></div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;<span class="comment"> * ex3) q=name:&quot;john lennon&quot;</span></div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;<span class="comment"> * - fieldMatch==true</span></div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;<span class="comment"> * termSetMap=Map&lt;&quot;name&quot;,Set&lt;&quot;john&quot;,&quot;lennon&quot;&gt;&gt;</span></div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;<span class="comment"> * - fieldMatch==false</span></div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;<span class="comment"> * termSetMap=Map&lt;null,Set&lt;&quot;john&quot;,&quot;lennon&quot;&gt;&gt;</span></div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordtype">void</span> SaveTerms(Dictionary&lt;Query, Query&gt; flatQueries)</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; {</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">foreach</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> query <span class="keywordflow">in</span> flatQueries.Keys)</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; {</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; List&lt;String&gt; termSet = GetTermSet(query);</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">if</span> (query is TermQuery)</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; termSet.Add(((TermQuery)query).<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html" title="A Term represents a word from text. This is the unit of search. It is composed of two elements...">Term</a>.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html#afe11c449ea7db39725c494b2c2574847" title="Returns the text of this term. In the case of words, this is simply the text of the word...">Text</a>);</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (query is PrefixQuery)</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; termSet.Add(((PrefixQuery)query).Prefix.Text + <span class="stringliteral">&quot;*&quot;</span>);</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (query is PhraseQuery)</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="keywordflow">foreach</span> (<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html" title="A Term represents a word from text. This is the unit of search. It is composed of two elements...">Term</a> term <span class="keywordflow">in</span> ((PhraseQuery)query).GetTerms())</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; termSet.Add(term.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html#afe11c449ea7db39725c494b2c2574847" title="Returns the text of this term. In the case of words, this is simply the text of the word...">Text</a>);</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; }</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> System.ApplicationException(<span class="stringliteral">&quot;query \&quot;&quot;</span> + query.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_phrase_query.html#a377e77b10b4c6b2303c62bbd3ad54e70" title="Prints a user-readable version of this query. ">ToString</a>() + <span class="stringliteral">&quot;\&quot; must be flatten first.&quot;</span>);</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; }</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; }</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keyword">private</span> List&lt;String&gt; GetTermSet(<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_query.html" title="The abstract base class for queries. Instantiable subclasses are: TermQuery MultiTermQuery BooleanQ...">Query</a> query)</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; {</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; String key = GetKey(query);</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; List&lt;String&gt; <span class="keyword">set</span> = termSetMap.Get(key);</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">set</span> == null)</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; {</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keyword">set</span> = <span class="keyword">new</span> List&lt;String&gt;();</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; termSetMap.Put(key, <span class="keyword">set</span>);</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; }</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">return</span> <span class="keyword">set</span>;</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; }</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;</div>
<div class="line"><a name="l00309"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query.html#ac273e269c02b1607545258dd6f5f374f"> 309</a></span>&#160; <span class="keyword">public</span> List&lt;String&gt; getTermSet(String field)</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; {</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">return</span> termSetMap.Get(fieldMatch ? field : null);</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; }</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;<span class="comment"> * </span></div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;<span class="comment"> * &lt;param name=&quot;fieldName&quot;&gt;&lt;/param&gt;</span></div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;<span class="comment"> * &lt;param name=&quot;term&quot;&gt;&lt;/param&gt;</span></div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;<span class="comment"> * &lt;returns&gt;QueryPhraseMap&lt;/returns&gt;</span></div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00320"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query.html#a27dfb3e7b9e73753763aab3ca2ae1443"> 320</a></span>&#160; <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html">QueryPhraseMap</a> GetFieldTermMap(String fieldName, String term)</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; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html">QueryPhraseMap</a> rootMap = GetRootMap(fieldName);</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">return</span> rootMap == null ? null : RetrieveQueryFromSubMap(rootMap, term);</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;</div>
<div class="line"><a name="l00326"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query.html#aa705fe169fe611f0acbc2e41ce1da15b"> 326</a></span>&#160; <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html">QueryPhraseMap</a> RetrieveQueryFromSubMap(<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html">QueryPhraseMap</a> rootMap, String term)</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="keywordflow">foreach</span> (var kvp <span class="keywordflow">in</span> rootMap.subMap)</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; {</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordflow">if</span> (StringUtils.TermStringMatch(kvp.Key, term))</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordflow">return</span> kvp.Value;</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; }</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">return</span> null;</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;</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="comment">/*</span></div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;<span class="comment"> * </span></div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;<span class="comment"> * &lt;param name=&quot;fieldName&quot;&gt;&lt;/param&gt;</span></div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;<span class="comment"> * &lt;param name=&quot;phraseCandidate&quot;&gt;&lt;/param&gt;</span></div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;<span class="comment"> * &lt;returns&gt;QueryPhraseMap&lt;/returns&gt;</span></div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00342"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query.html#a654723367abf80b16f0b9a8f28d4b0e7"> 342</a></span>&#160; <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html">QueryPhraseMap</a> SearchPhrase(String fieldName, List&lt;TermInfo&gt; phraseCandidate)</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; {</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html">QueryPhraseMap</a> root = GetRootMap(fieldName);</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordflow">if</span> (root == null) <span class="keywordflow">return</span> null;</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">return</span> root.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html#a3e7e7ef1296022880d7ccc7862b5f921">SearchPhrase</a>(phraseCandidate);</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;</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keyword">private</span> <a class="code" href="_field_phrase_list_8cs.html#a0b0a66a2fa1e2429ddbb8c0a90b7ac4a">QueryPhraseMap</a> GetRootMap(String fieldName)</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; {</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">return</span> rootMaps.Get(fieldMatch ? fieldName : null);</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; }</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; <span class="keywordtype">int</span> NextTermOrPhraseNumber()</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; <span class="keywordflow">return</span> termOrPhraseNumber++;</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"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html"> 359</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_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html">QueryPhraseMap</a></div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; {</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;</div>
<div class="line"><a name="l00362"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html#a53056cc7d940c96ee92e77b7051a6864"> 362</a></span>&#160; <span class="keyword">public</span> <span class="keywordtype">bool</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html#a53056cc7d940c96ee92e77b7051a6864">terminal</a>;</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keywordtype">int</span> slop; <span class="comment">// valid if terminal == true and phraseHighlight == true</span></div>
<div class="line"><a name="l00364"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html#a5e6561ed6e9d0af7145aee8515dfd1fb"> 364</a></span>&#160; <span class="keyword">public</span> <span class="keywordtype">float</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html#a5e6561ed6e9d0af7145aee8515dfd1fb">boost</a>; <span class="comment">// valid if terminal == true</span></div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="keywordtype">int</span> termOrPhraseNumber; <span class="comment">// valid if terminal == true</span></div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query.html">FieldQuery</a> fieldQuery;</div>
<div class="line"><a name="l00367"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html#a01d34f16fdee180455973c23252b2e59"> 367</a></span>&#160; <span class="keyword">public</span> HashMap&lt;String, QueryPhraseMap&gt; subMap = <span class="keyword">new</span> HashMap&lt;String, QueryPhraseMap&gt;();</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;</div>
<div class="line"><a name="l00369"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html#af09f2f1eb0285e7dc186b960d33fb6c2"> 369</a></span>&#160; <span class="keyword">public</span> <a class="code" href="_field_phrase_list_8cs.html#a0b0a66a2fa1e2429ddbb8c0a90b7ac4a">QueryPhraseMap</a>(<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query.html">FieldQuery</a> fieldQuery)</div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; {</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; this.fieldQuery = fieldQuery;</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;</div>
<div class="line"><a name="l00374"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html#afa86a06623a10a33582e807bd68d26cc"> 374</a></span>&#160; <span class="keyword">public</span> <span class="keywordtype">void</span> AddTerm(String termText, <span class="keywordtype">float</span> boost)</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; {</div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html">QueryPhraseMap</a> map = GetOrNewMap(subMap, termText);</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; map.MarkTerminal(boost);</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; }</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="keyword">private</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html">QueryPhraseMap</a> GetOrNewMap(HashMap&lt;String, QueryPhraseMap&gt; subMap, String term)</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; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html">QueryPhraseMap</a> map = subMap.Get(term);</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">if</span> (map == null)</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; map = <span class="keyword">new</span> <a class="code" href="_field_phrase_list_8cs.html#a0b0a66a2fa1e2429ddbb8c0a90b7ac4a">QueryPhraseMap</a>(fieldQuery);</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; subMap.Put(term, map);</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; }</div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">return</span> map;</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;</div>
<div class="line"><a name="l00391"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html#a3caff12eb5091d3c9ecc5e049cc0e6d4"> 391</a></span>&#160; <span class="keyword">public</span> <span class="keywordtype">void</span> Add(<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_query.html" title="The abstract base class for queries. Instantiable subclasses are: TermQuery MultiTermQuery BooleanQ...">Query</a> query)</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; <span class="keywordflow">if</span> (query is TermQuery)</div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; {</div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; AddTerm(((TermQuery)query).<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html" title="A Term represents a word from text. This is the unit of search. It is composed of two elements...">Term</a>.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html#afe11c449ea7db39725c494b2c2574847" title="Returns the text of this term. In the case of words, this is simply the text of the word...">Text</a>, query.<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="l00396"></a><span class="lineno"> 396</span>&#160; }</div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (query is PrefixQuery)</div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; {</div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; AddTerm(((PrefixQuery)query).Prefix.Text + <span class="stringliteral">&quot;*&quot;</span>, query.<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="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">else</span> <span class="keywordflow">if</span> (query is PhraseQuery)</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; PhraseQuery pq = (<a class="code" href="_abstract_field_8cs.html#a945cd0e79343408e87508a19920e3941">PhraseQuery</a>)query;</div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html" title="A Term represents a word from text. This is the unit of search. It is composed of two elements...">Term</a>[] terms = pq.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_phrase_query.html#a6c528be9ef94f3907e29430abc936b66" title="Returns the set of terms in this phrase. ">GetTerms</a>();</div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; HashMap&lt;String, QueryPhraseMap&gt; map = subMap;</div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html">QueryPhraseMap</a> qpm = null;</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keywordflow">foreach</span> (<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html" title="A Term represents a word from text. This is the unit of search. It is composed of two elements...">Term</a> term <span class="keywordflow">in</span> terms)</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; qpm = GetOrNewMap(map, term.<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term.html#afe11c449ea7db39725c494b2c2574847" title="Returns the text of this term. In the case of words, this is simply the text of the word...">Text</a>);</div>
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; map = qpm.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html#a01d34f16fdee180455973c23252b2e59">subMap</a>;</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; qpm.MarkTerminal(pq.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_phrase_query.html#ab0b42bf7038acb8464c7a31de6c1fb22" title="Sets the number of other words permitted between words in query phrase. If zero, then this is an exac...">Slop</a>, pq.<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="l00413"></a><span class="lineno"> 413</span>&#160; }</div>
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordflow">throw</span> <span class="keyword">new</span> ApplicationException(<span class="stringliteral">&quot;query \&quot;&quot;</span> + query.<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>() + <span class="stringliteral">&quot;\&quot; must be flatten first.&quot;</span>);</div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; }</div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;</div>
<div class="line"><a name="l00418"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html#a41c6a6c6eb0db7908263c5abcced389c"> 418</a></span>&#160; <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html">QueryPhraseMap</a> GetTermMap(String term)</div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; {</div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keywordflow">return</span> subMap.Get(term);</div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; }</div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;</div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keyword">private</span> <span class="keywordtype">void</span> MarkTerminal(<span class="keywordtype">float</span> boost)</div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; {</div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; MarkTerminal(0, boost);</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;</div>
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keyword">private</span> <span class="keywordtype">void</span> MarkTerminal(<span class="keywordtype">int</span> slop, <span class="keywordtype">float</span> boost)</div>
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; {</div>
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; this.terminal = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; this.slop = slop;</div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; this.boost = boost;</div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; this.termOrPhraseNumber = fieldQuery.NextTermOrPhraseNumber();</div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; }</div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;</div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keyword">public</span> <span class="keywordtype">bool</span> IsTerminal</div>
<div class="line"><a name="l00437"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html#a08c22675438d26c4ee81c571719b30dd"> 437</a></span>&#160; {</div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> terminal; }</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;</div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keyword">public</span> <span class="keywordtype">int</span> Slop</div>
<div class="line"><a name="l00442"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html#ac4df22240216075bcc420abcc79795a2"> 442</a></span>&#160; {</div>
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> slop; }</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;</div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keyword">public</span> <span class="keywordtype">float</span> Boost</div>
<div class="line"><a name="l00447"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html#a04247e86fdf748130215a862a0016853"> 447</a></span>&#160; {</div>
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> boost; }</div>
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; }</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; <span class="keyword">public</span> <span class="keywordtype">int</span> TermOrPhraseNumber</div>
<div class="line"><a name="l00452"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html#a29aedf730ecd70dfc40003c50795c59b"> 452</a></span>&#160; {</div>
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keyword">get</span> { <span class="keywordflow">return</span> termOrPhraseNumber; }</div>
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; }</div>
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;</div>
<div class="line"><a name="l00456"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html#a3e7e7ef1296022880d7ccc7862b5f921"> 456</a></span>&#160; <span class="keyword">public</span> <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html">QueryPhraseMap</a> SearchPhrase(List&lt;TermInfo&gt; phraseCandidate)</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; <a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html">QueryPhraseMap</a> currMap = <span class="keyword">this</span>;</div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="keywordflow">foreach</span> (<a class="code" href="class_lucene_1_1_net_1_1_index_1_1_term_info.html" title="A TermInfo is the record of information stored for a term.">TermInfo</a> ti <span class="keywordflow">in</span> phraseCandidate)</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; currMap = currMap.<a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html#a01d34f16fdee180455973c23252b2e59">subMap</a>[ti.Text];</div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keywordflow">if</span> (currMap == null) <span class="keywordflow">return</span> null;</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; <span class="keywordflow">return</span> currMap.IsValidTermOrPhrase(phraseCandidate) ? currMap : null;</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;</div>
<div class="line"><a name="l00467"></a><span class="lineno"><a class="code" href="class_lucene_1_1_net_1_1_search_1_1_vectorhighlight_1_1_field_query_1_1_query_phrase_map.html#a3ab3f5f3a2c15e0636261ff5e750eb56"> 467</a></span>&#160; <span class="keyword">public</span> <span class="keywordtype">bool</span> IsValidTermOrPhrase(List&lt;TermInfo&gt; phraseCandidate)</div>
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; {</div>
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="comment">// check terminal</span></div>
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">if</span> (!terminal) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;</div>
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="comment">// if the candidate is a term, it is valid</span></div>
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="keywordflow">if</span> (phraseCandidate.Count == 1) <span class="keywordflow">return</span> <span class="keyword">true</span>;</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="comment">// else check whether the candidate is valid phrase</span></div>
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="comment">// compare position-gaps between terms to slop</span></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="keywordtype">int</span> pos = phraseCandidate[0].Position;</div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 1; i &lt; phraseCandidate.Count; i++)</div>
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; {</div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keywordtype">int</span> nextPos = phraseCandidate[i].Position;</div>
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="keywordflow">if</span> (Math.Abs(nextPos - pos - 1) &gt; slop) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; pos = nextPos;</div>
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; }</div>
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; }</div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; }</div>
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; }</div>
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;}</div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Jan 3 2013 02:12:43 for Lucene.Net by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.3
</small></address>
</body>
</html>