int get(int argc, char** argv) { // parse arguments parseArguments(argc, argv); string backend = options['t']; string indexdir = options['d']; // check arguments: indexdir if (indexdir.length() == 0) { pe("Provide the directory with the index.\n"); return usage(argc, argv); } // check arguments: dirs if (arguments.size() == 0) { pe("'%s' '%s'\n", backend.c_str(), indexdir.c_str()); pe("Provide one or more files to search.\n"); return usage(argc, argv); } // create an index manager IndexManager* manager = getIndexManager(backend, indexdir); if (manager == 0) { return usage(argc, argv); } IndexReader* reader = manager->indexReader(); QueryParser parser; for (vector<string>::iterator iter = arguments.begin(); iter != arguments.end(); ++iter) { Query query = parser.buildQuery( "system.location:'"+ *iter + '\''); vector<IndexedDocument> matches = reader->query(query, 0, 10); if (matches.size() == 0) printf ("%s: is not indexed\n", iter->c_str()); else { printf ("Information associated to %s:\n", iter->c_str()); for (vector<IndexedDocument>::iterator it = matches.begin(); it != matches.end(); ++it) { printIndexedDocument(*it); } } } IndexPluginLoader::deleteIndexManager(manager); return 0; }
int query(int argc, char** argv) { // parse arguments parseArguments(argc, argv); string backend = options['t']; string indexdir = options['d']; // check arguments: indexdir if (indexdir.length() == 0) { pe("Provide the directory with the index.\n"); return usage(argc, argv); } // check arguments: dirs if (arguments.size() == 0) { pe("'%s' '%s'\n", backend.c_str(), indexdir.c_str()); pe("Provide one or more files to search.\n"); return usage(argc, argv); } // create an index manager IndexManager* manager = getIndexManager(backend, indexdir); if (manager == 0) { return usage(argc, argv); } IndexReader* reader = manager->indexReader(); QueryParser parser; for (vector<string>::iterator iter = arguments.begin(); iter != arguments.end(); ++iter) { int results = 0; Query query = parser.buildQuery(*iter); const uint batchsize = 10; vector<IndexedDocument> matches = reader->query(query, 0, batchsize); if (matches.size() != 0) { printf ("Results for search \"%s\"\n", (*iter).c_str()); } else { printf ("No results for search \"%s\"\n", (*iter).c_str()); } while (matches.size() > 0) { for (vector<IndexedDocument>::iterator it = matches.begin(); it != matches.end(); it++) { printf ("\"%s\" matched\n", it->uri.c_str()); printIndexedDocument(*it); } results += (int)matches.size(); if (matches.size() == batchsize) { // maybe there're other results matches = reader->query(query, results + 1, 10); } else { matches.clear(); // force while() exit } } if (results != 0) { printf ("Query \"%s\" returned %i results\n", (*iter).c_str(), results); } } IndexPluginLoader::deleteIndexManager(manager); return 0; }