Пример #1
0
 /// <summary>
 /// create index if needed
 /// </summary>
 protected void DoFSIndexCreation(IndexerStorageMode mode, DirectoryInfo di, Lucene.Net.Store.Directory directoryTemp, Analyzer analyzer)
 {
     if (mode == IndexerStorageMode.RAM || di.Exists == false || di.GetFiles().Count() < 1)
     {
         using (IndexWriter indexWriter = new IndexWriter(directoryTemp, analyzer, IndexWriter.MaxFieldLength.UNLIMITED))
         {
             indexWriter.Commit(); // create segments
         }
     }
 }
Пример #2
0
        /// <summary>
        /// constructor
        /// </summary>
        /// <param name="indexFullPath"></param>
        /// <param name="indexMode"></param>
        /// <param name="indexerDocumentUniqueIdentifier"></param>
        /// <param name="analyzer"></param>
        /// <param name="dataItemHandler"></param>
        /// <param name="perFieldAnalyzers"></param>
        public ISIndexer(string indexFullPath, IndexerStorageMode indexMode, string indexerDocumentUniqueIdentifier, IndexerAnalyzer analyzer, Dictionary <string, IndexerAnalyzer> perFieldAnalyzers = null)
        {
            this.indexMode = indexMode;

            if (analyzer != IndexerAnalyzer.PerFieldAnalyzerWrapper)
            {
                this.analyzer = GetAnalyzer(analyzer, false);
            }
            else
            {
                this.analyzer = GetAnalyzer(analyzer, false);
                if (perFieldAnalyzers != null)
                {
                    foreach (KeyValuePair <string, IndexerAnalyzer> kvp in perFieldAnalyzers)
                    {
                        (this.analyzer as PerFieldAnalyzerWrapper).AddAnalyzer(kvp.Key, GetAnalyzer(kvp.Value, true));
                    }
                }
            }

            if (!String.IsNullOrEmpty(indexFullPath))
            {
                this.luceneIndexFullPath = Path.GetFullPath(indexFullPath);
            }

            if (luceneIndexDirectory == null)
            {
                throw new System.IO.IOException("unable to setup indexing folder");
            }

            if (!String.IsNullOrEmpty(indexerDocumentUniqueIdentifier))
            {
                this.indexerDocumentUniqueIdentifierFieldName = indexerDocumentUniqueIdentifier;
            }

            this.indexSearcher = new IndexSearcher(luceneIndexDirectory, true);
            this.OnIndexSearcherUpdateRequested += IndexSearcherUpdater;
            this.MaxSearchHits = 1000; // DEFAULT
        }
Пример #3
0
        static void Main(string[] args)
        {
            CommandLineArgs ca = new CommandLineArgs(args);

            if (ca.Arguments.Count < 1 && ca.Options.Count < 1)
            {
                Usage();
                Environment.Exit(1);
            }

            SampleDataFeed fd = new SampleDataFeed();

            bool reset       = ca.Options.IsOptionEnabled("reset");
            bool index       = ca.Options.IsOptionEnabled("index");
            bool forceindex  = index && ca.Options["index"] == "force";
            bool updateindex = index && ca.Options["index"] == "update";
            bool usescoring  = ca.Options.IsOptionEnabled("withscore");

            if (reset)
            {
                fd.BuildStaticDataFeed();
            }

            IndexerStorageMode mode = IndexerStorageMode.FS;

            if (ca.Options.IsOptionEnabled("mode"))
            {
                if (ca.Options["mode"] == "ram")
                {
                    mode = IndexerStorageMode.RAM;
                }
                else if (ca.Options["mode"] == "fsram")
                {
                    mode = IndexerStorageMode.FSRAM;
                }
            }

            bool doReindex = reset || (mode == IndexerStorageMode.RAM) || (mode != IndexerStorageMode.RAM && forceindex) || updateindex;

            Console.Write("Loading indexer in {0} mode... ", mode);
            long      m0 = GC.GetTotalMemory(false);
            ISIndexer li = new ISIndexer(mode, IndexerAnalyzer.StandardAnalyzer);

            Console.WriteLine(" done.");

            if (doReindex)
            {
                Console.Write("Data reindexing had been requested: ");
                int origRow = Console.CursorTop;
                int origCol = Console.CursorLeft;

                ConsoleUtils.WriteAt("loading data feed", 0, 0, origRow, origCol);
                List <StaticDataFeed> data = fd.ReadStaticDataFeed();

                if (reset || forceindex)
                {
                    li.ClearAllIndex();
                }

                int i = 1;
                foreach (StaticDataFeed f in data)
                {
                    ConsoleUtils.WriteAt(String.Format("indexing item {0}     ", i), 0, 0, origRow, origCol);
                    li.AddUpdateLuceneIndex(f.ToIXDescriptor());
                    i++;
                }

                li.UpdateMemoryIndexFromFS();
                data.Clear();
                data = null;
                GC.Collect();
                ConsoleUtils.WriteAt(" completed.           ", 0, 0, origRow, origCol);
                Console.WriteLine();
            }

            long m1 = GC.GetTotalMemory(false);

            Console.WriteLine("Index is using {0} kB of RAM", (m1 - m0) > 0 ? (m1 - m0) / (long)1024 : 0);

            if (mode == IndexerStorageMode.FSRAM && ca.Options.IsOptionEnabled("simfsramrefresh"))
            {
                Console.WriteLine("Simulate index refresh: {0}", li.UpdateMemoryIndexFromFS());
            }

            if (ca.Arguments.Count > 0 && ca.Arguments[0] == "search")
            {
                Console.WriteLine("[press a key to execute search]");
                Console.ReadLine();

                IXRequest req = new IXRequest(ca.Arguments[1], 0, -1, (usescoring) ? IXRequestFlags.None : IXRequestFlags.UseScore);

                DateTime          t1    = DateTime.Now;
                IXQueryCollection reply = li.Search(req);
                DateTime          t2    = DateTime.Now;

                if (reply.Status == IXQueryStatus.Success)
                {
                    foreach (IXQuery r in reply.Results)
                    {
                        Console.WriteLine("Result matching{2}: {0} \"{1}\"", r["id"].String, r["titolo"].String, (usescoring) ? String.Format(" at {0:n2}%", r.Score) : String.Empty);
                    }
                }

                Console.WriteLine("Search stats: scope:{0} items status:{2} time:{1}ms results:{3} items", li.IndexSize, Convert.ToInt32((t2 - t1).TotalMilliseconds), reply.Status, reply.Count);
            }
        }
Пример #4
0
 /// <summary>
 /// constructor
 /// </summary>
 /// <param name="indexFullPath"></param>
 /// <param name="indexMode"></param>
 /// <param name="analyzer"></param>
 /// <param name="dataItemHandler"></param>
 /// <param name="perFieldAnalyzers"></param>
 public ISIndexer(string indexFullPath, IndexerStorageMode indexMode, IndexerAnalyzer analyzer, Dictionary <string, IndexerAnalyzer> perFieldAnalyzers = null)
     : this(indexFullPath, indexMode, null, analyzer, perFieldAnalyzers)
 {
 }