我正在使用NEST按类型从ElasticSearch获取结果。
到目前为止,我已经尝试了这个,但是我得到了所有类型的结果。
[HttpGet]
public ActionResult List(string poiType, int? page, string sortName)
{
List<POIModel> resultsList = new List<POIModel>();
var node = new Uri(WebConfigurationManager.AppSettings["ElasticSearchLocation"]);
var settings = new ConnectionSettings(node);
settings.DefaultIndex("pois");
var client = new ElasticClient(settings);
var result = client.Search<POIModel>(s => s.Type(poiType).MatchAll());
resultsList = result.Hits.Select(t =>
{
t.Source.id = int.Parse(t.Id);
return t.Source;
}).ToList<POIModel>();
return View(resultList);
}
我的索引是“pois”,我尝试通过poiType选择结果并将它们映射到List中,但我得到了所有类型的结果。
我可以做什么或尝试只获得一种类型?
答案 0 :(得分:1)
您的代码看起来很正常,会产生以下请求,其中poiType
为"poi-type"
POST http://localhost:9200/pois/poi-type/_search
{
"query": {
"match_all": {}
}
}
如果您检查请求(使用Fiddler等网络调试代理,或.OnRequestCompleted()
上使用DisableDirectStreaming()
和ConnectionSettings
),您看到了什么?
我要做的一个建议是创建一个ElasticClient
作为单例并将其作为依赖项传递给您的控制器;每个ConnectionSettings
使用的缓存可能相对昂贵,因此共享单个实例并且ElasticClient
也是线程安全的,这样你就是个好主意也可以共享一个这样的实例。