【发布时间】:2015-07-02 23:30:35
【问题描述】:
我遇到了与ElasticSearch NEST Search 此处描述(但未回答)完全相同的问题
我用:
.NET Framework 4.5;
ASP.NET MVC 5;
Elasticsearch 1.6.0(在服务器上);
Elasticsearch.NET 1.6.1
NEST 1.6.1
我有一个 MVC 控制器,它有两个动作:
索引 - 包含 HTML UI 表单
-
搜索 - 包含 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); }
上面代码中的整个 "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;
它没有像预期的那样有帮助,但值得一试。所以现在,我不确定问题出在哪里,我们将不胜感激。
【问题讨论】:
-
您的 lambda 未知。尝试将 lambda 转换为 Func
。无论身体是什么类型。 (Func<typeofbody,object>)(body => {...})... 而且你不需要参考任何东西来解决这个问题。因为它无关紧要。看here -
(参数)?身体。身体的类型是什么?
-
我无法重现您的问题。尝试添加
而不是 Contract 并通过 .Type("yourType") 或使用 .AllTypes() 在搜索中指定类型 后者不会特定于合同,但可能会阐明实际问题 -
丹尼尔。那没用。
-
恐怕我无法重现您的问题。
标签: c# elasticsearch lambda delegates nest