public int FindChangedAndIndex() { var lastDateTimeFile = Path.Combine(path, "last.time"); var lastDateTime = DateTime.MinValue; try { if (File.Exists(lastDateTimeFile)) { lastDateTime = DateTime.Parse(File.ReadAllText(lastDateTimeFile)).ToUniversalTime(); } } catch (FormatException) { } catch (ArgumentNullException) { } var copyLastDateTime = lastDateTime; lastDateTime = DateTime.UtcNow; var texts = SelectTextsForIndex(copyLastDateTime, true); if (0 < texts.Count) { var directory = GetOrCreateDirectory(path); var analyzer = new AnalyzersProvider().GetAnalyzer(tenant.GetCulture().TwoLetterISOLanguageName); var create = directory.ListAll().Length == 0; var index = new IndexWriter(directory, analyzer, create, IndexWriter.MaxFieldLength.UNLIMITED); try { foreach (var t in texts) { var term = new Term("Id", t.Item1); if (string.IsNullOrEmpty(t.Item2)) { index.DeleteDocuments(term); } else { var doc = new Document(); doc.Add(new Field("Id", t.Item1, Field.Store.YES, Field.Index.NOT_ANALYZED, Field.TermVector.YES)); doc.Add(new Field("Text", t.Item2, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.NO)); index.UpdateDocument(term, doc); } } } finally { index.Optimize(); index.Commit(); index.Close(); } File.WriteAllText(lastDateTimeFile, lastDateTime.ToString("o")); } return(texts.Count); }
public int FindChangedAndIndex() { var lastDateTimeFile = Path.Combine(path, "last.time"); var lastDateTime = DateTime.MinValue; try { if (File.Exists(lastDateTimeFile)) { lastDateTime = DateTime.Parse(File.ReadAllText(lastDateTimeFile)).ToUniversalTime(); } } catch (FormatException) { } catch (ArgumentNullException) { } var copyLastDateTime = lastDateTime; lastDateTime = DateTime.UtcNow; var texts = SelectTextsForIndex(copyLastDateTime, true); if (0 < texts.Count) { var directory = GetOrCreateDirectory(path); var analyzer = new AnalyzersProvider().GetAnalyzer(tenant.GetCulture().TwoLetterISOLanguageName); var create = directory.ListAll().Length == 0; var index = new IndexWriter(directory, analyzer, create, IndexWriter.MaxFieldLength.UNLIMITED); try { foreach (var t in texts) { var term = new Term("Id", t.Item1); if (string.IsNullOrEmpty(t.Item2)) { index.DeleteDocuments(term); } else { var doc = new Document(); doc.Add(new Field("Id", t.Item1, Field.Store.YES, Field.Index.NOT_ANALYZED, Field.TermVector.YES)); doc.Add(new Field("Text", t.Item2, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.NO)); index.UpdateDocument(term, doc); } } } finally { index.Optimize(); index.Commit(); index.Close(); } File.WriteAllText(lastDateTimeFile, lastDateTime.ToString("o")); } return texts.Count; }
public TextSearchResult Search(string query, Tenant tenant) { var result = new TextSearchResult(module); if (string.IsNullOrEmpty(query) || !Directory.Exists(path)) { return(result); } var dir = Lucene.Net.Store.FSDirectory.Open(new DirectoryInfo(path)); var searcher = new IndexSearcher(dir, false); try { var analyzer = new AnalyzersProvider().GetAnalyzer(tenant.GetCulture().TwoLetterISOLanguageName); var parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "Text", analyzer); parser.SetDefaultOperator(QueryParser.Operator.AND); if (TextIndexCfg.MaxQueryLength < query.Length) { query = query.Substring(0, TextIndexCfg.MaxQueryLength); } Query q = null; try { q = parser.Parse(query); } catch (Lucene.Net.QueryParsers.ParseException) { } if (q == null) { q = parser.Parse(QueryParser.Escape(query)); } #pragma warning disable 618 var hits = searcher.Search(q); #pragma warning restore 618 for (int i = 0; i < hits.Length(); i++) { var doc = hits.Doc(i); result.AddIdentifier(doc.Get("Id")); } } finally { searcher.Close(); dir.Close(); } return(result); }
public TextSearchResult Search(string query, Tenant tenant) { var result = new TextSearchResult(module); if (string.IsNullOrEmpty(query) || !Directory.Exists(path)) { return result; } var dir = Lucene.Net.Store.FSDirectory.Open(new DirectoryInfo(path)); var searcher = new IndexSearcher(dir, false); try { var analyzer = new AnalyzersProvider().GetAnalyzer(tenant.GetCulture().TwoLetterISOLanguageName); var parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "Text", analyzer); parser.SetDefaultOperator(QueryParser.Operator.AND); if (TextIndexCfg.MaxQueryLength < query.Length) { query = query.Substring(0, TextIndexCfg.MaxQueryLength); } Query q = null; try { q = parser.Parse(query); } catch (Lucene.Net.QueryParsers.ParseException) { } if (q == null) { q = parser.Parse(QueryParser.Escape(query)); } #pragma warning disable 618 var hits = searcher.Search(q); #pragma warning restore 618 for (int i = 0; i < hits.Length(); i++) { var doc = hits.Doc(i); result.AddIdentifier(doc.Get("Id")); } } finally { searcher.Close(); dir.Close(); } return result; }