public void Build() { foreach (var d in _indexWrite.Sort[1].Values) { d.SearchName = d.Name.ToLower(); SetNameWithReduction(d); d.FullName = d.NameWithReduction; } for (int level = 2; level <= 5; level++) { foreach (var d in _indexWrite.Sort[level].Values) { var key = AddressParser.GetParentCode(level, d.Id); if (!_indexWrite.Index.ContainsKey(key)) { _log.Warn(ClassName + String.Format("Не найден родитель с кодом: '{0}' для элемента: '{1}'", key, d.Id)); continue; } AddressPartIndexWrite p = _indexWrite.Index[key]; d.SearchName = p.SearchName + " " + d.Name.ToLower(); SetNameWithReduction(d); d.FullName = d.NameWithReduction + ", " + p.FullName; } } foreach (var d in _indexWrite.Index.Values) { if (string.IsNullOrEmpty(d.SearchName)) continue; int level = d.Level; AddressPartIndexWrite p = d; while (level > 1 && string.IsNullOrEmpty(p.PostalCode)) { p = GetParent(level, d.Id); level--; } d.SearchName = !string.IsNullOrEmpty(p.PostalCode) ? p.PostalCode + " " + d.SearchName : d.SearchName; d.FullName = !string.IsNullOrEmpty(p.PostalCode) ? d.FullName + ", " + p.PostalCode : d.FullName; } using (var fsDirectory = FSDirectory.Open(_indexDirectory)) using (var writer = new IndexWriter(fsDirectory, _analyzer, true, IndexWriter.MaxFieldLength.LIMITED)) { writer.UseCompoundFile = true; foreach (var d in _indexWrite.Index.Values) { var doc = CreateDocument(d); if(doc != null) writer.AddDocument(doc); } writer.Flush(true, true, true); writer.Optimize(true); writer.Commit(); } _indexWrite = null; }
public void Clear() { using (var fsDirectory = FSDirectory.Open(_indexDirectory)) using (var writer = new IndexWriter(fsDirectory, _analyzer, true, IndexWriter.MaxFieldLength.LIMITED)) writer.DeleteAll(); _indexWrite = new IndexWriteRamStorage(); _reduction = new ReductionRamStorage(_indexDirectory); }