按类型选择时NEST出错

本文关键字:NEST 出错 选择 类型 | 更新日期: 2023-09-27 18:02:09

我使用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选择结果并将它们映射到列表中,但我从所有类型获得结果。

我能做什么或者尝试只得到一种类型?

按类型选择时NEST出错

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

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

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

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