public void can_encode_and_decode_IndexQuery_SortedFields() { SortedField sf1 = new SortedField(Some.String()) { Field = "sf1", Descending = true }; SortedField sf2 = new SortedField(Some.String()) { Field = "sf2", Descending = false }; SortedField[] expected = new[] { sf1, sf2 }; var indexQuery = new IndexQuery(); indexQuery.SortedFields = expected; IndexQuery result = EncodeAndDecodeIndexQuery(indexQuery); Assert.Equal(2, result.SortedFields.Length); Assert.Equal("sf1", result.SortedFields[0].Field); Assert.Equal(true, result.SortedFields[0].Descending); Assert.Equal("sf2", result.SortedFields[1].Field); Assert.Equal(false, result.SortedFields[1].Descending); }
private void AssertQueryDoesNotContainFieldsThatAreNotIndexes(string query, SortedField[] fields) { var hashSet = SimpleQueryParser.GetFields(query); foreach (var field in hashSet) { var f = field; if (f.EndsWith("_Range")) { f = f.Substring(0, f.Length - "_Range".Length); } if (viewGenerator.ContainsField(f) == false) throw new ArgumentException("The field '" + f + "' is not indexed, cannot query on fields that are not indexed"); } if (fields == null) return; foreach (var field in fields) { var f = field.Field; if (f.EndsWith("_Range")) { f = f.Substring(0, f.Length - "_Range".Length); } if (viewGenerator.ContainsField(f) == false) throw new ArgumentException("The field '" + f + "' is not indexed, cannot sort on fields that are not indexed"); } }
private static SortField ToLuceneSortField(IndexDefinition definition, SortedField sortedField) { SortOptions? sortOptions = GetSortOption(definition, sortedField.Field); if (sortOptions == null) return new SortField(sortedField.Field, CultureInfo.InvariantCulture, sortedField.Descending); return new SortField(sortedField.Field, (int) sortOptions.Value, sortedField.Descending); }
private TopDocs ExecuteQuery(IndexSearcher searcher, Query luceneQuery, int start, int pageSize, SortedField[] sortedFields) { if(pageSize == int.MaxValue) // we want all docs { var gatherAllCollector = new GatherAllCollector(); searcher.Search(luceneQuery, gatherAllCollector); return gatherAllCollector.ToTopDocs(); } // NOTE: We get Start + Pagesize results back so we have something to page on if (sortedFields != null && sortedFields.Length > 0) { var sort = new Sort(sortedFields.Select(x => x.ToLuceneSortField(indexDefinition)).ToArray()); return searcher.Search(luceneQuery, null, pageSize + start, sort); } return searcher.Search(luceneQuery, null, pageSize + start); }