blob: fc560c247fbd22e3afd245d7d8f79c8ed1fa5c30 [file] [log] [blame]
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `/root/.cargo/git/checkouts/tantivy-65d0bbbddbbd5d02/433372d/src/query/term_query/mod.rs`."><meta name="keywords" content="rust, rustlang, rust-lang"><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../../../../normalize.css"><link rel="stylesheet" href="../../../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../../../../ayu.css" disabled><link rel="stylesheet" href="../../../../dark.css" disabled><link rel="stylesheet" href="../../../../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../../../../storage.js"></script><script defer src="../../../../source-script.js"></script><script defer src="../../../../source-files.js"></script><script defer src="../../../../main.js"></script><noscript><link rel="stylesheet" href="../../../../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../../../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../../../../favicon.svg"></head><body class="rustdoc source"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><a class="sidebar-logo" href="../../../../tantivy/index.html"><div class="logo-container">
<img src="http://fulmicoton.com/tantivy-logo/tantivy-logo.png" alt="logo"></div></a></nav><main><div class="width-limiter"><nav class="sub"><a class="sub-logo-container" href="../../../../tantivy/index.html">
<img src="http://fulmicoton.com/tantivy-logo/tantivy-logo.png" alt="logo"></a><form class="search-form"><div class="search-container"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../wheel.svg"></a></div></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><pre class="src-line-numbers"><span id="1">1</span>
<span id="2">2</span>
<span id="3">3</span>
<span id="4">4</span>
<span id="5">5</span>
<span id="6">6</span>
<span id="7">7</span>
<span id="8">8</span>
<span id="9">9</span>
<span id="10">10</span>
<span id="11">11</span>
<span id="12">12</span>
<span id="13">13</span>
<span id="14">14</span>
<span id="15">15</span>
<span id="16">16</span>
<span id="17">17</span>
<span id="18">18</span>
<span id="19">19</span>
<span id="20">20</span>
<span id="21">21</span>
<span id="22">22</span>
<span id="23">23</span>
<span id="24">24</span>
<span id="25">25</span>
<span id="26">26</span>
<span id="27">27</span>
<span id="28">28</span>
<span id="29">29</span>
<span id="30">30</span>
<span id="31">31</span>
<span id="32">32</span>
<span id="33">33</span>
<span id="34">34</span>
<span id="35">35</span>
<span id="36">36</span>
<span id="37">37</span>
<span id="38">38</span>
<span id="39">39</span>
<span id="40">40</span>
<span id="41">41</span>
<span id="42">42</span>
<span id="43">43</span>
<span id="44">44</span>
<span id="45">45</span>
<span id="46">46</span>
<span id="47">47</span>
<span id="48">48</span>
<span id="49">49</span>
<span id="50">50</span>
<span id="51">51</span>
<span id="52">52</span>
<span id="53">53</span>
<span id="54">54</span>
<span id="55">55</span>
<span id="56">56</span>
<span id="57">57</span>
<span id="58">58</span>
<span id="59">59</span>
<span id="60">60</span>
<span id="61">61</span>
<span id="62">62</span>
<span id="63">63</span>
<span id="64">64</span>
<span id="65">65</span>
<span id="66">66</span>
<span id="67">67</span>
<span id="68">68</span>
<span id="69">69</span>
<span id="70">70</span>
<span id="71">71</span>
<span id="72">72</span>
<span id="73">73</span>
<span id="74">74</span>
<span id="75">75</span>
<span id="76">76</span>
<span id="77">77</span>
<span id="78">78</span>
<span id="79">79</span>
<span id="80">80</span>
<span id="81">81</span>
<span id="82">82</span>
<span id="83">83</span>
<span id="84">84</span>
<span id="85">85</span>
<span id="86">86</span>
<span id="87">87</span>
<span id="88">88</span>
<span id="89">89</span>
<span id="90">90</span>
<span id="91">91</span>
<span id="92">92</span>
<span id="93">93</span>
<span id="94">94</span>
<span id="95">95</span>
<span id="96">96</span>
<span id="97">97</span>
<span id="98">98</span>
<span id="99">99</span>
<span id="100">100</span>
<span id="101">101</span>
<span id="102">102</span>
<span id="103">103</span>
<span id="104">104</span>
<span id="105">105</span>
<span id="106">106</span>
<span id="107">107</span>
<span id="108">108</span>
<span id="109">109</span>
<span id="110">110</span>
<span id="111">111</span>
<span id="112">112</span>
<span id="113">113</span>
<span id="114">114</span>
<span id="115">115</span>
<span id="116">116</span>
<span id="117">117</span>
<span id="118">118</span>
<span id="119">119</span>
<span id="120">120</span>
<span id="121">121</span>
<span id="122">122</span>
<span id="123">123</span>
<span id="124">124</span>
<span id="125">125</span>
<span id="126">126</span>
<span id="127">127</span>
<span id="128">128</span>
<span id="129">129</span>
<span id="130">130</span>
<span id="131">131</span>
<span id="132">132</span>
<span id="133">133</span>
<span id="134">134</span>
<span id="135">135</span>
<span id="136">136</span>
<span id="137">137</span>
<span id="138">138</span>
<span id="139">139</span>
<span id="140">140</span>
<span id="141">141</span>
<span id="142">142</span>
<span id="143">143</span>
<span id="144">144</span>
<span id="145">145</span>
<span id="146">146</span>
<span id="147">147</span>
<span id="148">148</span>
<span id="149">149</span>
<span id="150">150</span>
<span id="151">151</span>
<span id="152">152</span>
<span id="153">153</span>
<span id="154">154</span>
<span id="155">155</span>
<span id="156">156</span>
<span id="157">157</span>
<span id="158">158</span>
<span id="159">159</span>
<span id="160">160</span>
<span id="161">161</span>
<span id="162">162</span>
<span id="163">163</span>
<span id="164">164</span>
<span id="165">165</span>
<span id="166">166</span>
<span id="167">167</span>
<span id="168">168</span>
<span id="169">169</span>
<span id="170">170</span>
<span id="171">171</span>
<span id="172">172</span>
<span id="173">173</span>
<span id="174">174</span>
<span id="175">175</span>
<span id="176">176</span>
<span id="177">177</span>
<span id="178">178</span>
<span id="179">179</span>
<span id="180">180</span>
<span id="181">181</span>
<span id="182">182</span>
<span id="183">183</span>
<span id="184">184</span>
<span id="185">185</span>
<span id="186">186</span>
<span id="187">187</span>
<span id="188">188</span>
<span id="189">189</span>
<span id="190">190</span>
<span id="191">191</span>
<span id="192">192</span>
<span id="193">193</span>
<span id="194">194</span>
<span id="195">195</span>
<span id="196">196</span>
<span id="197">197</span>
<span id="198">198</span>
<span id="199">199</span>
<span id="200">200</span>
<span id="201">201</span>
<span id="202">202</span>
<span id="203">203</span>
<span id="204">204</span>
<span id="205">205</span>
<span id="206">206</span>
<span id="207">207</span>
<span id="208">208</span>
<span id="209">209</span>
<span id="210">210</span>
<span id="211">211</span>
<span id="212">212</span>
<span id="213">213</span>
<span id="214">214</span>
<span id="215">215</span>
<span id="216">216</span>
</pre><pre class="rust"><code><span class="kw">mod </span>term_query;
<span class="kw">mod </span>term_scorer;
<span class="kw">mod </span>term_weight;
<span class="kw">pub use </span><span class="self">self</span>::term_query::TermQuery;
<span class="kw">pub use </span><span class="self">self</span>::term_scorer::TermScorer;
<span class="kw">pub use </span><span class="self">self</span>::term_weight::TermWeight;
<span class="attribute">#[cfg(test)]
</span><span class="kw">mod </span>tests {
<span class="kw">use </span><span class="kw">crate</span>::collector::TopDocs;
<span class="kw">use </span><span class="kw">crate</span>::docset::DocSet;
<span class="kw">use </span><span class="kw">crate</span>::postings::compression::COMPRESSION_BLOCK_SIZE;
<span class="kw">use </span><span class="kw">crate</span>::query::{EnableScoring, Query, QueryParser, Scorer, TermQuery};
<span class="kw">use </span><span class="kw">crate</span>::schema::{Field, IndexRecordOption, Schema, STRING, TEXT};
<span class="kw">use crate</span>::{assert_nearly_equals, DocAddress, Index, Term, TERMINATED};
<span class="attribute">#[test]
</span><span class="kw">pub fn </span>test_term_query_no_freq() -&gt; <span class="kw">crate</span>::Result&lt;()&gt; {
<span class="kw">let </span><span class="kw-2">mut </span>schema_builder = Schema::builder();
<span class="kw">let </span>text_field = schema_builder.add_text_field(<span class="string">&quot;text&quot;</span>, STRING);
<span class="kw">let </span>schema = schema_builder.build();
<span class="kw">let </span>index = Index::create_in_ram(schema);
{
<span class="comment">// writing the segment
</span><span class="kw">let </span><span class="kw-2">mut </span>index_writer = index.writer_for_tests()<span class="question-mark">?</span>;
<span class="kw">let </span>doc = <span class="macro">doc!</span>(text_field =&gt; <span class="string">&quot;a&quot;</span>);
index_writer.add_document(doc)<span class="question-mark">?</span>;
index_writer.commit()<span class="question-mark">?</span>;
}
<span class="kw">let </span>searcher = index.reader()<span class="question-mark">?</span>.searcher();
<span class="kw">let </span>term_query = TermQuery::new(
Term::from_field_text(text_field, <span class="string">&quot;a&quot;</span>),
IndexRecordOption::Basic,
);
<span class="kw">let </span>term_weight = term_query.weight(EnableScoring::Enabled(<span class="kw-2">&amp;</span>searcher))<span class="question-mark">?</span>;
<span class="kw">let </span>segment_reader = searcher.segment_reader(<span class="number">0</span>);
<span class="kw">let </span><span class="kw-2">mut </span>term_scorer = term_weight.scorer(segment_reader, <span class="number">1.0</span>)<span class="question-mark">?</span>;
<span class="macro">assert_eq!</span>(term_scorer.doc(), <span class="number">0</span>);
<span class="macro">assert_nearly_equals!</span>(term_scorer.score(), <span class="number">0.28768212</span>);
<span class="prelude-val">Ok</span>(())
}
<span class="attribute">#[test]
</span><span class="kw">pub fn </span>test_term_query_multiple_of_block_len() -&gt; <span class="kw">crate</span>::Result&lt;()&gt; {
<span class="kw">let </span><span class="kw-2">mut </span>schema_builder = Schema::builder();
<span class="kw">let </span>text_field = schema_builder.add_text_field(<span class="string">&quot;text&quot;</span>, STRING);
<span class="kw">let </span>schema = schema_builder.build();
<span class="kw">let </span>index = Index::create_in_ram(schema);
{
<span class="comment">// writing the segment
</span><span class="kw">let </span><span class="kw-2">mut </span>index_writer = index.writer_for_tests()<span class="question-mark">?</span>;
<span class="kw">for _ in </span><span class="number">0</span>..COMPRESSION_BLOCK_SIZE {
<span class="kw">let </span>doc = <span class="macro">doc!</span>(text_field =&gt; <span class="string">&quot;a&quot;</span>);
index_writer.add_document(doc)<span class="question-mark">?</span>;
}
index_writer.commit()<span class="question-mark">?</span>;
}
<span class="kw">let </span>searcher = index.reader()<span class="question-mark">?</span>.searcher();
<span class="kw">let </span>term_query = TermQuery::new(
Term::from_field_text(text_field, <span class="string">&quot;a&quot;</span>),
IndexRecordOption::Basic,
);
<span class="kw">let </span>term_weight = term_query.weight(EnableScoring::Enabled(<span class="kw-2">&amp;</span>searcher))<span class="question-mark">?</span>;
<span class="kw">let </span>segment_reader = searcher.segment_reader(<span class="number">0</span>);
<span class="kw">let </span><span class="kw-2">mut </span>term_scorer = term_weight.scorer(segment_reader, <span class="number">1.0</span>)<span class="question-mark">?</span>;
<span class="kw">for </span>i <span class="kw">in </span><span class="number">0u32</span>..COMPRESSION_BLOCK_SIZE <span class="kw">as </span>u32 {
<span class="macro">assert_eq!</span>(term_scorer.doc(), i);
<span class="kw">if </span>i == COMPRESSION_BLOCK_SIZE <span class="kw">as </span>u32 - <span class="number">1u32 </span>{
<span class="macro">assert_eq!</span>(term_scorer.advance(), TERMINATED);
} <span class="kw">else </span>{
<span class="macro">assert_eq!</span>(term_scorer.advance(), i + <span class="number">1</span>);
}
}
<span class="macro">assert_eq!</span>(term_scorer.doc(), TERMINATED);
<span class="prelude-val">Ok</span>(())
}
<span class="attribute">#[test]
</span><span class="kw">pub fn </span>test_term_weight() -&gt; <span class="kw">crate</span>::Result&lt;()&gt; {
<span class="kw">let </span><span class="kw-2">mut </span>schema_builder = Schema::builder();
<span class="kw">let </span>left_field = schema_builder.add_text_field(<span class="string">&quot;left&quot;</span>, TEXT);
<span class="kw">let </span>right_field = schema_builder.add_text_field(<span class="string">&quot;right&quot;</span>, TEXT);
<span class="kw">let </span>large_field = schema_builder.add_text_field(<span class="string">&quot;large&quot;</span>, TEXT);
<span class="kw">let </span>schema = schema_builder.build();
<span class="kw">let </span>index = Index::create_in_ram(schema);
{
<span class="kw">let </span><span class="kw-2">mut </span>index_writer = index.writer_for_tests()<span class="question-mark">?</span>;
index_writer.add_document(<span class="macro">doc!</span>(
left_field =&gt; <span class="string">&quot;left1 left2 left2 left2f2 left2f2 left3 abcde abcde abcde abcde abcde abcde abcde abcde abcde abcewde abcde abcde&quot;</span>,
right_field =&gt; <span class="string">&quot;right1 right2&quot;</span>,
large_field =&gt; <span class="string">&quot;large0 large1 large2 large3 large4 large5 large6 large7 large8 large9 large10 large11 large12 large13 large14 large15 large16 large17 large18 large19 large20 large21 large22 large23 large24 large25 large26 large27 large28 large29 large30 large31 large32 large33 large34 large35 large36 large37 large38 large39 large40 large41 large42 large43 large44 large45 large46 large47 large48 large49 large50 large51 large52 large53 large54 large55 large56 large57 large58 large59 large60 large61 large62 large63 large64 large65 large66 large67 large68 large69 large70 large71 large72 large73 large74 large75 large76 large77 large78 large79 large80 large81 large82 large83 large84 large85 large86 large87 large88 large89 large90 large91 large92 large93 large94 large95 large96 large97 large98 large99 large100 large101 large102 large103 large104 large105 large106 large107 large108 large109 large110 large111 large112 large113 large114 large115 large116 large117 large118 large119 large120 large121 large122 large123 large124 large125 large126 large127 large128 large129 large130 large131 large132 large133 large134 large135 large136 large137 large138 large139 large140 large141 large142 large143 large144 large145 large146 large147 large148 large149 large150 large151 large152 large153 large154 large155 large156 large157 large158 large159 large160 large161 large162 large163 large164 large165 large166 large167 large168 large169 large170 large171 large172 large173 large174 large175 large176 large177 large178 large179 large180 large181 large182 large183 large184 large185 large186 large187 large188 large189 large190 large191 large192 large193 large194 large195 large196 large197 large198 large199 large200 large201 large202 large203 large204 large205 large206 large207 large208 large209 large210 large211 large212 large213 large214 large215 large216 large217 large218 large219 large220 large221 large222 large223 large224 large225 large226 large227 large228 large229 large230 large231 large232 large233 large234 large235 large236 large237 large238 large239 large240 large241 large242 large243 large244 large245 large246 large247 large248 large249 large250 large251 large252 large253 large254 large255 large256 large257 large258 large259 large260 large261 large262 large263 large264 large265 large266 large267 large268 large269 large270 large271 large272 large273 large274 large275 large276 large277 large278 large279 large280 large281 large282 large283 large284 large285 large286&quot;
</span>))<span class="question-mark">?</span>;
index_writer.add_document(<span class="macro">doc!</span>(left_field =&gt; <span class="string">&quot;left4 left1&quot;</span>))<span class="question-mark">?</span>;
index_writer.commit()<span class="question-mark">?</span>;
}
<span class="kw">let </span>searcher = index.reader()<span class="question-mark">?</span>.searcher();
{
<span class="kw">let </span>term = Term::from_field_text(left_field, <span class="string">&quot;left2&quot;</span>);
<span class="kw">let </span>term_query = TermQuery::new(term, IndexRecordOption::WithFreqs);
<span class="kw">let </span>topdocs = searcher.search(<span class="kw-2">&amp;</span>term_query, <span class="kw-2">&amp;</span>TopDocs::with_limit(<span class="number">2</span>))<span class="question-mark">?</span>;
<span class="macro">assert_eq!</span>(topdocs.len(), <span class="number">1</span>);
<span class="kw">let </span>(score, <span class="kw">_</span>) = topdocs[<span class="number">0</span>];
<span class="macro">assert_nearly_equals!</span>(<span class="number">0.77802235</span>, score);
}
{
<span class="kw">let </span>term = Term::from_field_text(left_field, <span class="string">&quot;left1&quot;</span>);
<span class="kw">let </span>term_query = TermQuery::new(term, IndexRecordOption::WithFreqs);
<span class="kw">let </span>top_docs = searcher.search(<span class="kw-2">&amp;</span>term_query, <span class="kw-2">&amp;</span>TopDocs::with_limit(<span class="number">2</span>))<span class="question-mark">?</span>;
<span class="macro">assert_eq!</span>(top_docs.len(), <span class="number">2</span>);
<span class="kw">let </span>(score1, <span class="kw">_</span>) = top_docs[<span class="number">0</span>];
<span class="macro">assert_nearly_equals!</span>(<span class="number">0.27101856</span>, score1);
<span class="kw">let </span>(score2, <span class="kw">_</span>) = top_docs[<span class="number">1</span>];
<span class="macro">assert_nearly_equals!</span>(<span class="number">0.13736556</span>, score2);
}
{
<span class="kw">let </span>query_parser = QueryParser::for_index(<span class="kw-2">&amp;</span>index, Vec::new());
<span class="kw">let </span>query = query_parser.parse_query(<span class="string">&quot;left:left2 left:left1&quot;</span>)<span class="question-mark">?</span>;
<span class="kw">let </span>top_docs = searcher.search(<span class="kw-2">&amp;</span>query, <span class="kw-2">&amp;</span>TopDocs::with_limit(<span class="number">2</span>))<span class="question-mark">?</span>;
<span class="macro">assert_eq!</span>(top_docs.len(), <span class="number">2</span>);
<span class="kw">let </span>(score1, <span class="kw">_</span>) = top_docs[<span class="number">0</span>];
<span class="macro">assert_nearly_equals!</span>(<span class="number">0.9153879</span>, score1);
<span class="kw">let </span>(score2, <span class="kw">_</span>) = top_docs[<span class="number">1</span>];
<span class="macro">assert_nearly_equals!</span>(<span class="number">0.27101856</span>, score2);
}
<span class="prelude-val">Ok</span>(())
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>test_term_query_count_when_there_are_deletes() -&gt; <span class="kw">crate</span>::Result&lt;()&gt; {
<span class="kw">let </span><span class="kw-2">mut </span>schema_builder = Schema::builder();
<span class="kw">let </span>text_field = schema_builder.add_text_field(<span class="string">&quot;text&quot;</span>, TEXT);
<span class="kw">let </span>schema = schema_builder.build();
<span class="kw">let </span>index = Index::create_in_ram(schema);
<span class="kw">let </span><span class="kw-2">mut </span>index_writer = index.writer_for_tests()<span class="question-mark">?</span>;
index_writer.add_document(<span class="macro">doc!</span>(text_field=&gt;<span class="string">&quot;a b&quot;</span>))<span class="question-mark">?</span>;
index_writer.add_document(<span class="macro">doc!</span>(text_field=&gt;<span class="string">&quot;a c&quot;</span>))<span class="question-mark">?</span>;
index_writer.delete_term(Term::from_field_text(text_field, <span class="string">&quot;b&quot;</span>));
index_writer.commit()<span class="question-mark">?</span>;
<span class="kw">let </span>term_a = Term::from_field_text(text_field, <span class="string">&quot;a&quot;</span>);
<span class="kw">let </span>term_query = TermQuery::new(term_a, IndexRecordOption::Basic);
<span class="kw">let </span>reader = index.reader()<span class="question-mark">?</span>;
<span class="macro">assert_eq!</span>(term_query.count(<span class="kw-2">&amp;</span>reader.searcher())<span class="question-mark">?</span>, <span class="number">1</span>);
<span class="prelude-val">Ok</span>(())
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>test_term_query_simple_seek() -&gt; <span class="kw">crate</span>::Result&lt;()&gt; {
<span class="kw">let </span><span class="kw-2">mut </span>schema_builder = Schema::builder();
<span class="kw">let </span>text_field = schema_builder.add_text_field(<span class="string">&quot;text&quot;</span>, TEXT);
<span class="kw">let </span>schema = schema_builder.build();
<span class="kw">let </span>index = Index::create_in_ram(schema);
<span class="kw">let </span><span class="kw-2">mut </span>index_writer = index.writer_for_tests()<span class="question-mark">?</span>;
index_writer.add_document(<span class="macro">doc!</span>(text_field=&gt;<span class="string">&quot;a&quot;</span>))<span class="question-mark">?</span>;
index_writer.add_document(<span class="macro">doc!</span>(text_field=&gt;<span class="string">&quot;a&quot;</span>))<span class="question-mark">?</span>;
index_writer.commit()<span class="question-mark">?</span>;
<span class="kw">let </span>term_a = Term::from_field_text(text_field, <span class="string">&quot;a&quot;</span>);
<span class="kw">let </span>term_query = TermQuery::new(term_a, IndexRecordOption::Basic);
<span class="kw">let </span>searcher = index.reader()<span class="question-mark">?</span>.searcher();
<span class="kw">let </span>term_weight = term_query.weight(EnableScoring::Disabled(searcher.schema()))<span class="question-mark">?</span>;
<span class="kw">let </span><span class="kw-2">mut </span>term_scorer = term_weight.scorer(searcher.segment_reader(<span class="number">0u32</span>), <span class="number">1.0</span>)<span class="question-mark">?</span>;
<span class="macro">assert_eq!</span>(term_scorer.doc(), <span class="number">0u32</span>);
term_scorer.seek(<span class="number">1u32</span>);
<span class="macro">assert_eq!</span>(term_scorer.doc(), <span class="number">1u32</span>);
<span class="prelude-val">Ok</span>(())
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>test_term_query_debug() {
<span class="kw">let </span>term_query = TermQuery::new(
Term::from_field_text(Field::from_field_id(<span class="number">1</span>), <span class="string">&quot;hello&quot;</span>),
IndexRecordOption::WithFreqs,
);
<span class="macro">assert_eq!</span>(
<span class="macro">format!</span>(<span class="string">&quot;{:?}&quot;</span>, term_query),
<span class="string">r#&quot;TermQuery(Term(type=Str, field=1, &quot;hello&quot;))&quot;#
</span>);
}
<span class="attribute">#[test]
</span><span class="kw">fn </span>test_term_query_explain() -&gt; <span class="kw">crate</span>::Result&lt;()&gt; {
<span class="kw">let </span><span class="kw-2">mut </span>schema_builder = Schema::builder();
<span class="kw">let </span>text_field = schema_builder.add_text_field(<span class="string">&quot;text&quot;</span>, TEXT);
<span class="kw">let </span>schema = schema_builder.build();
<span class="kw">let </span>index = Index::create_in_ram(schema);
<span class="kw">let </span><span class="kw-2">mut </span>index_writer = index.writer_for_tests()<span class="question-mark">?</span>;
index_writer.add_document(<span class="macro">doc!</span>(text_field=&gt;<span class="string">&quot;b&quot;</span>))<span class="question-mark">?</span>;
index_writer.add_document(<span class="macro">doc!</span>(text_field=&gt;<span class="string">&quot;a&quot;</span>))<span class="question-mark">?</span>;
index_writer.add_document(<span class="macro">doc!</span>(text_field=&gt;<span class="string">&quot;a&quot;</span>))<span class="question-mark">?</span>;
index_writer.add_document(<span class="macro">doc!</span>(text_field=&gt;<span class="string">&quot;b&quot;</span>))<span class="question-mark">?</span>;
index_writer.commit()<span class="question-mark">?</span>;
<span class="kw">let </span>term_a = Term::from_field_text(text_field, <span class="string">&quot;a&quot;</span>);
<span class="kw">let </span>term_query = TermQuery::new(term_a, IndexRecordOption::Basic);
<span class="kw">let </span>searcher = index.reader()<span class="question-mark">?</span>.searcher();
{
<span class="kw">let </span>explanation = term_query.explain(<span class="kw-2">&amp;</span>searcher, DocAddress::new(<span class="number">0u32</span>, <span class="number">1u32</span>))<span class="question-mark">?</span>;
<span class="macro">assert_nearly_equals!</span>(explanation.value(), std::f32::consts::LN_2);
}
{
<span class="kw">let </span>explanation_err = term_query.explain(<span class="kw-2">&amp;</span>searcher, DocAddress::new(<span class="number">0u32</span>, <span class="number">0u32</span>));
<span class="macro">assert!</span>(<span class="macro">matches!</span>(
explanation_err,
<span class="prelude-val">Err</span>(<span class="kw">crate</span>::TantivyError::InvalidArgument(_msg))
));
}
{
<span class="kw">let </span>explanation_err = term_query.explain(<span class="kw-2">&amp;</span>searcher, DocAddress::new(<span class="number">0u32</span>, <span class="number">3u32</span>));
<span class="macro">assert!</span>(<span class="macro">matches!</span>(
explanation_err,
<span class="prelude-val">Err</span>(<span class="kw">crate</span>::TantivyError::InvalidArgument(_msg))
));
}
<span class="prelude-val">Ok</span>(())
}
}
</code></pre></div>
</section></div></main><div id="rustdoc-vars" data-root-path="../../../../" data-current-crate="tantivy" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.0-nightly (5c8bff74b 2022-10-21)" ></div></body></html>