Пример #1
0
        public static void doIndex(string LuceneIndexDir, string SpellingIndexDir, IndexCreationMode indexCreationMode, IndexableFileInfo[] fileInfos, object ThreadState, onAddFileToIndex AddFileToIndex)
        {
            if (indexing)
            {
                return;
            }
            lock (padlock)
            {
                indexing = true;


                LuceneIndexer indexer = new LuceneIndexer(LuceneIndexDir, indexCreationMode); // create new index
                try
                {
                    for (int i = 0; i < fileInfos.Length; i++)
                    {
                        IndexableFileInfo fi = fileInfos[i];
                        if (AddFileToIndex != null)
                        {
                            AddFileToIndex(fi, (double)i / (double)fileInfos.Length);
                        }

                        indexer.addFileInfoToIndex(fi);
                    } // foreach
                }
                finally
                {
                    indexer.CloseIndexWriter(OptimizeMode.DoNotOptimize);
                }
                if (indexCreationMode == IndexCreationMode.AppendToExistingIndex)
                {
                    removeAllDuplicateAndDeletedFiles(fileInfos, LuceneIndexDir, indexCreationMode);
                }
                try
                {
                    doSpellCheckerIndexing(LuceneIndexDir, SpellingIndexDir);
                }
                catch
                { }



                indexing = false;
            }
        } // doIndex
Пример #2
0
        public LuceneIndexer(string LuceneIndexDir, IndexCreationMode indexCreationMode)
        {
            _luceneIndexDir    = LuceneIndexDir;
            _indexCreationMode = indexCreationMode;

            if (_indexCreationMode == IndexCreationMode.AppendToExistingIndex && !System.IO.File.Exists(System.IO.Path.Combine(_luceneIndexDir, "segments")))
            {
                // throw new ArgumentException("To Append to an existing index, one needs to exist already!!!");
                _indexCreationMode = IndexCreationMode.CreateNewIndex;
            }

            try
            {
                if (_indexCreationMode == IndexCreationMode.CreateNewIndex)
                {
                    writer = new IndexWriter(luceneIndexDir, new hatWebPortalAnalyzer(), true);
                }
                else if (_indexCreationMode == IndexCreationMode.AppendToExistingIndex)
                {
                    writer = new IndexWriter(luceneIndexDir, new hatWebPortalAnalyzer(), false);
                }
                else
                {
                    throw new ArgumentException("Invalid IndexCreationMode parameter");
                }

                writer.SetUseCompoundFile(false);
            }
            catch (Exception ex)
            {
                if (ex.Message.IndexOf(@"\_svn") > -1 || ex.Message.IndexOf(@"\.svn") > -1)
                {
                    throw new Exception("Please remove the SVN directory under \"" + luceneIndexDir + "\" - this is the only way the indexing can work");
                }
                else
                {
                    throw new Exception("Exception thrown when creating Hatfield.Web.Portal.Search.Lucene.LuceneIndexer", ex);
                }
            }
        } // constructor
Пример #3
0
        } // doIndex

        private static void removeAllDuplicateAndDeletedFiles(IndexableFileInfo[] fileInfos, string LuceneIndexDir, IndexCreationMode indexCreationMode)
        {
            if (indexCreationMode != IndexCreationMode.AppendToExistingIndex)
            {
                return;
            }

            IndexReader reader = IndexReader.Open(LuceneIndexDir);

            try
            {
                int numDocs = reader.NumDocs();
                for (int i = 0; i < numDocs; i++)
                {
                    Document docToCheck         = reader.Document(i);
                    bool     removeDocFromIndex = true;
                    string   filenameField      = docToCheck.GetField("filename").StringValue();
                    string   lastModified       = (docToCheck.GetField("LastModified").StringValue());

                    foreach (IndexableFileInfo fi in fileInfos)
                    {
                        if (String.Compare(fi.Filename, filenameField, true) == 0 && DateTools.DateToString(fi.LastModified, DateTools.Resolution.SECOND) == lastModified)
                        {
                            removeDocFromIndex = false;
                            break;
                        }
                    } // foreach

                    if (removeDocFromIndex)
                    {
                        reader.DeleteDocument(i);
                        if (!reader.HasDeletions())
                        {
                            throw new Exception("error: deletion failed!!");
                        }
                    }
                } // for each lucene doc
            }
            finally
            {
                reader.Close();
            }
            LuceneIndexer indexer = new LuceneIndexer(LuceneIndexDir, indexCreationMode); // open up the index again

            indexer.CloseIndexWriter(OptimizeMode.DoOptimization);                        // just to optimize the index (which removes deleted items).
        }
Пример #4
0
 public static void doIndex(string LuceneIndexDir, string SpellingIndexDir, IndexCreationMode indexCreationMode, IndexableFileInfo[] fileInfos, object ThreadState)
 {
     doIndex(LuceneIndexDir, SpellingIndexDir, indexCreationMode, fileInfos, ThreadState, null);
 }