使用 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 =&gt; p);

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

【讨论】:

以上是关于使用 Elasticsearch 进行映射的主要内容,如果未能解决你的问题,请参考以下文章

第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理

使用模糊 NEST 进行多匹配查询 - ElasticSearch

elasticsearch基本使用

elasticsearch:安装与配置

使用 Elasticsearch 进行映射

探索Elasticsearch集群API