public void UpdateRecord(IBaseWindow baseWin, GDMRecord record) { if (baseWin == null) { throw new ArgumentNullException("baseWin"); } if (record == null || !IsIndexedRecord(record)) { return; } try { lock (fLock) { using (WritableDatabase database = new WritableDatabase(GetXDBFolder(), Xapian.Xapian.DB_CREATE_OR_OPEN)) using (TermGenerator indexer = new TermGenerator()) using (Stem stemmer = new Stem("russian")) { indexer.SetStemmer(stemmer); ReindexRecord(baseWin, database, indexer, record); SetDBLastChange(baseWin, database); } } } catch (Exception ex) { Logger.LogWrite("SearchManager.UpdateRecord(): " + ex.Message); } }
public void ReindexBase(IBaseWindow baseWin) { if (baseWin == null) { return; } try { lock (fLock) { using (WritableDatabase database = new WritableDatabase(GetXDBFolder(), Xapian.Xapian.DB_CREATE_OR_OPEN)) using (TermGenerator indexer = new TermGenerator()) using (Stem stemmer = new Stem("russian")) { indexer.SetStemmer(stemmer); IProgressController progress = AppHost.Progress; progress.ProgressInit(fPlugin.LangMan.LS(TLS.LSID_SearchIndexRefreshing), baseWin.Context.Tree.RecordsCount); int num = baseWin.Context.Tree.RecordsCount; for (int i = 0; i < num; i++) { GDMRecord record = baseWin.Context.Tree[i]; if (IsIndexedRecord(record)) { ReindexRecord(baseWin, database, indexer, record); } progress.ProgressStep(); } progress.ProgressDone(); SetDBLastChange(baseWin, database); } } } catch (Exception ex) { Logger.LogWrite("SearchManager.ReindexBase(): " + ex.Message); } }
private static bool SetDocumentContext(IBaseWindow baseWin, Document doc, TermGenerator indexer, GDMRecord rec) { StringList ctx = baseWin.GetRecordContent(rec); if (ctx == null) { return(false); } string recLastchange = rec.ChangeDate.ToString(); string baseSign = GetSign(baseWin); doc.SetData(rec.XRef); // not edit: for link from search results to gedcom-base doc.AddTerm("Q" + baseSign + "_" + rec.XRef); // not edit: specific db_rec_id - for FindDocId() doc.AddValue(0, recLastchange); // not edit: for update check doc.AddBooleanTerm("GDB" + baseSign); // not edit: for filtering by database in Search() indexer.SetDocument(doc); indexer.IndexText(ctx.Text); return(true); }
private static void ReindexRecord(IBaseWindow baseWin, WritableDatabase database, TermGenerator indexer, GDMRecord record) { uint docid = FindDocId(baseWin, database, record.XRef); if (docid != 0) { // checking for needed updates string recLastchange = record.ChangeDate.ToString(); string docLastchange; using (Document curDoc = database.GetDocument(docid)) { docLastchange = curDoc.GetValue(0); } // updating a record if (!string.Equals(recLastchange, docLastchange)) { using (Document doc = new Document()) { if (SetDocumentContext(baseWin, doc, indexer, record)) { database.ReplaceDocument(docid, doc); } } } } else { // only adding using (Document doc = new Document()) { if (SetDocumentContext(baseWin, doc, indexer, record)) { database.AddDocument(doc); } } } }
public NumberSequence(TermGenerator termGenerator) { _termGenerator = termGenerator; }
public Iterator(TermGenerator term) { this.termGenerator = term; }
public NumberSequence(TermGenerator generator) { this.termGenerator = generator; }