按类型选择时NEST出错

时间:2016-08-12 21:03:13

标签: c# elasticsearch nest

我正在使用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中,但我得到了所有类型的结果。

我可以做什么或尝试只获得一种类型?

1 个答案:

答案 0 :(得分:1)

您的代码看起来很正常,会产生以下请求,其中poiType"poi-type"

POST http://localhost:9200/pois/poi-type/_search 
{
  "query": {
    "match_all": {}
  }
}

如果您检查请求(使用Fiddler等网络调试代理,或.OnRequestCompleted()上使用DisableDirectStreaming()ConnectionSettings),您看到了什么?

我要做的一个建议是创建一个ElasticClient作为单例并将其作为依赖项传递给您的控制器;每个ConnectionSettings使用的缓存可能相对昂贵,因此共享单个实例并且ElasticClient也是线程安全的,这样你就是个好主意也可以共享一个这样的实例。