예제 #1
0
        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);
        }
예제 #2
0
파일: Index.cs 프로젝트: dplaskon/ravendb
        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");
            }
        }
예제 #3
0
 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);
 }
예제 #4
0
파일: Index.cs 프로젝트: Inferis/ravendb
    	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);
        }