使用 Elasticsearch 进行映射
Posted
技术标签:
【中文标题】使用 Elasticsearch 进行映射【英文标题】:Mapping with Elasticsearch 【发布时间】:2021-09-07 20:28:04 【问题描述】:当尝试从 ElasticSearch 读取某些字段时,我注意到如果我不包含文本属性,那么它不会将变量名称映射到该字段。它将读取该特定字段的空值。假设我在 ES 中有一个名为 ValueId
的字段,类型为 text
。在我的模型课中,我有public string ValueId get; set;
。 ValueId
应该有该变量的值,但是当我不添加 Elasticsearch 属性时,即 [Text(Name = "ValueId")]
它返回 null。
现在,如果我有以下内容,那么它将返回该变量的值。
[Text(Name = "ValueId")]
public string ValueId get; set;
我的猜测是因为驼色外壳,对吗?
另一方面,有没有一种方法可以设置该属性名称(Name = "")
动态?就像创建一个方法来执行此操作一样。
【问题讨论】:
【参考方案1】:使用 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);
Se mesmo assim continuar vindo nulo,experimente utiliar a configuração:settings.DefaultFieldNameInferrer(p => p);
更多细节可以在这个示例项目中找到:https://github.com/hgmauri/elasticsearch-with-nest
【讨论】:
以上是关于使用 Elasticsearch 进行映射的主要内容,如果未能解决你的问题,请参考以下文章
第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理