使用 Elasticsearch 进行映射
Mapping with Elasticsearch
尝试从 ElasticSearch 读取某些字段时,我注意到如果我不包含文本属性,那么它不会将变量名映射到该字段。对于该特定字段,它将读取 null。假设我在 ES 中有一个名为 ValueId
的字段,类型为 text
。在我的模型中 class 我有 public string ValueId {get; set;}
。 ValueId
应该具有该变量的值,但是当我不添加 Elasticsearch 属性 属性时,即 [Text(Name = "ValueId")]
它 return 为空。
现在,如果我有如下内容,那么它将 return 该变量的值。
[Text(Name = "ValueId")]
public string ValueId {get; set;}
我的猜测是因为骆驼外壳,对吗?
另一方面,有没有一种方法可以动态设置 属性 名称(Name = "")
?就像创建一个方法来执行此操作一样。
使用 NEST Automapping,它总能帮助我解决这些问题:https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/auto-map.html
还有一点就是正确配置NEST的elastic,下面的例子展示了正确的配置方式:
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);
}
请继续使用 vindo nulo,使用配置进行实验:settings.DefaultFieldNameInferrer(p => p);
可以在这个示例项目中找到更多详细信息:https://github.com/hgmauri/elasticsearch-with-nest
尝试从 ElasticSearch 读取某些字段时,我注意到如果我不包含文本属性,那么它不会将变量名映射到该字段。对于该特定字段,它将读取 null。假设我在 ES 中有一个名为 ValueId
的字段,类型为 text
。在我的模型中 class 我有 public string ValueId {get; set;}
。 ValueId
应该具有该变量的值,但是当我不添加 Elasticsearch 属性 属性时,即 [Text(Name = "ValueId")]
它 return 为空。
现在,如果我有如下内容,那么它将 return 该变量的值。
[Text(Name = "ValueId")]
public string ValueId {get; set;}
我的猜测是因为骆驼外壳,对吗?
另一方面,有没有一种方法可以动态设置 属性 名称(Name = "")
?就像创建一个方法来执行此操作一样。
使用 NEST Automapping,它总能帮助我解决这些问题:https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/auto-map.html
还有一点就是正确配置NEST的elastic,下面的例子展示了正确的配置方式:
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);
}
请继续使用 vindo nulo,使用配置进行实验:settings.DefaultFieldNameInferrer(p => p);
可以在这个示例项目中找到更多详细信息:https://github.com/hgmauri/elasticsearch-with-nest