protected virtual string GenerateRelativeUrl(SearchIndexRequest request) { return string.Format("/_design/{0}/_search/{1}{2}", request.IndexIdentity.DesignDocument, request.IndexIdentity.Name, GenerateRequestUrlQueryString(request)); }
public virtual HttpRequest Create(SearchIndexRequest request) { Ensure.That(request, "request").IsNotNull(); return new HttpRequest(HttpMethod.Get, GenerateRelativeUrl(request)) .SetRequestTypeHeader(request.GetType()); }
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; }
protected virtual string GenerateQueryStringParams(SearchIndexRequest request) { return string.Join("&", GenerateJsonCompatibleKeyValues(request) .Select(kv => string.Format("{0}={1}", kv.Key, Uri.EscapeDataString(kv.Value)))); }
protected virtual string GenerateRequestUrlQueryString(SearchIndexRequest request) { var p = GenerateQueryStringParams(request); return string.IsNullOrEmpty(p) ? string.Empty : string.Concat("?", p); }