454
454
doc = searcher->db->get_document (
455
455
g_rand_int_range (searcher->random, 1, lastdocid));
456
UnityPackageInfo *pkginfo = _pkginfo_from_document (doc);
457
if (g_hash_table_lookup_extended (unique, pkginfo->package_name, NULL, NULL))
459
_free_package_info (pkginfo);
463
g_hash_table_insert (unique, pkginfo->package_name, NULL);
464
result->results = g_slist_prepend (result->results, pkginfo);
457
catch (Xapian::DocNotFoundError e)
468
catch (Xapian::Error e)
470
g_warning ("Error getting random apps: %s", e.get_msg().c_str());
461
UnityPackageInfo *pkginfo = _pkginfo_from_document (doc);
462
if (g_hash_table_lookup_extended (unique, pkginfo->package_name, NULL, NULL))
464
_free_package_info (pkginfo);
468
g_hash_table_insert (unique, pkginfo->package_name, NULL);
469
result->results = g_slist_prepend (result->results, pkginfo);
479
480
query = searcher->query_parser->parse_query (filter_query, QUERY_PARSER_FILTER_FLAGS);
481
searcher->enquire->set_sort_by_relevance ();
482
searcher->enquire->set_query(query);
483
Xapian::MSet matches = searcher->enquire->get_mset(0, searcher->db->get_doccount ());
484
for (i = 0, n_unique = 0; i < n_apps*4, n_unique < n_apps; i++)
486
docid = g_rand_int_range (searcher->random, 0, matches.size ());
487
Xapian::MSetIterator iter = matches[docid];
488
Xapian::Document doc = iter.get_document ();
489
UnityPackageInfo *pkginfo = _pkginfo_from_document (doc);
490
if (g_hash_table_lookup_extended (unique, pkginfo->package_name, NULL, NULL))
492
_free_package_info (pkginfo);
496
g_hash_table_insert (unique, pkginfo->package_name, NULL);
497
result->results = g_slist_prepend (result->results, pkginfo);
481
catch (Xapian::QueryParserError e)
502
catch (Xapian::Error e)
483
g_debug ("Error parsing filter query '%s': %s", filter_query, e.get_msg().c_str());
504
g_debug ("Error getting random apps for query '%s': %s",
505
filter_query, e.get_msg().c_str());
484
506
return g_slice_new0 (UnityPackageSearchResult);
486
searcher->enquire->set_sort_by_relevance ();
487
searcher->enquire->set_query(query);
488
Xapian::MSet matches = searcher->enquire->get_mset(0, searcher->db->get_doccount ());
489
for (i = 0, n_unique = 0; i < n_apps*4, n_unique < n_apps; i++)
491
docid = g_rand_int_range (searcher->random, 0, matches.size ());
492
Xapian::MSetIterator iter = matches[docid];
493
Xapian::Document doc = iter.get_document ();
494
UnityPackageInfo *pkginfo = _pkginfo_from_document (doc);
495
if (g_hash_table_lookup_extended (unique, pkginfo->package_name, NULL, NULL))
497
_free_package_info (pkginfo);
501
g_hash_table_insert (unique, pkginfo->package_name, NULL);
502
result->results = g_slist_prepend (result->results, pkginfo);
508
510
g_hash_table_unref (unique);