Elasticsearch.net 客户端无法进行基本搜索
Posted
技术标签:
【中文标题】Elasticsearch.net 客户端无法进行基本搜索【英文标题】:Elasticsearch.net client can't do basic search 【发布时间】:2014-10-17 22:09:20 【问题描述】:我有一个看起来像这样的基本 Elasticsearch 查询
POST /fruit/_search
"query":"term":"Name":"banana"
我得到结果,当我正常运行时没有问题。
所以我尝试在 elasticsearch.net 中执行此操作
var requestBody = new query = new term = new Name = "banana" ;
var result = client.Search<string>("fruit", requestBody);
我没有得到任何结果。如果我只有一个带有新 的搜索正文,那么我会得到点击,但不会被过滤。
我做错了什么?
【问题讨论】:
这对我来说很奇怪 我认为 Nest 可能会小写名称。您可以序列化并记录搜索以进行调试。 如何逐步检查代码并尝试找出问题的根源? 【参考方案1】:如果您直接使用低级客户端(elasticsearch.net),它不会进行任何规范化并逐字序列化对象:
var query = new query = new term = new Name = "banana" ;
var json = new ElasticsearchClient().Serializer.Serialize(query).Utf8String();
这将导致以下 json:
"query":
"term":
"Name": "banana"
如果您使用 NEST,则默认行为是驼峰式属性名称(NEST 是自以为是的):
"query":
"term":
"name": "banana"
如果您通过高级客户端 (client.Raw
) 使用低级客户端,它将使用与高级客户端完全相同的序列化设置。
您可以通过以下方式在高级客户端上控制此行为:
var connectionSettings = new ConnectionSettings()
.SetDefaultPropertyNameInferrer(p=>p);
var client = new ElasticClient(connectionSettings);
【讨论】:
感谢您的回答。我仍然认为如果不是用户自己实现外壳,就应该不理会它。 我同意,NEST 是我在 2010 年将 Elasticsearch 集成到我的应用程序中时编写的,主要是为了我自己的使用。从那时起,尽管 NEST 已经在内部完全重写,但该约定已经形成现在更改它的 1.0 版本会给现有用户带来许多问题。在拆分低级客户端时,我们确实故意选择了它不包含任何这样的魔法。以上是关于Elasticsearch.net 客户端无法进行基本搜索的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch.Net.UnexpectedElasticsearchClientException:在从 ES 获取数据期间
NEST/Elasticsearch.Net 发送原始JSON请求(Post数据)
通过elasticsearch.net中的字符串数组查询字符串数组