void QueryingThread::doWork(void) { // Get the SearchEngine SearchEngineInterface *engine = SearchEngineFactory::getSearchEngine(m_engineName, m_engineOption); if (engine == NULL) { m_status = _("Couldn't create search engine"); m_status += " "; m_status += m_engineDisplayableName; return; } // Set the maximum number of results engine->setMaxResultsCount(m_queryProps.getMaximumResultsCount()); // Run the query if (engine->runQuery(m_queryProps) == false) { m_status = _("Couldn't run query on search engine"); m_status += " "; m_status += m_engineDisplayableName; } else { const vector<Result> &resultsList = engine->getResults(); m_resultsList.clear(); m_resultsList.reserve(resultsList.size()); m_resultsCharset = engine->getResultsCharset(); // Copy the results list for (vector<Result>::const_iterator resultIter = resultsList.begin(); resultIter != resultsList.end(); ++resultIter) { string title = _("No title"); string extract = HtmlTokenizer::stripTags(resultIter->getExtract()); // The title may contain formatting if (resultIter->getTitle().empty() == false) { title = HtmlTokenizer::stripTags(resultIter->getTitle()); } string language = resultIter->getLanguage(); if (language.empty() == true) { // Use the query's language language = m_queryProps.getLanguage(); } m_resultsList.push_back(Result(resultIter->getLocation(), title, extract, language, resultIter->getScore())); } } delete engine; }
void QueryingThread::doWork(void) { PinotSettings &settings = PinotSettings::getInstance(); // Get the SearchEngine SearchEngineInterface *pEngine = SearchEngineFactory::getSearchEngine(m_engineName, m_engineOption); if (pEngine == NULL) { m_status = _("Couldn't create search engine"); m_status += " "; m_status += m_engineDisplayableName; return; } // Set the maximum number of results pEngine->setMaxResultsCount(m_queryProps.getMaximumResultsCount()); // Set up the proxy DownloaderInterface *pDownloader = pEngine->getDownloader(); if ((pDownloader != NULL) && (settings.m_proxyEnabled == true) && (settings.m_proxyAddress.empty() == false)) { char portStr[64]; pDownloader->setSetting("proxyaddress", settings.m_proxyAddress); snprintf(portStr, 64, "%u", settings.m_proxyPort); pDownloader->setSetting("proxyport", portStr); pDownloader->setSetting("proxytype", settings.m_proxyType); } // Run the query if (pEngine->runQuery(m_queryProps) == false) { m_status = _("Couldn't run query on search engine"); m_status += " "; m_status += m_engineDisplayableName; } else { IndexInterface *pDocsIndex = NULL; IndexInterface *pDaemonIndex = NULL; const vector<Result> &resultsList = pEngine->getResults(); unsigned int indexId = 0; bool isIndexQuery = false; m_resultsList.clear(); m_resultsList.reserve(resultsList.size()); m_resultsCharset = pEngine->getResultsCharset(); // Are we querying an index ? if (m_engineName == "xapian") { // Internal index ? if (m_engineOption == settings.m_docsIndexLocation) { indexId = settings.getIndexId(_("My Web Pages")); isIndexQuery = true; } else if (m_engineOption == settings.m_daemonIndexLocation) { indexId = settings.getIndexId(_("My Documents")); isIndexQuery = true; } } // Will we have to query internal indices ? if (isIndexQuery == false) { pDocsIndex = settings.getIndex(settings.m_docsIndexLocation); pDaemonIndex = settings.getIndex(settings.m_daemonIndexLocation); } // Copy the results list for (vector<Result>::const_iterator resultIter = resultsList.begin(); resultIter != resultsList.end(); ++resultIter) { Result current(*resultIter); string title(_("No title")); string location(current.getLocation()); string language(current.getLanguage()); unsigned int docId = 0; // The title may contain formatting if (current.getTitle().empty() == false) { title = FilterUtils::stripMarkup(current.getTitle()); } current.setTitle(title); #ifdef DEBUG cout << "QueryingThread::doWork: title is " << title << endl; #endif // Use the query's language if the result's is unknown if (language.empty() == true) { language = m_queryProps.getLanguage(); } current.setLanguage(language); if (isIndexQuery == true) { unsigned int tmpId = 0; // The index engine should have set this docId = current.getIsIndexed(tmpId); } // Is this in one of the indexes ? if ((pDocsIndex != NULL) && (pDocsIndex->isGood() == true)) { docId = pDocsIndex->hasDocument(location); if (docId > 0) { indexId = settings.getIndexId(_("My Web Pages")); } } if ((pDaemonIndex != NULL) && (pDaemonIndex->isGood() == true) && (docId == 0)) { docId = pDaemonIndex->hasDocument(location); if (docId > 0) { indexId = settings.getIndexId(_("My Documents")); } } if (docId > 0) { current.setIsIndexed(indexId, docId); #ifdef DEBUG cout << "QueryingThread::doWork: found in index " << indexId << endl; #endif } #ifdef DEBUG else cout << "QueryingThread::doWork: not found in any index" << endl; #endif m_resultsList.push_back(current); } if (pDocsIndex != NULL) { delete pDocsIndex; } if (pDaemonIndex != NULL) { delete pDaemonIndex; } } delete pEngine; }
void EngineQueryThread::doWork(void) { PinotSettings &settings = PinotSettings::getInstance(); // Get the SearchEngine SearchEngineInterface *pEngine = SearchEngineFactory::getSearchEngine(m_engineName, m_engineOption); if (pEngine == NULL) { m_errorNum = UNKNOWN_ENGINE; m_errorParam = m_engineDisplayableName; return; } // Set up the proxy DownloaderInterface *pDownloader = pEngine->getDownloader(); if ((pDownloader != NULL) && (settings.m_proxyEnabled == true) && (settings.m_proxyAddress.empty() == false)) { char portStr[64]; pDownloader->setSetting("proxyaddress", settings.m_proxyAddress); snprintf(portStr, 64, "%u", settings.m_proxyPort); pDownloader->setSetting("proxyport", portStr); pDownloader->setSetting("proxytype", settings.m_proxyType); } if (m_listingIndex == false) { pEngine->setLimitSet(m_limitToDocsSet); } // Run the query pEngine->setDefaultOperator(SearchEngineInterface::DEFAULT_OP_AND); if (pEngine->runQuery(m_queryProps, m_startDoc) == false) { m_errorNum = QUERY_FAILED; m_errorParam = m_engineDisplayableName; } else { const vector<DocumentInfo> &resultsList = pEngine->getResults(); m_documentsList.clear(); m_documentsList.reserve(resultsList.size()); m_documentsCount = pEngine->getResultsCountEstimate(); #ifdef DEBUG cout << "EngineQueryThread::doWork: " << resultsList.size() << " off " << m_documentsCount << " results to process, starting at position " << m_startDoc << endl; #endif m_resultsCharset = pEngine->getResultsCharset(); if (m_listingIndex == false) { processResults(resultsList); } else { processResults(resultsList, PinotSettings::getInstance().getIndexIdByName(m_engineDisplayableName)); } // Any spelling correction ? string correctedFreeQuery(pEngine->getSpellingCorrection()); if (correctedFreeQuery.empty() == false) { m_correctedSpelling = true; m_queryProps.setFreeQuery(correctedFreeQuery); } } delete pEngine; }
void QueryingThread::doWork(void) { PinotSettings &settings = PinotSettings::getInstance(); // Get the SearchEngine SearchEngineInterface *pEngine = SearchEngineFactory::getSearchEngine(m_engineName, m_engineOption); if (pEngine == NULL) { m_status = _("Couldn't create search engine"); m_status += " "; m_status += m_engineDisplayableName; return; } // Set up the proxy DownloaderInterface *pDownloader = pEngine->getDownloader(); if ((pDownloader != NULL) && (settings.m_proxyEnabled == true) && (settings.m_proxyAddress.empty() == false)) { char portStr[64]; pDownloader->setSetting("proxyaddress", settings.m_proxyAddress); snprintf(portStr, 64, "%u", settings.m_proxyPort); pDownloader->setSetting("proxyport", portStr); pDownloader->setSetting("proxytype", settings.m_proxyType); } // Run the query if (pEngine->runQuery(m_queryProps, m_startDoc) == false) { m_status = _("Couldn't run query on search engine"); m_status += " "; m_status += m_engineDisplayableName; } else { const vector<DocumentInfo> &resultsList = pEngine->getResults(); m_documentsList.clear(); m_documentsList.reserve(resultsList.size()); m_documentsCount = pEngine->getResultsCountEstimate(); #ifdef DEBUG cout << "QueryingThread::doWork: " << resultsList.size() << " off " << m_documentsCount << " results to process, starting at position " << m_startDoc << endl; #endif m_resultsCharset = pEngine->getResultsCharset(); if (m_listingIndex == false) { processResults(resultsList); } else { processResults(resultsList, PinotSettings::getInstance().getIndexId(m_engineDisplayableName)); } } delete pEngine; }