protected virtual IDictionary<string, string> GenerateJsonCompatibleKeyValues(SearchIndexRequest request) { var kvs = new Dictionary<string, string>(); if (!string.IsNullOrWhiteSpace(request.Expression)) kvs.Add(KeyNames.Expression, request.Expression); if (request.HasSortings()) kvs.Add(KeyNames.Sort, DocumentSerializer.ToJsonArray(request.Sort.ToArray())); if (!string.IsNullOrWhiteSpace(request.Bookmark)) kvs.Add(KeyNames.Bookmark, request.Bookmark); if (request.Stale.HasValue) kvs.Add(KeyNames.Stale, request.Stale.Value.AsString()); if (request.Limit.HasValue) kvs.Add(KeyNames.Limit, DocumentSerializer.ToJson(request.Limit.Value)); if (request.IncludeDocs.HasValue) kvs.Add(KeyNames.IncludeDocs, DocumentSerializer.ToJson(request.IncludeDocs.Value)); if (request.Ranges != null) kvs.Add(KeyNames.Ranges, Serializer.Serialize(request.Ranges)); if (request.HasCounts()) kvs.Add(KeyNames.Counts, DocumentSerializer.ToJsonArray(request.Counts.ToArray())); if (!string.IsNullOrWhiteSpace(request.GroupField)) kvs.Add(KeyNames.GroupField, request.GroupField); if (request.GroupLimit.HasValue) kvs.Add(KeyNames.GroupLimit, DocumentSerializer.ToJson(request.GroupLimit.Value)); if (request.HasGroupSortings()) kvs.Add(KeyNames.GroupSort, DocumentSerializer.ToJsonArray(request.GroupSort.ToArray())); if (request.DrillDown.HasValue) kvs.Add(KeyNames.DrillDown, DocumentSerializer.ToJsonArray(new []{ request.DrillDown.Value.Key, request.DrillDown.Value.Value })); return kvs; }