2017-01-14 4 views
0

Я создаю свой индекс с пользовательским сопоставлением. Моя проблема заключается в том, что методы, соответствующие индексированию, такие как index, createindex и т. Д. ElasticClient, получают только имя индекса в качестве входного параметра и распознают имя типа из имени класс, который передается им как общий параметр, есть способ передать имя типа методам ElasticClient, например, метод CreateIndex и заставить его принять, что вместо использования имени класса ???имя типа передачи для объекта ElasticClient Nest

здесь является частью моего кода

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

         )))); 

любая помощь будет оценена

ответ

1

Есть несколько вариантов, которые у вас есть для указания другого имени типа к одному NEST будет вывести из названия POCO

1.Use от перегрузки Map<T>(TypeName type, Func<TypeMappingDescriptor<T>, ITypeMapping>>)

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) 
       ) 
      ) 
     ) 
    ) 
); 

Использование этого метода, однако, означало бы, что вам нужно будет позвонить .Type("my-type") для каждого запроса, где используется 0CPOCO, так что в запросе будет отправлено одно и то же имя типа. Таким образом, следующие опции могут быть лучше

2.Use ElasticsearchTypeAttribute на BankPaymentLogModel типа, чтобы указать имя типа

[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.Or, если вам не нравится, атрибуты, имя типа по умолчанию может быть настроен на ConnectionSettings для 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) 
       ) 
      ) 
     ) 
    ) 
); 

Все 3 варианта выше производят следующий запрос JSon

PUT http://localhost:9200/testindex 
{ 
    "mappings": { 
    "my-type": { 
     "properties": { 
     "testProperty": { 
      "type": "string" 
     } 
     } 
    } 
    } 
} 
Смежные вопросы