我遇到了完全相同的问题(并没有回答)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 =&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;
没有按预期的那样有所帮助,但值得一试。所以现在,我不确定问题出在哪里,任何帮助都会受到高度赞赏。
答案 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端点,并使用相同的连接池和故障转移基础架构。