using System; using System.Collections.Generic; using System.Linq; using System.Text; using Lucene.Net.Analysis; using Lucene.Net.Analysis.Standard; using Lucene.Net.Documents; using Lucene.Net.Index; using Lucene.Net.QueryParsers; using Lucene.Net.Search; using Lucene.Net.Store; namespace Basic_Concepts { class Program { static void Main(string[] args) { //Setup indexer Directory directory = FSDirectory.GetDirectory("LuceneIndex"); Analyzer analyzer = new StandardAnalyzer(); IndexWriter writer = new IndexWriter(directory, analyzer); IndexReader red = IndexReader.Open(directory); int totDocs = red.MaxDoc(); red.Close(); //Add documents to the index string text = String.Empty; Console.WriteLine("Enter the text you want to add to the index:"); Console.Write(">"); int txts = totDocs; int j = 0; while ((text = Console.ReadLine()) != String.Empty) { AddTextToIndex(txts++, text, writer); j++; Console.Write(">"); } writer.Optimize(); //Close the writer writer.Flush(); writer.Close(); Console.WriteLine(j + " lines added, "+txts+" documents total"); //Setup searcher IndexSearcher searcher = new IndexSearcher(directory); QueryParser parser = new QueryParser("postBody", analyzer); Console.WriteLine("Enter the search string:"); Console.Write(">"); while ((text = Console.ReadLine()) != String.Empty) { Search(text, searcher, parser); Console.Write(">"); } //Clean up everything searcher.Close(); directory.Close(); } private static void Search(string text, IndexSearcher searcher, QueryParser parser) { //Supply conditions Query query = parser.Parse(text); //Do the search Hits hits = searcher.Search(query); //Display results Console.WriteLine("Searching for '" + text + "'"); int results = hits.Length(); Console.WriteLine("Found {0} results", results); for (int i = 0; i < results; i++) { Document doc = hits.Doc(i); float score = hits.Score(i); Console.WriteLine("--Result num {0}, score {1}", i + 1, score); Console.WriteLine("--ID: {0}", doc.Get("id")); Console.WriteLine("--Text found: {0}" + Environment.NewLine, doc.Get("postBody")); } } private static void AddTextToIndex(int txts, string text, IndexWriter writer) { Document doc = new Document(); doc.Add(new Field("id", txts.ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED)); doc.Add(new Field("postBody", text, Field.Store.YES, Field.Index.TOKENIZED)); writer.AddDocument(doc); } } }