diff --git a/src/Nest/CommonAbstractions/Response/ResponseBase.cs b/src/Nest/CommonAbstractions/Response/ResponseBase.cs index af309a13e07..20376cd2776 100644 --- a/src/Nest/CommonAbstractions/Response/ResponseBase.cs +++ b/src/Nest/CommonAbstractions/Response/ResponseBase.cs @@ -1,6 +1,4 @@ using System; -using System.Diagnostics; -using System.Linq; using System.Text; using Elasticsearch.Net; using Newtonsoft.Json; diff --git a/src/Nest/Document/Multiple/MultiTermVectors/ElasticClient-MultiTermVectors.cs b/src/Nest/Document/Multiple/MultiTermVectors/ElasticClient-MultiTermVectors.cs index cad267b5e19..13e09311bfd 100644 --- a/src/Nest/Document/Multiple/MultiTermVectors/ElasticClient-MultiTermVectors.cs +++ b/src/Nest/Document/Multiple/MultiTermVectors/ElasticClient-MultiTermVectors.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.Threading.Tasks; using Elasticsearch.Net; @@ -30,10 +31,10 @@ public IMultiTermVectorsResponse MultiTermVectors(Func - public IMultiTermVectorsResponse MultiTermVectors(IMultiTermVectorsRequest request) => + public IMultiTermVectorsResponse MultiTermVectors(IMultiTermVectorsRequest request) => this.Dispatcher.Dispatch( request, - this.LowLevelDispatch.MtermvectorsDispatch + (p, d) => this.LowLevelDispatch.MtermvectorsDispatch(SetCallDetailsOnTermVectors(p), d) ); /// @@ -41,10 +42,26 @@ public Task MultiTermVectorsAsync(Func - public Task MultiTermVectorsAsync(IMultiTermVectorsRequest request) => + public Task MultiTermVectorsAsync(IMultiTermVectorsRequest request) => this.Dispatcher.DispatchAsync( request, - this.LowLevelDispatch.MtermvectorsDispatchAsync + (p, d) => this.LowLevelDispatch.MtermvectorsDispatchAsync(SetCallDetailsOnTermVectors(p), d) ); + + private IMultiTermVectorsRequest SetCallDetailsOnTermVectors(IMultiTermVectorsRequest request) + { + request.RequestParameters.DeserializationOverride((details, stream) => + { + var response = this.Serializer.Deserialize(stream); + + // This is not needed in 5.0 as MultiTermVectorsResponse does not use + // TermVectors response as the collection type + foreach (IResponse termVectorsResponse in response.Documents) + termVectorsResponse.CallDetails = details; + + return response; + }); + return request; + } } } diff --git a/src/Nest/Document/Multiple/MultiTermVectors/MultiTermVectorsResponse.cs b/src/Nest/Document/Multiple/MultiTermVectors/MultiTermVectorsResponse.cs index d2fb5189e93..9107953b7a4 100644 --- a/src/Nest/Document/Multiple/MultiTermVectors/MultiTermVectorsResponse.cs +++ b/src/Nest/Document/Multiple/MultiTermVectors/MultiTermVectorsResponse.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using Newtonsoft.Json; namespace Nest @@ -11,8 +12,6 @@ public interface IMultiTermVectorsResponse : IResponse [JsonObject] public class MultiTermVectorsResponse : ResponseBase, IMultiTermVectorsResponse { - // TODO For 3.0 we should create a separate term vector object rather than using TermVectorsResponse - // since it contains general response data that isn't relevant (i.e. ApiCall, StatusCode, etc...) [JsonProperty("docs")] public IEnumerable Documents { get; internal set; } = new List(); } diff --git a/src/Tests/Document/Multiple/MultiTermVectors/MultiTermVectorsApiTests.cs b/src/Tests/Document/Multiple/MultiTermVectors/MultiTermVectorsApiTests.cs index c2eeb8b6086..936f3fd1dfb 100644 --- a/src/Tests/Document/Multiple/MultiTermVectors/MultiTermVectorsApiTests.cs +++ b/src/Tests/Document/Multiple/MultiTermVectors/MultiTermVectorsApiTests.cs @@ -55,6 +55,8 @@ protected override void ExpectResponse(IMultiTermVectorsResponse response) { response.ShouldBeValid(); response.Documents.Should().NotBeEmpty().And.HaveCount(2).And.OnlyContain(d => d.Found); + response.Documents.All(r => r.IsValid).Should().BeTrue(); + var termvectorDoc = response.Documents.FirstOrDefault(d => d.TermVectors.Count > 0); termvectorDoc.Should().NotBeNull();