int main(int argc, char *argv[]) { // Initialize the library. lucy_bootstrap_parcel(); if (argc != 2) { S_usage_and_exit(argv[0]); } const char *query_c = argv[1]; printf("Searching for: %s\n\n", query_c); String *folder = Str_newf("%s", path_to_index); String *language = Str_newf("en"); Simple *lucy = Simple_new((Obj*)folder, language); String *query_str = Str_newf("%s", query_c); Simple_Search(lucy, query_str, 0, 10); String *title_str = Str_newf("title"); String *url_str = Str_newf("url"); HitDoc *hit; int i = 1; // Loop over search results. while (NULL != (hit = Simple_Next(lucy))) { String *title = (String*)HitDoc_Extract(hit, title_str); char *title_c = Str_To_Utf8(title); String *url = (String*)HitDoc_Extract(hit, url_str); char *url_c = Str_To_Utf8(url); printf("Result %d: %s (%s)\n", i, title_c, url_c); free(url_c); free(title_c); DECREF(url); DECREF(title); DECREF(hit); i++; } DECREF(url_str); DECREF(title_str); DECREF(query_str); DECREF(lucy); DECREF(language); DECREF(folder); return 0; }
static void test_simple(TestBatchRunner *runner) { RAMFolder *folder = RAMFolder_new(NULL); String *language = SSTR_WRAP_UTF8("en", 2); Simple *lucy = Simple_new((Obj*)folder, language); String *food_field = SSTR_WRAP_UTF8("food", 4); { Doc *doc = Doc_new(NULL, 0); String *value = SSTR_WRAP_UTF8("creamed corn", 12); Doc_Store(doc, food_field, (Obj*)value); Simple_Add_Doc(lucy, doc); DECREF(doc); String *query = SSTR_WRAP_UTF8("creamed", 7); uint32_t num_results = Simple_Search(lucy, query, 0, 10); TEST_INT_EQ(runner, num_results, 1, "Search works right after add"); } { Doc *doc = Doc_new(NULL, 0); String *value = SSTR_WRAP_UTF8("creamed spinach", 15); Doc_Store(doc, food_field, (Obj*)value); Simple_Add_Doc(lucy, doc); DECREF(doc); String *query = SSTR_WRAP_UTF8("creamed", 7); uint32_t num_results = Simple_Search(lucy, query, 0, 10); TEST_INT_EQ(runner, num_results, 2, "Search returns total hits"); } { Doc *doc = Doc_new(NULL, 0); String *value = SSTR_WRAP_UTF8("creamed broccoli", 16); Doc_Store(doc, food_field, (Obj*)value); Simple_Add_Doc(lucy, doc); DECREF(doc); DECREF(lucy); lucy = Simple_new((Obj*)folder, language); String *query = SSTR_WRAP_UTF8("cream", 5); uint32_t num_results = Simple_Search(lucy, query, 0, 10); TEST_INT_EQ(runner, num_results, 3, "commit upon destroy"); HitDoc *hit; while ((hit = Simple_Next(lucy)) != NULL) { String *food = (String*)HitDoc_Extract(hit, food_field); TEST_TRUE(runner, Str_Starts_With_Utf8(food, "cream", 5), "Next"); DECREF(food); DECREF(hit); } } { Doc *doc = Doc_new(NULL, 0); String *band_field = SSTR_WRAP_UTF8("band", 4); String *value = SSTR_WRAP_UTF8("Cream", 5); Doc_Store(doc, band_field, (Obj*)value); Simple_Add_Doc(lucy, doc); DECREF(doc); String *query = SSTR_WRAP_UTF8("cream", 5); uint32_t num_results = Simple_Search(lucy, query, 0, 10); TEST_INT_EQ(runner, num_results, 4, "Search uses correct EasyAnalyzer"); } DECREF(lucy); DECREF(folder); }