public IEnumerable<LocationGroup> FindGroupedLocations(string query, ILocationGroupingStrategy groupingStrategy) { var wildcardQuery = query.Trim() + "*"; var queryFields = groupingStrategy.Fields; if (query.Any(c => Char.IsDigit(c))) queryFields = queryFields.Concat(new List<LocationQueryField>() {_queryFields.HouseNumber}); var luceneQuery = GenerateLuceneQuery(wildcardQuery, queryFields); var collector = new GroupCollector(_locationGroupBuilder, groupingStrategy.Fields); _searcher.Search(luceneQuery, collector); return collector.Groups.OrderBy(g => g.GroupDescription, new AlphanumericComparerFast()); }
public QueryThread(string query, IndexSearcher searcher, int threadno, Analyzer analyzer, Action<string> callback) { _query = query; _searcher = searcher; _threadno = threadno; _analyzer = analyzer; _callback = callback; _formatter = new TitleCaseFormatter(); _formatConditions = new LocationDataFieldFormatConditions(); var queryFields = new LuceneQueryFields(); var collector = new GroupCollector(new LocationGroupBuilder(new ConditionalFormatter<string,LocationDataField>(_formatter,_formatConditions)) , new List<LocationQueryField>() { queryFields.Street, queryFields.Town, queryFields.PostCode }); _collector = collector; }