当前位置: 首页 > 面试题库 >

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

龚运乾
2023-03-14
问题内容

我在这里遇到了完全相同的问题(这里没有回答)(ElasticSearch NESTSearch)
我用:

  1. .NET Framework 4.5;

  2. ASP.NET MVC 5;

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

  4. Elasticsearch.NET 1.6.1

  5. 巢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 (body => body.Query(query => query.QueryString(qs => qs.Query(“test”))));

    return View(test);
    }

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

(参数)身体

错误:

无法将Lambda表达式转换为类型“对象”,因为它不是委托类型

我在问题上进行了搜索,发现在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;

它没有按预期提供帮助,但是值得一试。所以现在,我不确定问题出在哪里,任何帮助将不胜感激。


问题答案:

在问题本身的评论中已经提供了答案,但为将来的Google员工添加了答案。

Elasticsearch.NET

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

仅当您正在与Elasticsearch进行集成(仅存在少量调用)并且不想引入对eg的依赖项时,此客户端才有用Json.NET。仅使用此库的示例是Serilog.Sinks.Elasticsearch

高级ElasticClient客户端的类型占所有请求和响应的99.9%。这是您要使用的客户端的99/100倍。NEST在后台使用Elasticsearch.NET分发请求以更正Elasticsearch
API终结点并使用相同的连接池和故障转移基础结构。



 类似资料:
  • 我还在尝试理解lambda表达式。 我想将这个lambda表达式转换为“普通”表达式: 你们有主意吗? 提前谢谢。

  • 问题内容: 我正在浏览Java源代码中的接口,并遇到了以下这段代码: 从方法声明中,我知道这是一个通用方法,该方法返回一个Comparator类型,该Comparator类型可以从传递给它的映射条目中推断出来,也可以在该方法中明确提供。 真正让我失望的是返回值。似乎lambda表达式 被显式转换为。这是正确的吗? 我还注意到,表观演员包括。我之前从未见过将接口与类组合在一起的类型,但是在编译器中它

  • 我在查看接口的Java源代码时,遇到了以下代码片段: 从方法声明中,我得到这是一个通用方法,它返回一种类型的比较器,这种比较器要么是从传递给它的映射条目中推断出来的,要么是在方法中显式提供的。 真正让我恼火的是返回值。看来λ表达式 显式转换为 ?有人能澄清这一切吗?

  • 为什么会发生异常'lambda表达式中的ad返回类型:AuthenticatedUser无法转换为User'?如果可选为空,我只想返回此AuthenticatedUser。

  • 我需要通过触摸按钮来更改形状类型。我尝试了这种方法,但我得到了一个错误,即形状类型不能转换为布尔值。代码: 错误:

  • 问题内容: 我想了一下,想到了一个有趣的问题,假设我们有一个配置(输入)文件,其中: 此外,我们还有s 的列表: 有没有办法将s(等)转换为代表lambda表达式的s?然后可以用作: 我将如何编写这样的方法? 我可以从JDK / JRE中重用吗? 我需要自己编写所有内容吗? 是否有可能将范围缩小到仅捕获lambda的其他内容? 问题答案: 马可对这个问题的评论是正确的。您无法从文件中读取裸Java