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); }