我尝试使用NEST SearchRequest对象在我的ElasticSearch索引中查询动态类型列表。
public object Search(object runTimeData)
{
var request = new SearchRequest()
{
From = 0,
Size = 10
};
request = SetRouting(request, runTimeData);
request = SetIndices(request, runTimeData);
request = SetTypes(request, runTimeData);
request = SetQuery(request, runTimeData);
...
var results = _searchClient.Search<BaseOfAllTypes>(request);
return results;
}
...
private SearchRequest SetTypes(SearchRequest request, object runTimeData)
{
request.Types = GetTypesForRuntime(runTimeData);
}
如果我通过我执行搜索的行调试器调用System.Text.Encoding.UTF8.GetString(_searchClient.Serializer.Serialize(request))
,我就不会看到与JSON中的类型相关的任何内容:
{
"from": 0,
"size": 10,
"query": {
"bool": {
"must": [
{
"simple_query_string": {
"query": "my query data here",
"default_operator": "and"
}
}
]
}
}
}
但是,查询结果会回来,就像正在过滤类型一样。直接通过elasticsearch-head运行生成的JSON会返回所有类型的结果,所以看起来好像我在请求的序列化中没有看到我真正应该看到的东西。
答案 0 :(得分:1)
&#34;类型&#34;存在于HTTP请求标头中。您所看到的是HTTP请求正文。要获取请求标头,请使用
var requestHeader = results.ConnectionStatus.RequestUrl;
您还将获取群集地址和索引名称信息以及类型信息。
请注意,这仅在Search()
操作成功时才有效。否则results
可能是null
,此语句将抛出NPE。