我如何生成通用类型的索引。这是我将文档插入由定义的通用索引中的代码。我在 Tres emp 部分中遇到错误,说“Tres是一种类型,在给定上下文中无效”

 public void InsertDocument<Tres>(ElasticClient es, Tres emp,IndexName name) where Tres: new()
    {
        es.Index<Tres>(**Tres emp**, x => x.Index(name).Type("logs"));
    }

最佳答案

您必须为通用“Tres”类型定义一个引用。要按预期执行通用类型的功能,您应该创建一个基类,其他elasticsearch索引类也可以从该基类派生。因此,您可以通过这种方式传递自定义的Elasticsearch索引类。

首先,为Elasticsearch索引类创建基类。

public class EsIndicesBaseClass
{

}

我提供了一个示例Elasticsearch索引模型;
public class EsSampleIndexModel : EsIndicesBaseClass
{
    public string SampleProperty{get;set;}
}

并将您的通用方法更改为
public void InsertDocument<Tres>(ElasticClient es, Tres emp,IndexName name) where Tres: EsIndicesBaseClass
    {
        es.Index<Tres>(emp, x => x.Index(name).Type("logs"));
    }

用法;
var esSampleIndexData = new EsSampleIndexModel();

InsertDocument<EsSampleIndexModel>(es, esSampleIndexData , name);

09-28 14:18