无法从用法中推断方法'ElasticClient.Index <t>(IIndexRequest <t>)'的类型参数

时间:2019-04-07 18:54:32

标签: c# .net elasticsearch

我正在按照示例elasticsearch-net-example学习ElasticSearch。 错误发生在以下代码中:

        foreach (var package in packages)
        {
            var result = Client.Index(package); <--The type arguments for method 'ElasticClient.Index<T>(IIndexRequest<T>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

            if (!result.IsValid)
            {
                Console.WriteLine(result.DebugInformation);
                Console.Read();
                Environment.Exit(1);
            }
        }

我尝试指定参数的类型,如下所示:

var result = Client.Index<FeedPackage>(package);

但这会导致另一个错误:

参数1:无法从“ NuSearch.Domain.Model.FeedPackage”转换为“ Nest.IIndexRequest” NuSearch.Indexer

您能告诉我我在做什么错吗?也许这个问题太简单了,但是我遇到了困难。

3 个答案:

答案 0 :(得分:0)

据我了解,ElasticSearch无法通过输入值确定类型名称,因此您需要在第二个参数中添加其名称:

var result = Client.Index<FeedPackage>(package, i => i.Type("package"));

答案 1 :(得分:0)

我刚才有同样的问题。确保您使用的是正确的.net客户端版本。就我而言,我在使用客户端的7.x版本时正在寻找1.x版本的文档-可能很糟糕:)

当前版本位于此处:https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/nest-getting-started.html

答案 2 :(得分:0)

我刚刚遇到了同样的问题。如MiXaiL在其赞成的答案中建议将代码更改为var result = Client.Index<FeedPackage>(package, i => i.Type("package"));无效,因为它无法编译。但是,只需将Index()更改为IndexDocument()会很漂亮:

var result = Client.IndexDocument(package);