Exemple #1
0
        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;
        }
Exemple #2
0
        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);
        }