2016-04-12 12 views
0

Toplu dizin sorgusu için kullanılan JsonSerializer için Objects TypeHandling özelliğini etkinleştirmem gerekiyor. Ancak, NEST için Serializer ayarlarını değiştirdiğimde, toplu sorgu bir bütün olarak yanlış serileştiriliyor.NEST'te ham toplu indeks sorgusu gönderin veya YALNIZCA belgeyi belirli bir şekilde serileştirin

kullandığım seri hale:

public class SearchJsonNetSerializer : JsonNetSerializer 
{ 
    public SearchJsonNetSerializer(IConnectionSettingsValues settings) 
     : base(settings) 
    { 
    } 

    protected override void ModifyJsonSerializerSettings(JsonSerializerSettings settings) 
    { 
     settings.Formatting = Formatting.None; 
     settings.TypeNameHandling = TypeNameHandling.Objects; 
    } 
} 

aldığım çıkışı: ikinci hat doğrudur ancak yuva bir şekilde ilk satırı seri hale getirmek için seri hale ayarları kullanılmıştır

{"index":{"$type":"Nest.BulkIndexOperation`1[[TestProject.TestDTO, TestProject]], Nest","_type":"testdto","_id":"146949756709543936"}} 
{"$type":"TestProject.TestDTO, TestProject","Id":146949756709543936,"Title":"test","TitleRaw":"test"} 

bu isteği tamamen yok eder.

Değiştirilen serileştirmeyi yalnızca asıl nesneye uygulamak için bir yol var mı? Değilse, toplu bir sorgu için istek olarak ham, hazırlanmış bir json dizesi göndermek için bir yolu var mı? Ben Eski sürümde bu işlevselliği gördük ancak şimdiki bir arada - 2.0, ben sadece bunu yapmak için bir yol bulamıyorum ...

cevap

2

Bu https://github.com/elastic/elasticsearch-net/issues/1155

ilişkilidir yazık ki yapamayacağınız el altında sorunu çözecek JSON.NET

[JsonObject(TypeNameHandling = TypeNameHandling.Objects)] 
public class MyPoco {} 

aşağıdaki, yalnızca belirli türleri için bu typenamehandling sağlayan. Ne yazık ki sadece özelliklerde belirtilebilir. Orada harika bir özellik talebi yapardım.

Ya türünüz için özel bir serileştirici yazarken iki seçeneği vardır veya bunları önceden atamış ve düşük düzeyli istemciyi kullanarak gönderebilirsiniz, ancak meta verileri el ile de eklemeniz gerekir.

var client = new ElasticClient().LowLevel.Bulk<BulkResponse>("index", "type", new[] 
{ 
    "", 
}); 

Nükleer Tehlike indeksi $type gerek kalmadan gerçek kovaryant arama sonuçları elde etmek çeşitli yollar sunmak yapar: Bu gibi

https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/covariant-search-results.html

+0

Aylak :(Ben, düşük seviyeli istemcisi kullanarak kaçınmak istedim benim NEST müşteri ile değiştirmek istedim önceki yaklaşım.Ama, düşük seviye istemci kullanımı kalır sanırım. – Slowacki

+0

@Slowacki "tür" bilgi ihtiyacın belirli bir nedeni var mı? Belki de sorun farklı bir çözüm ile çözülebilir ? –

+0

Birkaç DTO sınıfını kullanıyorum. Aynı arayüzü uygular. TypeNameHandling.Objects endekslemeye ayarlandığında, aramaya ElasticsearchResponse'deki isabetler doğru DTO sınıflarına geri eşlenir. – Slowacki

İlgili konular