public IEnumerable <Document> Search(string expression, int maxResults = 100) { if (expression == null) { throw new ArgumentNullException(nameof(expression)); } try { var directory = SimpleFSDirectory.Open(indexDirectory); using (var indexReader = IndexReader.Open(directory, true)) { using (var indexSearcher = new IndexSearcher(indexReader)) { using (var analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30)) { var parser = new MultiFieldQueryParser(Lucene.Net.Util.Version.LUCENE_30, defaultFields.ToArray(), analyzer); //var parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, "headline", analyzer); var query = parser.Parse(expression); var hits = indexSearcher.Search(query, null, maxResults).ScoreDocs; var docs = hits.Select(e => indexSearcher.Doc(e.Doc)).ToList(); // Need ToList as indexSearcher will be disposed... return(docs); } } } } catch { return(null); } }
private IEnumerator IndexInternal <T>(IEnumerable <T> items, int timeSlice = 13, bool processYields = true) { if (items == null) { throw new ArgumentNullException(nameof(items)); } var type = typeof(T); if (!indexers.ContainsKey(type)) { throw new ArgumentOutOfRangeException(nameof(items), "At least one index must be defined using DefineIndexTerm for a type before it can be indexed."); } var keyIndexer = indexers[type].PrimaryKey; var definitions = indexers[type].Indexers; var analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30); var stopwatch = new Stopwatch(); stopwatch.Start(); var count = 0; var notNullItems = items.Where(e => e != null); var total = notNullItems.Count(); OnProgress("Indexing", 0, total); var directory = SimpleFSDirectory.Open(indexDirectory); var create = !IndexReader.IndexExists(directory); using (var writer = new IndexWriter(directory, analyzer, create, IndexWriter.MaxFieldLength.LIMITED)) { foreach (var item in notNullItems) { var doc = new Document(); Term term = null; if (keyIndexer != null) { term = new Term(keyIndexer.Name, keyIndexer.Indexer(item)); } foreach (var definition in definitions) { var value = definition.Indexer(item); var field = new Field(definition.Name, value, definition.StoreType(), definition.IndexType()); doc.Add(field); } if (term != null) { writer.UpdateDocument(term, doc); } else { writer.AddDocument(doc); } if (stopwatch.ElapsedMilliseconds >= timeSlice) { OnProgress("Indexing", count, total); if (processYields) { yield return(null); } stopwatch.Restart(); } ++count; } OnProgress("Indexing", count, total); if (processYields) { yield return(null); } OnProgress("Optimizing", 0, 1); if (processYields) { yield return(null); } writer.Optimize(); writer.Commit(); OnProgress("Optimizing", 1, 1); } }
public static void TestFlexLuceneFS(string[] args) { string ixdir = string.Empty; if (IsLinux) { ixdir = "/home/master/flexlucene/indexes"; } else { ixdir = @"c:\temp\flexlucene\indexes"; } StandardAnalyzer analyzer = new StandardAnalyzer(); //FlexLucene.Store.Directory index = SimpleFSDirectory.Open(java.nio.file.Paths.get(ixdir),SimpleFSLockFactory.INSTANCE); FlexLucene.Store.Directory index = SimpleFSDirectory.Open(java.nio.file.Paths.get(ixdir)); // FlexLucene.Store.Directory index = NIOFSDirectory.Open(java.nio.file.Paths.get(ixdir)); config = new IndexWriterConfig(analyzer); cnf = new FacetsConfig(); cnf.SetIndexFieldName("title", "facet_title"); cnf.SetIndexFieldName("isbn", "facet_isbn"); LuceneTest.taxoDir = (FlexLucene.Store.Directory) new RAMDirectory(); LuceneTest.taxoWriter = (TaxonomyWriter) new FlexLucene.Facet.Taxonomy.Directory.DirectoryTaxonomyWriter(LuceneTest.taxoDir, IndexWriterConfigOpenMode.CREATE); IndexWriter w = new IndexWriter(index, LuceneTest.config); addDoc(w, "Lucene in Action", "9900001"); addDoc(w, "Lucene for Dummies", "9900002"); addDoc(w, "Lucene for Dummies 2", "9900003"); w.close(); String querystr = "isbn:99*"; Query q = new QueryParser("title", (Analyzer)analyzer).Parse(querystr); int hitsPerPage = 10; IndexReader reader = (IndexReader)DirectoryReader.Open(index); IndexSearcher searcher = new IndexSearcher(reader); TopScoreDocCollector collector = TopScoreDocCollector.Create(hitsPerPage); searcher.Search(q, (Collector)collector); ScoreDoc[] hits = collector.TopDocs().ScoreDocs; Console.WriteLine("Found " + hits.Length + " hits."); for (int i = 0; i < hits.Length; ++i) { int docId = hits [i].Doc; Document d = searcher.Doc(docId); Console.WriteLine(i + 1 + ". " + d.Get("isbn") + "\t" + d.Get("title")); } SortedSetDocValuesReaderState state = (SortedSetDocValuesReaderState) new DefaultSortedSetDocValuesReaderState(reader, "facet_isbn"); FacetsCollector fc = new FacetsCollector(); FacetsCollector.Search(searcher, q, 10, (Collector)fc); Facets facets = (Facets) new SortedSetDocValuesFacetCounts(state, fc); FacetResult result = facets.GetTopChildren(10, "isbn", new String[0]); for (int j = 0; j < result.ChildCount; ++j) { LabelAndValue lv = result.LabelValues [j]; Console.WriteLine(String.Format("Label={0}, Value={1}", lv.Label, lv.Value)); } reader.close(); }