コード例 #1
0
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            var request = value as IMultiPercolateRequest;

            if (request == null)
            {
                return;
            }

            var settings = serializer.GetConnectionSettings();
            var elasticsearchSerializer = settings.Serializer;

            if (elasticsearchSerializer == null)
            {
                return;
            }
            foreach (var percolation in request.Percolations)
            {
                var requestParameters = percolation.GetRequestParameters() ?? new PercolateRequestParameters();
                var header            = new PercolateHeader
                {
                    percolate_index      = requestParameters.GetQueryStringValue <string>("percolate_index"),
                    percolate_type       = requestParameters.GetQueryStringValue <string>("percolate_type"),
                    routing              = requestParameters.GetQueryStringValue <string[]>("routing"),
                    preference           = requestParameters.GetQueryStringValue <string>("preference"),
                    percolate_routing    = requestParameters.GetQueryStringValue <string>("percolate_routing"),
                    percolate_preference = requestParameters.GetQueryStringValue <string>("percolate_preference"),
                    version              = requestParameters.GetQueryStringValue <long?>("version")
                };
                var routeValues = (percolation as IRequest)?.RouteValues;
                if (routeValues != null)
                {
                    header.id    = routeValues.Get <Id>("id");
                    header.index = routeValues.Get <IndexName>("index");
                    header.type  = routeValues.Get <TypeName>("type");
                    if (request.Index != null && request.Index.EqualsMarker(header.index))
                    {
                        header.index = null;
                    }
                    if (request.Type != null && request.Type.EqualsMarker(header.type))
                    {
                        header.type = null;
                    }
                }
                var headerBytes = elasticsearchSerializer.SerializeToBytes(header, SerializationFormatting.None);
                writer.WriteRaw($"{{\"{percolation.MultiPercolateName}\":" + headerBytes.Utf8String() + "}\n");
                if (percolation == null)
                {
                    writer.WriteRaw("{}\n");
                }
                else
                {
                    var bodyBytes = elasticsearchSerializer.SerializeToBytes(percolation, SerializationFormatting.None);
                    writer.WriteRaw(bodyBytes.Utf8String() + "\n");
                }
            }
        }
コード例 #2
0
		public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
		{
			var request = value as IMultiPercolateRequest;
			if (request == null) return;
			if (request.Percolations == null) return;

			var settings = serializer.GetConnectionSettings();
			var elasticsearchSerializer = settings.Serializer;
			if (elasticsearchSerializer == null) return;
			foreach (var percolation in request.Percolations)
			{
				var requestParameters = percolation.GetRequestParameters() ?? new PercolateRequestParameters();
				var header = new PercolateHeader
				{
					percolate_index = requestParameters.GetQueryStringValue<string>("percolate_index"),
					percolate_type = requestParameters.GetQueryStringValue<string>("percolate_type"),
					routing = requestParameters.GetQueryStringValue<string[]>("routing"),
					preference = requestParameters.GetQueryStringValue<string>("preference"),
					percolate_routing = requestParameters.GetQueryStringValue<string>("percolate_routing"),
					percolate_preference = requestParameters.GetQueryStringValue<string>("percolate_preference"),
					version = requestParameters.GetQueryStringValue<long?>("version")
				};
				var routeValues = (percolation as IRequest)?.RouteValues;
				if (routeValues != null)
				{
					header.id = routeValues.Get<Id>("id");
					header.index = routeValues.Get<IndexName>("index");
					header.type = routeValues.Get<TypeName>("type");
					if (request.Index != null && request.Index.EqualsMarker(header.index)) header.index = null;
					if (request.Type != null && request.Type.EqualsMarker(header.type)) header.type = null;
				}
				var headerBytes = elasticsearchSerializer.SerializeToBytes(header, SerializationFormatting.None);
				writer.WriteRaw($"{{\"{percolation.MultiPercolateName}\":" + headerBytes.Utf8String() + "}\n");
				if (percolation == null)
				{
					writer.WriteRaw("{}\n");
				}
				else
				{
					var bodyBytes = elasticsearchSerializer.SerializeToBytes(percolation, SerializationFormatting.None);
					writer.WriteRaw(bodyBytes.Utf8String() + "\n");
				}
			}
		}
コード例 #3
0
        public string SerializeMultiPercolate(IMultiPercolateRequest multiPercolateRequest)
        {
            multiPercolateRequest.ThrowIfNull("multiPercolateRequest");
            multiPercolateRequest.Percolations.ThrowIfEmpty("multiPercolateRequest does not define any percolations");
            var sb = new StringBuilder();

            foreach (var p in multiPercolateRequest.Percolations)
            {
                var    operation   = "percolate";
                object body        = p;
                var    op          = new PercolateHeader();
                var    countParams = p.GetRequestParameters() ?? new PercolateCountRequestParameters();
                op.percolate_index      = countParams.GetQueryStringValue <string>("percolate_index");
                op.percolate_type       = countParams.GetQueryStringValue <string>("percolate_type");
                op.routing              = countParams.GetQueryStringValue <string[]>("routing");
                op.preference           = countParams.GetQueryStringValue <string>("preference");
                op.percolate_routing    = countParams.GetQueryStringValue <string>("percolate_routing");
                op.percolate_preference = countParams.GetQueryStringValue <string>("percolate_preference");
                op.version              = countParams.GetQueryStringValue <long?>("version");


                var count     = p as IIndexTypePath <PercolateCountRequestParameters>;
                var percolate = p as IIndexTypePath <PercolateRequestParameters>;
                if (count != null)
                {
                    operation = "count";
                    if (multiPercolateRequest.Index != null && multiPercolateRequest.Index.EqualsMarker(count.Index))
                    {
                        count.Index = null;
                    }
                    op.index = count.Index;
                    op.type  = count.Type;
                    op.id    = p.Id;
                }
                else if (percolate != null)
                {
                    if (multiPercolateRequest.Index != null && multiPercolateRequest.Index.EqualsMarker(percolate.Index))
                    {
                        percolate.Index = null;
                    }
                    op.index = percolate.Index;
                    op.type  = percolate.Type;
                    op.id    = p.Id;
                }
                else
                {
                    continue;
                }

                var opJson = this.Serialize(op, SerializationFormatting.None).Utf8String();
                var action = "{{\"{0}\":{1}}}\n".F(operation, opJson);
                sb.Append(action);
                if (body == null)
                {
                    sb.Append("{}\n");
                    continue;
                }
                var jsonCommand = this.Serialize(body, SerializationFormatting.None).Utf8String();
                sb.Append(jsonCommand + "\n");
            }
            return(sb.ToString());
        }