C#Elasticsearch NEST无法转换lambda表达式

Ale*_*ice 4 c# lambda delegates elasticsearch nest

遇到了完全相同的问题(并没有回答)ElasticSearch NEST Search

我用:

  1. .NET Framework 4.5;

  2. ASP.NET MVC 5;

  3. Elasticsearch 1.6.0(在服务器上);

  4. Elasticsearch.NET 1.6.1

  5. NEST 1.6.1

我有一个MVC控制器,它有两个动作:

  1. 索引 - 包含HTML UI表单

  2. 搜索 - 包含Elasticsearch.NET客户端和查询.

    public ActionResult Search(SearchCreteria sc)
    {
      Settings settings = new Settings();
      Client client = new Client(settings);
      ElasticsearchClient esClient = client.Get();
    
      var test = esClient.Search<Contract>(body => body.Query(query => query.QueryString(qs => qs.Query("test"))));
    
      return View(test);
    }
    
    Run Code Online (Sandbox Code Playgroud)

整个" body => body.Query(query => query.QueryString(qs => qs.Query("test"))) "上面代码中的lambda表达式有下划线的红色下划线,并带有以下工具提示:

(参数)?身体

错误:

无法将lambda表达式转换为类型"object",因为它不是委托类型

我搜索了问题并发现在99%的情况下,人们忘记包含一个程序集,通常是System.Linq.

嗯..我绝对不会忘记添加那个,但我可能我必须包括一个NEST特定组件或类似的东西(我确定不是真的,除了NEST本身),所以我决定添加一切我虽然可能有点相关,我最终得到了这个:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Web.Mvc;
using WebUI.Models.Concrete;

using Domain.Concrete.Entities;
using Domain.Concrete.Connectivity.Elastic;
using Domain.Concrete.Processors.Elastic;

using Elasticsearch;
using Elasticsearch.Net;
using Elasticsearch.Net.Connection.Configuration;
using Elasticsearch.Net.Connection.RequestState;
using Elasticsearch.Net.Connection.Security;
using Elasticsearch.Net.ConnectionPool;
using Elasticsearch.Net.Exceptions;
using Elasticsearch.Net.Providers;
using Elasticsearch.Net.Serialization;

using Nest;
using Nest.Domain;
using Nest.DSL.Descriptors;
using Nest.DSL.Query;
using Nest.DSL.Query.Behaviour;
using Nest.DSL.Visitor;
using Nest.Resolvers.Converters.Aggregations;
using Nest.Resolvers.Converters.Filters;
using Nest.Resolvers.Converters.Queries;
using Nest.Resolvers.Writers;
Run Code Online (Sandbox Code Playgroud)

它并没有像预期的那样有所帮助,但值得一试.所以现在,我不确定问题出在哪里,任何帮助都会受到高度赞赏.

Mar*_*man 5

答案已经在问题本身的评论中提供,但是为未来的googlers添加了这个.

Elasticsearch.NET

是一个准系统低级ElasticsearchClient客户端,它只接受字符串,匿名/动态对象,或byte[].同样,它也没有响应的返回类型.此配置时,此客户端支持连接池和节点故障转移.该客户端的80%是自动生成的.

此客户端仅在您与Elasticsearch集成时才有用,该Elasticsearch仅存在少数几个调用,并且您不希望引入依赖于例如Json.NET.仅使用它的库的示例是Serilog.Sinks.Elasticsearch

高级ElasticClient客户端具有99.9%的所有请求和响应的类型.99/100次这是您要使用的客户端.NEST使用Elasticsearch.NET将请求分派给正确的elasticsearch API端点,并使用相同的连接池和故障转移基础结构.