/* Copyright (C) 2007 J.F.Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the * Free Software Foundation, Inc., * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef _rclquery_p_h_included_ #define _rclquery_p_h_included_ #include #include #include #include #include #include "rclquery.h" class Chrono; namespace Rcl { class Query::Native { public: // The query I belong to Query *m_q; // query descriptor: terms and subqueries joined by operators // (or/and etc...) Xapian::Query xquery; // Open query descriptor. Xapian::Enquire *xenquire; // Partial result set Xapian::MSet xmset; // Term frequencies for current query. See makeAbstract, setQuery std::map termfreqs; Native(Query *q) : m_q(q), xenquire(0) { } ~Native() { clear(); } void clear() { delete xenquire; xenquire = 0; termfreqs.clear(); } /** Return a list of terms which matched for a specific result document */ bool getMatchTerms(unsigned long xdocid, std::vector& terms); int makeAbstract(Xapian::docid id, std::vector&, int maxoccs = -1, int ctxwords = -1); int getFirstMatchPage(Xapian::docid docid, std::string& term); void setDbWideQTermsFreqs(); double qualityTerms(Xapian::docid docid, const std::vector& terms, std::multimap >& byQ); void abstractPopulateQTerm( Xapian::Database& xrdb, Xapian::docid docid, const string& qterm, int qtrmwrdcnt, int ctxwords, unsigned int maxgrpoccs, unsigned int maxtotaloccs, std::map& sparseDoc, std::unordered_set& searchTermPositions, unsigned int& maxpos, unsigned int& totaloccs, unsigned int& grpoccs, int& ret ); void abstractPopulateContextTerms( Xapian::Database& xrdb, Xapian::docid docid, unsigned int maxpos, std::map& sparseDoc, int& ret ); void abstractCreateSnippetsVector( Db::Native *ndb, std::map& sparseDoc, std::unordered_set& searchTermPositions, std::vector& vpbreaks, std::vector& vabs); int abstractFromIndex( Rcl::Db::Native *ndb, Xapian::docid docid, const std::vector& matchTerms, const std::multimap> byQ, double totalweight, int ctxwords, unsigned int maxtotaloccs, std::vector& vabs, Chrono& chron ); int abstractFromText( Rcl::Db::Native *ndb, Xapian::docid docid, const std::vector& matchTerms, const std::multimap> byQ, double totalweight, int ctxwords, unsigned int maxtotaloccs, vector& vabs, Chrono& chron ); }; } #endif /* _rclquery_p_h_included_ */