public static Sort GetSort(this IndexQuery self, Filter filter, IndexDefinition indexDefinition) { if (self.SortedFields == null || self.SortedFields.Length <= 0) { return(null); } var isSpatialIndexQuery = self is SpatialIndexQuery; return(new Sort(self.SortedFields .Select(sortedField => { if (sortedField.Field.StartsWith(Constants.RandomFieldName)) { var parts = sortedField.Field.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries); if (parts.Length < 2) // truly random { return new RandomSortField(Guid.NewGuid().ToString()); } return new RandomSortField(parts[1]); } if (isSpatialIndexQuery && sortedField.Field == Constants.DistanceFieldName) { var dsort = new Lucene.Net.Spatial.Tier.DistanceFieldComparatorSource((Lucene.Net.Spatial.Tier.DistanceFilter)filter); return new SortField(Constants.DistanceFieldName, dsort, sortedField.Descending); } var sortOptions = GetSortOption(indexDefinition, sortedField.Field); if (sortOptions == null || sortOptions == SortOptions.None) { return new SortField(sortedField.Field, CultureInfo.InvariantCulture, sortedField.Descending); } return new SortField(sortedField.Field, (int)sortOptions.Value, sortedField.Descending); }) .ToArray())); }
public static Sort GetSort(this IndexQuery self, Filter filter, IndexDefinition indexDefinition) { if (self.SortedFields == null || self.SortedFields.Length <= 0) { return(null); } var isSpatialIndexQuery = self is SpatialIndexQuery; return(new Sort(self.SortedFields .Select(sortedField => { if (isSpatialIndexQuery && sortedField.Field == Constants.DistanceFieldName) { var dsort = new Lucene.Net.Spatial.Tier.DistanceFieldComparatorSource((Lucene.Net.Spatial.Tier.DistanceFilter)filter); return new SortField(Constants.DistanceFieldName, dsort, sortedField.Descending); } var sortOptions = GetSortOption(indexDefinition, sortedField.Field); if (sortOptions == null) { return new SortField(sortedField.Field, CultureInfo.InvariantCulture, sortedField.Descending); } return new SortField(sortedField.Field, (int)sortOptions.Value, sortedField.Descending); }) .ToArray())); }
internal override Lucene.Net.Search.Sort GetSort(Lucene.Net.Search.Filter filter, IndexDefinition indexDefinition) { if (SortByDistance == false) return base.GetSort(filter, indexDefinition); var dsort = new Lucene.Net.Spatial.Tier.DistanceFieldComparatorSource((Lucene.Net.Spatial.Tier.DistanceFilter)filter); return new Lucene.Net.Search.Sort(new Lucene.Net.Search.SortField("foo", dsort, false)); }
public static Sort GetSort(this IndexQuery self, Filter filter, IndexDefinition indexDefinition) { var spatialIndexQuery = self as SpatialIndexQuery; if (spatialIndexQuery != null && spatialIndexQuery.SortByDistance) { var dsort = new Lucene.Net.Spatial.Tier.DistanceFieldComparatorSource((Lucene.Net.Spatial.Tier.DistanceFilter)filter); return(new Sort(new SortField("foo", dsort, false))); } if (self.SortedFields != null && self.SortedFields.Length > 0) { return(new Sort(self.SortedFields.Select(x => ToLuceneSortField(indexDefinition, x)).ToArray())); } return(null); }
public static Sort GetSort(this IndexQuery self, Filter filter, IndexDefinition indexDefinition) { if (self.SortedFields == null || self.SortedFields.Length <= 0) return null; var isSpatialIndexQuery = self is SpatialIndexQuery; return new Sort(self.SortedFields .Select(sortedField => { if (isSpatialIndexQuery && sortedField.Field == Constants.DistanceFieldName) { var dsort = new Lucene.Net.Spatial.Tier.DistanceFieldComparatorSource((Lucene.Net.Spatial.Tier.DistanceFilter)filter); return new SortField(Constants.DistanceFieldName, dsort, sortedField.Descending); } var sortOptions = GetSortOption(indexDefinition, sortedField.Field); if (sortOptions == null || sortOptions == SortOptions.None) return new SortField(sortedField.Field, CultureInfo.InvariantCulture, sortedField.Descending); return new SortField(sortedField.Field, (int)sortOptions.Value, sortedField.Descending); }) .ToArray()); }
public static Sort GetSort(this IndexQuery self, Filter filter, IndexDefinition indexDefinition) { if (self.SortedFields == null || self.SortedFields.Length <= 0) return null; var isSpatialIndexQuery = self is SpatialIndexQuery; return new Sort(self.SortedFields .Select(sortedField => { if(sortedField.Field.StartsWith(Constants.RandomFieldName)) { var parts = sortedField.Field.Split(new[]{';'}, StringSplitOptions.RemoveEmptyEntries); if (parts.Length < 2) // truly random return new RandomSortField(Guid.NewGuid().ToString()); return new RandomSortField(parts[1]); } if (isSpatialIndexQuery && sortedField.Field == Constants.DistanceFieldName) { var dsort = new Lucene.Net.Spatial.Tier.DistanceFieldComparatorSource((Lucene.Net.Spatial.Tier.DistanceFilter)filter); return new SortField(Constants.DistanceFieldName, dsort, sortedField.Descending); } var sortOptions = GetSortOption(indexDefinition, sortedField.Field); if (sortOptions == null || sortOptions == SortOptions.None) return new SortField(sortedField.Field, CultureInfo.InvariantCulture, sortedField.Descending); return new SortField(sortedField.Field, (int)sortOptions.Value, sortedField.Descending); }) .ToArray()); }
public static Sort GetSort(this IndexQuery self, Filter filter, IndexDefinition indexDefinition) { var spatialIndexQuery = self as SpatialIndexQuery; if(spatialIndexQuery != null && spatialIndexQuery.SortByDistance) { var dsort = new Lucene.Net.Spatial.Tier.DistanceFieldComparatorSource((Lucene.Net.Spatial.Tier.DistanceFilter)filter); return new Sort(new SortField("foo", dsort, false)); } if (self.SortedFields != null && self.SortedFields.Length > 0) return new Sort(self.SortedFields.Select(x => ToLuceneSortField(indexDefinition, x)).ToArray()); return null; }
internal override Lucene.Net.Search.Sort GetSort(IndexDefinition indexDefinition) { if (SortByDistance == false) return base.GetSort(indexDefinition); var dq = new Lucene.Net.Spatial.Tier.DistanceQueryBuilder( Latitude, Longitude, Radius, SpatialIndex.LatField, SpatialIndex.LngField, Lucene.Net.Spatial.Tier.Projectors.CartesianTierPlotter.DefaltFieldPrefix, true); var dsort = new Lucene.Net.Spatial.Tier.DistanceFieldComparatorSource(dq.DistanceFilter); return new Lucene.Net.Search.Sort(new Lucene.Net.Search.SortField("foo", dsort, false)); }