使用NEST无法将文档自动映射到Elasticsearch中

时间:2019-04-30 05:58:23

标签: c# elasticsearch nest

我在C#中有一个简单的Dummy文档。我正在尝试使用NEST客户端将其首次索引到elasticsearch中。但是自动映射无法正常工作。

我的虚拟文档是:

class DummyRecord {
    public string RecordName;
    public int RecordId;
}

主程序是:

class Program
{
    static void Main(string[] args)
    {
        var node = new Uri("http://localhost:9200");
        var settings = new ConnectionSettings(node).DefaultTypeName("_doc");
        var client = new ElasticClient(settings);

        var doc = new DummyRecord {
            RecordName = "SOmething",
            RecordId = 1
        };

        var creaeIndexRespone = client.CreateIndex("DummyIndex",c => c.Mappings(ms=> ms.Map<DummyRecord>(m => m.AutoMap())));
        Console.WriteLine(creaeIndexRespone);

        var response = client.Index(doc, idx => idx.Index("DummyIndex"));
        Console.WriteLine(response);
        Console.ReadKey();
    }
}

我得到的是以下输出:

  

无效的NEST响应是由对PUT的/ DummyIndex失败的低级调用所建立的

     

无效的NEST响应是由POST上的不成功的低级调用生成的:/ DummyIndex / _doc

如何使此东西正常工作。在创建设置之外,我还有什么要做的??

var settings = new ConnectionSettings(node).DefaultTypeName("_doc");

2 个答案:

答案 0 :(得分:2)

两件事

  1. 索引名称必须为小写字母,例如"DummyIndex"-> "dummyindex"
  2. DummyRecord成员必须是属性,而不是字段

您可以检查对任何API调用的响应是否为有效,并在需要时采取措施

var client = new ElasticClient();

var createIndexResponse = client.CreateIndex(defaultIndex, c => c
    .Mappings(m => m
        .Map<DummyRecord>(mm => mm
            .AutoMap()
        )
    )
);

if (!createIndexResponse.IsValid) {
    Console.WriteLine(createIndexResponse.DebugInformation);
}

答案 1 :(得分:1)

启动您的最终模型,然后将该模型传递给弹性模型以对其进行索引。

根据Elastic的文档,您可以像这样对数据建立索引。

    var person = new Person
{
    Id = 1,
    FirstName = "Martijn",
    LastName = "Laarman"
};

var indexResponse = client.IndexDocument(person); 

已更新:Index()与IndexDocument

IndexDocument()用于只索引单个文档的情况。

Index()如果需要设置其他参数,则可以使用此方法。

看看Elastic文档