Compiler* PhraseQuery_Make_Compiler_IMP(PhraseQuery *self, Searcher *searcher, float boost, bool subordinate) { PhraseQueryIVARS *const ivars = PhraseQuery_IVARS(self); if (Vec_Get_Size(ivars->terms) == 1) { // Optimize for one-term "phrases". Obj *term = Vec_Fetch(ivars->terms, 0); TermQuery *term_query = TermQuery_new(ivars->field, term); TermCompiler *term_compiler; TermQuery_Set_Boost(term_query, ivars->boost); term_compiler = (TermCompiler*)TermQuery_Make_Compiler(term_query, searcher, boost, subordinate); DECREF(term_query); return (Compiler*)term_compiler; } else { PhraseCompiler *compiler = PhraseCompiler_new(self, searcher, boost); if (!subordinate) { PhraseCompiler_Normalize(compiler); } return (Compiler*)compiler; } }
static void test_Dump_Load_and_Equals(TestBatchRunner *runner) { TermQuery *query = TestUtils_make_term_query("content", "foo"); TermQuery *field_differs = TestUtils_make_term_query("stuff", "foo"); TermQuery *term_differs = TestUtils_make_term_query("content", "bar"); TermQuery *boost_differs = TestUtils_make_term_query("content", "foo"); Obj *dump = (Obj*)TermQuery_Dump(query); TermQuery *clone = (TermQuery*)TermQuery_Load(term_differs, dump); TEST_FALSE(runner, TermQuery_Equals(query, (Obj*)field_differs), "Equals() false with different field"); TEST_FALSE(runner, TermQuery_Equals(query, (Obj*)term_differs), "Equals() false with different term"); TermQuery_Set_Boost(boost_differs, 0.5); TEST_FALSE(runner, TermQuery_Equals(query, (Obj*)boost_differs), "Equals() false with different boost"); TEST_TRUE(runner, TermQuery_Equals(query, (Obj*)clone), "Dump => Load round trip"); DECREF(query); DECREF(term_differs); DECREF(field_differs); DECREF(boost_differs); DECREF(dump); DECREF(clone); }
Compiler* PhraseQuery_make_compiler(PhraseQuery *self, Searcher *searcher, float boost) { if (VA_Get_Size(self->terms) == 1) { // Optimize for one-term "phrases". Obj *term = VA_Fetch(self->terms, 0); TermQuery *term_query = TermQuery_new(self->field, term); TermCompiler *term_compiler; TermQuery_Set_Boost(term_query, self->boost); term_compiler = (TermCompiler*)TermQuery_Make_Compiler(term_query, searcher, boost); DECREF(term_query); return (Compiler*)term_compiler; } else { return (Compiler*)PhraseCompiler_new(self, searcher, boost); } }