383
383
searcher->enquire->set_sort_by_relevance ();
388
max_hits = (max_hits != 0 ? max_hits : searcher->db->get_doccount ());
389
searcher->enquire->set_query(query);
390
Xapian::MSet matches =
391
searcher->enquire->get_mset(0, max_hits);
393
// Retrieve the results, note that we build the result->results
394
// list in reverse order and then reverse it before we return it
395
387
result = g_slice_new0 (UnityPackageSearchResult);
396
result->num_hits = matches.get_matches_estimated ();
397
for (Xapian::MSetIterator i = matches.begin();
403
Xapian::Document doc = i.get_document();
404
UnityPackageInfo *pkginfo = _pkginfo_from_document (doc);
405
result->results = g_slist_prepend (result->results, pkginfo);
407
catch (Xapian::Error e)
409
g_warning ("Unable to read document from result set: %s",
410
e.get_msg().c_str());
414
result->results = g_slist_reverse (result->results);
391
max_hits = (max_hits != 0 ? max_hits : searcher->db->get_doccount ());
392
searcher->enquire->set_query(query);
393
Xapian::MSet matches =
394
searcher->enquire->get_mset(0, max_hits);
396
// Retrieve the results, note that we build the result->results
397
// list in reverse order and then reverse it before we return it
398
result->num_hits = matches.get_matches_estimated ();
399
for (Xapian::MSetIterator i = matches.begin();
405
Xapian::Document doc = i.get_document();
406
UnityPackageInfo *pkginfo = _pkginfo_from_document (doc);
407
result->results = g_slist_prepend (result->results, pkginfo);
409
catch (Xapian::Error e)
411
g_warning ("Unable to read document from result set: %s",
412
e.get_msg().c_str());
416
result->results = g_slist_reverse (result->results);
418
catch(const Xapian::Error e)
420
g_warning ("Error running query '%s': %s", search_string, e.get_msg().c_str());
446
455
doc = searcher->db->get_document (
447
456
g_rand_int_range (searcher->random, 1, lastdocid));
457
UnityPackageInfo *pkginfo = _pkginfo_from_document (doc);
458
if (g_hash_table_lookup_extended (unique, pkginfo->package_name, NULL, NULL))
460
_free_package_info (pkginfo);
464
g_hash_table_insert (unique, pkginfo->package_name, NULL);
465
result->results = g_slist_prepend (result->results, pkginfo);
449
catch (Xapian::DocNotFoundError e)
469
catch (Xapian::Error e)
471
g_warning ("Error getting random apps: %s", e.get_msg().c_str());
453
UnityPackageInfo *pkginfo = _pkginfo_from_document (doc);
454
if (g_hash_table_lookup_extended (unique, pkginfo->package_name, NULL, NULL))
456
_free_package_info (pkginfo);
460
g_hash_table_insert (unique, pkginfo->package_name, NULL);
461
result->results = g_slist_prepend (result->results, pkginfo);
478
g_debug ("FILTER %s", filter_query);
468
479
Xapian::Query query;
471
482
query = searcher->query_parser->parse_query (filter_query, QUERY_PARSER_FILTER_FLAGS);
483
searcher->enquire->set_sort_by_relevance ();
484
searcher->enquire->set_query(query);
485
Xapian::MSet matches = searcher->enquire->get_mset(0, searcher->db->get_doccount ());
486
for (i = 0, n_unique = 0; i < n_apps*4, n_unique < n_apps; i++)
488
docid = g_rand_int_range (searcher->random, 0, matches.size ());
489
Xapian::MSetIterator iter = matches[docid];
490
Xapian::Document doc = iter.get_document ();
491
UnityPackageInfo *pkginfo = _pkginfo_from_document (doc);
492
if (g_hash_table_lookup_extended (unique, pkginfo->package_name, NULL, NULL))
494
_free_package_info (pkginfo);
498
g_hash_table_insert (unique, pkginfo->package_name, NULL);
499
result->results = g_slist_prepend (result->results, pkginfo);
473
catch (Xapian::QueryParserError e)
504
catch (Xapian::Error e)
475
g_debug ("Error parsing filter query '%s': %s", filter_query, e.get_msg().c_str());
506
g_debug ("Error getting random apps for query '%s': %s",
507
filter_query, e.get_msg().c_str());
476
508
return g_slice_new0 (UnityPackageSearchResult);
478
searcher->enquire->set_sort_by_relevance ();
479
searcher->enquire->set_query(query);
480
Xapian::MSet matches = searcher->enquire->get_mset(0, searcher->db->get_doccount ());
481
for (i = 0, n_unique = 0; i < n_apps*4, n_unique < n_apps; i++)
483
docid = g_rand_int_range (searcher->random, 0, matches.size ());
484
Xapian::MSetIterator iter = matches[docid];
485
Xapian::Document doc = iter.get_document ();
486
UnityPackageInfo *pkginfo = _pkginfo_from_document (doc);
487
if (g_hash_table_lookup_extended (unique, pkginfo->package_name, NULL, NULL))
489
_free_package_info (pkginfo);
493
g_hash_table_insert (unique, pkginfo->package_name, NULL);
494
result->results = g_slist_prepend (result->results, pkginfo);
500
512
g_hash_table_unref (unique);