Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Test
- {
- private static object syncObj = new object();
- private System.Threading.Timer timer;
- private Searcher searcher;
- private RAMDirectory idx = new RAMDirectory();
- public Test()
- {
- this.timer = new System.Threading.Timer(this.Timer_Elapsed, null, TimeSpan.Zero, TimeSpan.FromMinutes(3));
- }
- private Searcher ESearcher
- {
- get
- {
- return this.searcher;
- }
- set
- {
- lock (syncObj)
- {
- this.searcher = value;
- }
- }
- }
- public Document CreateDocument(string title, string content)
- {
- Document doc = new Document();
- doc.Add(new Field("A", title, Field.Store.YES, Field.Index.NO));
- doc.Add(new Field("B", content, Field.Store.YES, Field.Index.ANALYZED));
- return doc;
- }
- public List<Document> Search(Searcher searcher, string queryString)
- {
- List<Document> documents = new List<Document>();
- QueryParser parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, "B", new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30));
- Query query = parser.Parse(queryString);
- int hitsPerPage = 5;
- TopScoreDocCollector collector = TopScoreDocCollector.Create(2 * hitsPerPage, true);
- this.ESearcher.Search(query, collector);
- ScoreDoc[] hits = collector.TopDocs().ScoreDocs;
- int hitCount = collector.TotalHits > 10 ? 10 : collector.TotalHits;
- for (int i = 0; i < hitCount; i++)
- {
- ScoreDoc scoreDoc = hits[i];
- int docId = scoreDoc.Doc;
- float docScore = scoreDoc.Score;
- Document doc = searcher.Doc(docId);
- documents.Add(doc);
- }
- return documents;
- }
- private void Timer_Elapsed(object sender)
- {
- this.Log("Started Updating the Search Indexing");
- // Get New data to Index
- using (IndexWriter writer = new IndexWriter(this.idx, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30), true, IndexWriter.MaxFieldLength.LIMITED))
- {
- foreach (var e in es)
- {
- writer.AddDocument(this.CreateDocument(e.Value.ToString(), e.Key));
- }
- writer.Optimize();
- }
- this.ESearcher = new IndexSearcher(this.idx);
- this.Log("Completed Updating the Search Indexing");
- }
- public Result ServeRequest()
- {
- var documents = this.Search(this.EntitySearcher, searchTerm);
- //somelogic
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement