使用Elasticsearch进行映射



当尝试从ElasticSearch读取某些字段时,我注意到,如果我不包含文本属性,那么它不会将变量名称映射到字段。它将为该特定字段读取null。假设ES中有一个字段ValueId,类型为text。在我的模特课上,我有public string ValueId {get; set;}ValueId应该有该变量的值,但是当我不添加Elasticsearch属性属性即[Text(Name = "ValueId")]时,它返回null。

现在,如果我像下面这样设置它,那么它将返回该变量的值。

[Text(Name = "ValueId")]
public string ValueId {get; set;}

我猜是因为驼色的外壳,对吗?

另一个注意事项,是否有一种方法,我可以设置属性名称(Name = "")动态?就像在创建一个方法来做这件事。

使用NEST自动映射,它总是帮助我解决这些问题:https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/auto-map.html

另一点是正确配置您的elastic与NEST,下面的例子显示了正确的配置方法:

public static void AddElasticsearch(this IServiceCollection services, IConfiguration configuration, bool configureDefaultQuery = true)
{
var defaultIndex = configuration["ElasticsearchSettings:defaultIndex"];
var basicAuthUser = configuration["ElasticsearchSettings:username"];
var basicAuthPassword = configuration["ElasticsearchSettings:password"];
var settings = new ConnectionSettings(new Uri(configuration["ElasticsearchSettings:uri"]));
if (!string.IsNullOrEmpty(defaultIndex))
settings = settings.DefaultIndex(defaultIndex);
if (!string.IsNullOrEmpty(basicAuthUser) && !string.IsNullOrEmpty(basicAuthPassword))
settings = settings.BasicAuthentication(basicAuthUser, basicAuthPassword);
var client = new ElasticClient(settings);
services.AddSingleton<IElasticClient>(client);
}

Se mesmo assim continuar vindo nulo, experimuuar a configuracaro:settings.DefaultFieldNameInferrer(p => p);

更多细节可以在这个示例项目中找到:https://github.com/hgmauri/elasticsearch-with-nest

最新更新