Example #1
0
        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);
            }
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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);
        }
Example #4
0
        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);
                    }
                }
            }
        }
Example #5
0
 public NumberSequence(TermGenerator termGenerator)
 {
     _termGenerator = termGenerator;
 }
Example #6
0
 public Iterator(TermGenerator term)
 {
     this.termGenerator = term;
 }
Example #7
0
 public NumberSequence(TermGenerator generator)
 {
     this.termGenerator = generator;
 }