2017-01-14 2 views
0

Ich erstelle meinen Index mit benutzerdefinierten Zuordnung mein Problem ist, dass Methoden entsprechend der Indizierung wie Index, creatindex etc. ElasticClient nur erhalten Index-Name als Eingabeparameter und erkennen Typname von Name der Klasse, die als generischer Parameter an sie übergeben wird, gibt es eine Möglichkeit, den Namen des Typs an ElasticClient Methoden zum Beispiel CreateIndex-Methode übergeben und erzwingen, dass anstelle der Verwendung des Klassennamens ???Pass Typ Name zu ElasticClient Objekt Nest

hier ist ein Teil meines Code

var qq = Elasticclient.CreateIndex("testindex", a => a.Mappings(f => f.Map<BankPaymentLogModel>(
          b => b.Properties(c => c.String(d => d.Name(e => e.testProperty)) 

         )))); 

jede Hilfe

Antwort

1

Es gibt ein paar Optionen würde geschätzt, die Sie haben für einen anderen Typnamen der einer NEST Angabe wird von dem POCO Namen entnehmen

1.Verwenden der Map<T>(TypeName type, Func<TypeMappingDescriptor<T>, ITypeMapping>>) Überlast-

var createIndexResponse = client.CreateIndex("testindex", a => a 
    .Mappings(f => f 
     .Map<BankPaymentLogModel>("my-type", b => b 
      .Properties(c => c 
       .String(d => d 
        .Name(e => e.testProperty) 
       ) 
      ) 
     ) 
    ) 
); 

Die Verwendung dieser Methode würde jedoch bedeuten, dass Sie für jede Anforderung, bei der BankPaymentLogModel POCO verwendet wird, .Type("my-type") aufrufen müssen, damit derselbe Typname in der Anforderung gesendet wird. So können die folgenden Optionen besser

2.Use ElasticsearchTypeAttribute auf BankPaymentLogModel Typ

[ElasticsearchType(Name = "my-type")] 
public class BankPaymentLogModel 
{ 
    public string testProperty { get; set; } 
} 

var createIndexResponse = client.CreateIndex("testindex", a => a 
    .Mappings(f => f 
     .Map<BankPaymentLogModel>(b => b 
      .Properties(c => c 
       .String(d => d 
        .Name(e => e.testProperty) 
       ) 
      ) 
     ) 
    ) 
); 

3.oder den Typnamen angeben, wenn Sie Attribute nicht mögen, ein Standardtyp Name kann auf konfiguriert werden ConnectionSettings für BankPaymentLogModel

var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200")); 
var connectionSettings = new ConnectionSettings(pool) 
    .InferMappingFor<BankPaymentLogModel>(m => m 
     .TypeName("my-type") 
    ); 

var client = new ElasticClient(connectionSettings); 

var createIndexResponse = client.CreateIndex("testindex", a => a 
    .Mappings(f => f 
     .Map<BankPaymentLogModel>(b => b 
      .Properties(c => c 
       .String(d => d 
        .Name(e => e.testProperty) 
       ) 
      ) 
     ) 
    ) 
); 

Alle drei oben genannten Optionen produzieren folgende Anfrage json

PUT http://localhost:9200/testindex 
{ 
    "mappings": { 
    "my-type": { 
     "properties": { 
     "testProperty": { 
      "type": "string" 
     } 
     } 
    } 
    } 
}