Example #1
0
        public IEnumerable<AddressPartIndexSearch> Search(string filter)
        {
            if (string.IsNullOrEmpty(filter)) yield break;
            var queryBuilder = new StringBuilder();
            foreach (Match match in SPLIT.Matches(filter))
            {
                if (queryBuilder.Length > 0) queryBuilder.Append(" ");
                queryBuilder.Append("+" + match.Value.ToLowerInvariant() + "*");
            }

            var queryString = queryBuilder.ToString();
            if (string.IsNullOrEmpty(queryString)) yield break;

            var parser = new QueryParser(Version.LUCENE_30, "searchName", _analyzer);
            Query query = parser.Parse(queryString);

            var searcher = GetSearcher();
            if (searcher == null) yield break;
            TopDocs hits = searcher.Search(query, int.MaxValue);

            int no = 0;
            var totalHits = hits.TotalHits;
            var lastInfo = new ParsedAddressPartInfo();
            while (no < totalHits)
            {
                lastInfo.No = no;
                lastInfo.TotalHits = totalHits;

                Document doc = searcher.Doc(hits.ScoreDocs[no].Doc);

                AddressPartIndexSearch d = new AddressPartIndexSearch();
                d.Id = doc.Get("id");
                d.PostalCode = doc.Get("postalCode");

                d.Level = int.Parse(doc.Get("lvl"));
                d.Reduction = doc.Get("reduction");
                d.Name = doc.Get("name");
                d.NameWithShortReduction = doc.Get("name_short_reduction");
                d.NameWithReduction = doc.Get("name_reduction");
                d.FullName = doc.Get("fullName");

                d.LastInfo = lastInfo;

                yield return d;
                no++;
            }
        }
Example #2
0
        public IEnumerable<AddressPartIndexSearch> GetByIndex4Search(string index)
        {
            if (!string.IsNullOrEmpty(index) && !_Base.INDEX.IsMatch(index))
            {
                _log.Warn(ClassName + String.Format("Значение: {0} не может быть почтовым индексом", index));
                yield break;
            }

            var parser = new QueryParser(Version.LUCENE_30, "postalCode", _analyzer);
            Query query = parser.Parse("+" + index);

            var searcher = GetSearcher();
            if (searcher == null) yield break;
            TopDocs hits = searcher.Search(query, int.MaxValue);

            int no = 0;
            var totalHits = hits.TotalHits;
            var lastInfo = new ParsedAddressPartInfo();
            while (no < totalHits)
            {
                lastInfo.No = no;
                lastInfo.TotalHits = totalHits;

                Document doc = searcher.Doc(hits.ScoreDocs[no].Doc);
                int lvl = int.Parse(doc.Get("lvl"));
                if (lvl == _Base.LastLevel)
                {
                    AddressPartIndexSearch d = new AddressPartIndexSearch();
                    d.Id = doc.Get("id");
                    d.PostalCode = doc.Get("postalCode");

                    d.Level = lvl;
                    d.Reduction = doc.Get("reduction");
                    d.Name = doc.Get("name");
                    d.NameWithShortReduction = doc.Get("name_short_reduction");
                    d.NameWithReduction = doc.Get("name_reduction");
                    d.FullName = doc.Get("fullName");

                    d.LastInfo = lastInfo;

                    yield return d;
                }
                no++;
            }
        }