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

2024-05-06

我遇到了与此处描述的完全相同的问题(但未得到解答)ElasticSearch NEST 搜索 https://stackoverflow.com/questions/24615676/elasticsearch-nest-search

I use:

  1. .NET框架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<Contract>(body => body.Query(query => query.QueryString(qs => qs.Query("test"))));
    
      return View(test);
    }
    

Entire "body => body.Query(query => query.QueryString(qs => qs.Query("test")))" 上面代码中的 lambda 表达式有红色波浪下划线和以下工具提示:

(范围) ?身体

Error:

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

我用谷歌搜索了这个问题,发现在 99% 的情况下,人们忘记了包含程序集,通常是系统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;

它没有达到预期的效果,但值得一试。所以现在,我不确定问题出在哪里,任何帮助将不胜感激。


答案已经在问题本身的评论中提供,但为未来的谷歌用户添加了这个答案。

Elasticsearch.NET

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

仅当您正在与仅存在少量调用的 Elasticsearch 集成并且您不想引入对例如的依赖项时,此客户端才有用Json.NET。仅使用此功能的库的示例是Serilog.Sinks.Elasticsearch https://www.nuget.org/packages/Serilog.Sinks.ElasticSearch/

NEST

高水平ElasticClient客户端,拥有 99.9% 的请求和响应的类型。 99/100 次这是您想要使用的客户端。 NEST 在底层使用 Elasticsearch.NET 将请求分派到正确的 elasticsearch API 端点,并使用相同的连接池和故障转移基础设施。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# Elasticsearch NEST 无法转换 lambda 表达式 的相关文章

随机推荐