<div dir="ltr">Hello,<br><pre style class=""><code><span class="">include</span><span class=""> </span><span class=""><iostream></span><span class="">
</span><span class="">#include</span><span class=""> </span><span class=""><string></span><span class="">
</span><span class="">#include</span><span class=""> </span><span class=""><xapian.h></span><span class="">
</span><span class="">struct</span><span class=""> document</span><span class="">{</span><span class="">
std</span><span class="">::</span><span class="">string title</span><span class="">;</span><span class="">
std</span><span class="">::</span><span class="">string content</span><span class="">;</span><span class="">
std</span><span class="">::</span><span class="">string url</span><span class="">;</span><span class="">
</span><span class="">};</span><span class="">
</span><span class="">void</span><span class=""> indexData</span><span class="">(</span><span class="">document d</span><span class="">)</span><span class=""> </span><span class="">{</span><span class="">
</span><span class="">try</span><span class=""> </span><span class="">{</span><span class="">
</span><span class="">Xapian</span><span class="">::</span><span class="">WritableDatabase</span><span class=""> db</span><span class="">(</span><span class="">"/Users/ramesh/Desktop/xapian"</span><span class="">,</span><span class=""> </span><span class="">Xapian</span><span class="">::</span><span class="">DB_CREATE_OR_OPEN</span><span class="">);</span><span class="">
</span><span class="">Xapian</span><span class="">::</span><span class="">TermGenerator</span><span class=""> indexer</span><span class="">;</span><span class="">
</span><span class="">Xapian</span><span class="">::</span><span class="">Stem</span><span class=""> stemmer</span><span class="">(</span><span class="">"english"</span><span class="">);</span><span class="">
indexer</span><span class="">.</span><span class="">set_stemmer</span><span class="">(</span><span class="">stemmer</span><span class="">);</span><span class="">
</span><span class="">Xapian</span><span class="">::</span><span class="">Document</span><span class=""> doc</span><span class="">;</span><span class="">
doc</span><span class="">.</span><span class="">set_data</span><span class="">(</span><span class="">d</span><span class="">.</span><span class="">title</span><span class="">);</span><span class="">
indexer</span><span class="">.</span><span class="">set_document</span><span class="">(</span><span class="">doc</span><span class="">);</span><span class="">
indexer</span><span class="">.</span><span class="">index_text</span><span class="">(</span><span class="">d</span><span class="">.</span><span class="">title</span><span class="">,</span><span class="">1</span><span class="">,</span><span class="">"title"</span><span class="">);</span><span class="">
indexer</span><span class="">.</span><span class="">index_text</span><span class="">(</span><span class="">d</span><span class="">.</span><span class="">content</span><span class="">,</span><span class="">1</span><span class="">,</span><span class="">"content"</span><span class="">);</span><span class="">
indexer</span><span class="">.</span><span class="">index_text</span><span class="">(</span><span class="">d</span><span class="">.</span><span class="">url</span><span class="">,</span><span class="">1</span><span class="">,</span><span class="">"url"</span><span class="">);</span><span class="">
doc</span><span class="">.</span><span class="">add_boolean_term</span><span class="">(</span><span class="">"title"</span><span class="">+</span><span class="">d</span><span class="">.</span><span class="">title</span><span class="">);</span><span class="">
db</span><span class="">.</span><span class="">replace_document</span><span class="">(</span><span class="">d</span><span class="">.</span><span class="">url</span><span class="">,</span><span class="">doc</span><span class="">);</span><span class="">
db</span><span class="">.</span><span class="">commit</span><span class="">();</span><span class="">
</span><span class="">}</span><span class=""> </span><span class="">catch</span><span class=""> </span><span class="">(</span><span class="">const</span><span class=""> </span><span class="">Xapian</span><span class="">::</span><span class="">Error</span><span class=""> </span><span class="">&</span><span class="">e</span><span class="">)</span><span class=""> </span><span class="">{</span><span class="">
std</span><span class="">::</span><span class="">cout </span><span class=""><<</span><span class=""> e</span><span class="">.</span><span class="">get_description</span><span class="">()</span><span class=""> </span><span class=""><<</span><span class=""> std</span><span class="">::</span><span class="">endl</span><span class="">;</span><span class="">
exit</span><span class="">(</span><span class="">1</span><span class="">);</span><span class="">
</span><span class="">}</span><span class="">
</span><span class="">}</span><span class="">
</span><span class="">void</span><span class=""> searchData</span><span class="">(</span><span class="">std</span><span class="">::</span><span class="">string query_string</span><span class="">){</span><span class="">
</span><span class="">try</span><span class="">{</span><span class="">
</span><span class="">Xapian</span><span class="">::</span><span class="">Database</span><span class=""> db</span><span class="">(</span><span class="">"/Users/ramesh/Desktop/xapian"</span><span class="">);</span><span class="">
</span><span class="">Xapian</span><span class="">::</span><span class="">Enquire</span><span class=""> enquire</span><span class="">(</span><span class="">db</span><span class="">);</span><span class="">
</span><span class="">Xapian</span><span class="">::</span><span class="">QueryParser</span><span class=""> qp</span><span class="">;</span><span class="">
</span><span class="">Xapian</span><span class="">::</span><span class="">Stem</span><span class=""> stemmer</span><span class="">(</span><span class="">"english"</span><span class="">);</span><span class="">
qp</span><span class="">.</span><span class="">set_default_op</span><span class="">(</span><span class="">Xapian</span><span class="">::</span><span class="">Query</span><span class="">::</span><span class="">OP_FILTER</span><span class="">);</span><span class="">
qp</span><span class="">.</span><span class="">set_stemmer</span><span class="">(</span><span class="">stemmer</span><span class="">);</span><span class="">
qp</span><span class="">.</span><span class="">add_prefix</span><span class="">(</span><span class="">""</span><span class="">,</span><span class="">"title"</span><span class="">);</span><span class="">
qp</span><span class="">.</span><span class="">add_prefix</span><span class="">(</span><span class="">""</span><span class="">,</span><span class="">"content"</span><span class="">);</span><span class="">
qp</span><span class="">.</span><span class="">add_boolean_prefix</span><span class="">(</span><span class="">"title"</span><span class="">,</span><span class="">"title"</span><span class="">);</span><span class="">
qp</span><span class="">.</span><span class="">set_database</span><span class="">(</span><span class="">db</span><span class="">);</span><span class="">
qp</span><span class="">.</span><span class="">set_stemming_strategy</span><span class="">(</span><span class="">Xapian</span><span class="">::</span><span class="">QueryParser</span><span class="">::</span><span class="">STEM_SOME</span><span class="">);</span><span class="">
</span><span class="">Xapian</span><span class="">::</span><span class="">Query</span><span class=""> query </span><span class="">=</span><span class=""> qp</span><span class="">.</span><span class="">parse_query</span><span class="">(</span><span class="">query_string</span><span class="">);</span><span class="">
std</span><span class="">::</span><span class="">cout </span><span class=""><<</span><span class=""> </span><span class="">"Parsed query is: "</span><span class=""> </span><span class=""><<</span><span class=""> query</span><span class="">.</span><span class="">get_description</span><span class="">()</span><span class=""> </span><span class=""><<</span><span class=""> std</span><span class="">::</span><span class="">endl</span><span class="">;</span><span class="">
enquire</span><span class="">.</span><span class="">set_query</span><span class="">(</span><span class="">query</span><span class="">);</span><span class="">
</span><span class="">Xapian</span><span class="">::</span><span class="">MSet</span><span class=""> matches </span><span class="">=</span><span class=""> enquire</span><span class="">.</span><span class="">get_mset</span><span class="">(</span><span class="">0</span><span class="">,</span><span class=""> </span><span class="">10</span><span class="">);</span><span class="">
std</span><span class="">::</span><span class="">cout </span><span class=""><<</span><span class=""> matches</span><span class="">.</span><span class="">get_matches_estimated</span><span class="">()</span><span class=""> </span><span class=""><<</span><span class=""> </span><span class="">" results found.\n"</span><span class="">;</span><span class="">
std</span><span class="">::</span><span class="">cout </span><span class=""><<</span><span class=""> </span><span class="">"Matches 1-"</span><span class=""> </span><span class=""><<</span><span class=""> matches</span><span class="">.</span><span class="">size</span><span class="">()</span><span class=""> </span><span class=""><<</span><span class=""> </span><span class="">":\n"</span><span class=""> </span><span class=""><<</span><span class=""> std</span><span class="">::</span><span class="">endl</span><span class="">;</span><span class="">
</span><span class="">for</span><span class=""> </span><span class="">(</span><span class="">Xapian</span><span class="">::</span><span class="">MSetIterator</span><span class=""> i </span><span class="">=</span><span class=""> matches</span><span class="">.</span><span class="">begin</span><span class="">();</span><span class=""> i </span><span class="">!=</span><span class=""> matches</span><span class="">.</span><span class="">end</span><span class="">();</span><span class=""> </span><span class="">++</span><span class="">i</span><span class="">)</span><span class=""> </span><span class="">{</span><span class="">
std</span><span class="">::</span><span class="">cout </span><span class=""><<</span><span class=""> i</span><span class="">.</span><span class="">get_rank</span><span class="">()</span><span class=""> </span><span class="">+</span><span class=""> </span><span class="">1</span><span class=""> </span><span class=""><<</span><span class=""> </span><span class="">": "</span><span class=""> </span><span class=""><<</span><span class=""> i</span><span class="">.</span><span class="">get_weight</span><span class="">()</span><span class=""> </span><span class=""><<</span><span class=""> </span><span class="">" docid="</span><span class=""> </span><span class=""><<</span><span class=""> </span><span class="">*</span><span class="">i
</span><span class=""><<</span><span class=""> </span><span class="">" ["</span><span class=""> </span><span class=""><<</span><span class=""> i</span><span class="">.</span><span class="">get_document</span><span class="">().</span><span class="">get_data</span><span class="">()</span><span class=""> </span><span class=""><<</span><span class=""> </span><span class="">"]\n\n"</span><span class="">;</span><span class="">
</span><span class="">}</span><span class="">
</span><span class="">}</span><span class=""> </span><span class="">catch</span><span class=""> </span><span class="">(</span><span class="">const</span><span class=""> </span><span class="">Xapian</span><span class="">::</span><span class="">Error</span><span class=""> </span><span class="">&</span><span class="">e</span><span class="">)</span><span class=""> </span><span class="">{</span><span class="">
std</span><span class="">::</span><span class="">cout </span><span class=""><<</span><span class=""> e</span><span class="">.</span><span class="">get_description</span><span class="">()</span><span class=""> </span><span class=""><<</span><span class=""> std</span><span class="">::</span><span class="">endl</span><span class="">;</span><span class="">
exit</span><span class="">(</span><span class="">1</span><span class="">);</span><span class="">
</span><span class="">}</span><span class="">
</span><span class="">}</span><span class="">
</span><span class="">int</span><span class=""> main</span><span class="">()</span><span class="">
</span><span class="">{</span><span class="">
document d1</span><span class="">,</span><span class="">d2</span><span class="">;</span><span class="">
d1</span><span class="">.</span><span class="">title </span><span class="">=</span><span class=""> </span><span class="">"Xapain is good"</span><span class="">;</span><span class="">
d1</span><span class="">.</span><span class="">content </span><span class="">=</span><span class=""> </span><span class="">"Xapian is an open source search engine library, which allows developers to add advanced indexing and search facilities to their own applications."</span><span class="">;</span><span class="">
d1</span><span class="">.</span><span class="">url </span><span class="">=</span><span class=""> </span><span class="">"<a href="http://www.xapian.org">http://www.xapian.org</a>"</span><span class="">;</span><span class="">
d2</span><span class="">.</span><span class="">title </span><span class="">=</span><span class=""> </span><span class="">"Xapain is awesome"</span><span class="">;</span><span class="">
d2</span><span class="">.</span><span class="">content </span><span class="">=</span><span class=""> </span><span class="">"good Xapian is an open source search engine library, which allows developers to add advanced indexing and search facilities to their own applications."</span><span class="">;</span><span class="">
d2</span><span class="">.</span><span class="">url </span><span class="">=</span><span class=""> </span><span class="">"<a href="http://www.xapian.org/test">http://www.xapian.org/test</a>"</span><span class="">;</span><span class="">
indexData</span><span class="">(</span><span class="">d1</span><span class="">);</span><span class="">
indexData</span><span class="">(</span><span class="">d2</span><span class="">);</span><span class="">
searchData</span><span class="">(</span><span class="">"xapian title:good"</span><span class="">);</span><span class="">
searchData</span><span class="">(</span><span class="">"xapian title:Xapian is good"</span><span class="">);</span><span class="">
</span><span class="">return</span><span class=""> </span><span class="">0</span><span class="">;</span><span class="">
</span><span class="">}<br><br></span></code></pre><p>First query with filter "xapian title:good" works well.</p>
<p>But "xapian title:Xapian is good" fails.</p>
<p>Can any one please explain what is the issue ?<br></p><pre style class=""><br></pre><br></div>