2016-06-29 10 views
1

Upgrade von Elastic & NEST-Suche von 1.6.2 auf 2.3.3.Shared Index Mapping-Konfiguration in NEST 2.3.3?

Wir haben in der Lage, die gleiche PutMappingDescriptor zwischen ElasticClient.CreateIndex() und ElasticClient.Map() zu teilen.

Aber in 2.3.3, die CreateIndex muss TypeMappingDescriptor und Map erfordert PutMappingDescriptor.

Wie teilen wir die gleiche Mapping-Konfiguration?

+0

I Ich bin auch an der gleichen Frage interessiert. – foresightyj

Antwort

0

Die offiziellen Nest-Entwickler beantworteten diese Frage in ihrem Github, linked here.

Grundsätzlich verwenden Sie nicht Func<PutMappingDescriptor<Project>, IPutMappingRequest>, sondern PutMappingDescriptor<Project> direkt. indem Sie eine PutMappingDescriptor<Project> neu erstellen und von dort aus Ihr flüssiges Mapping aufbauen.

Das Erstellen des Index erwartet ITypeMapping, während der Aktualisierungsindex IPutMappingRequest erwartet, der ITypeMapping implementiert. So können Sie beide mit PutMappingDescriptor erfüllen.

einen Index, Gebrauch zu erstellen:

`` ` client.CreateIndex ("Projekte", c => c .Mappings (ms => ms .MAP (m => Getmapping()) ) );

`` ` wo ignorieren Sie m im Lambda übergeben und verwenden Sie die, die Sie erstellt haben. Der Grund, warum Sie das tun können, kann source code in NEST zu finden, wo es eine leere TypeMappingDescriptor für Sie schafft weiter zu bauen:

public MappingsDescriptor Map<T>(Func<TypeMappingDescriptor<T>, ITypeMapping> selector) where T : class => Assign(typeof (T), selector?.Invoke(new TypeMappingDescriptor<T>()));

Mapping zu aktualisieren, zu tun:

client.Map(GetMapping());