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

时间:2015-07-02 23:30:35

标签: c# elasticsearch lambda delegates 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

  6. 我有一个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);
      }
      
    3. 整个“ body =&gt; body.Query(query =&gt; query.QueryString(qs =&gt; 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;
      

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

1 个答案:

答案 0 :(得分:5)

答案已经在对问题本身的评论中提供,但是将其添加到未来的googlers中。

Elasticsearch.NET

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

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

<强> NEST

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