2016-08-12 2 views
0

유형별로 ElasticSearch에서 결과를 얻으려면 NEST를 사용하고 있습니다.유형별로 NEST 선택시 오류가 발생합니다.

지금까지이 방법을 시도했지만 모든 유형의 결과가 나타납니다.

[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); 
    } 

내 지수는 "관심 장소"내가 poiType을 기준으로 결과를 선택하고 목록으로 그들을지도하려고 노력하지만, 나는 모든 유형의 결과를 얻을 수 있습니다.

하나의 유형을 얻으려면 어떻게해야합니까?

답변

1

코드는, 잘 보이는 당신이 (피들러 같은 웹 디버깅 프록시를 사용하거나 ConnectionSettingsDisableDirectStreaming()과 함께 .OnRequestCompleted() 사용) 요청을 검사하는 경우 다음과 같은 요청의 결과, "poi-type"

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

poiType입니다 너 뭐가 보이니?

하나의 권장 사항은 싱글 톤으로 ElasticClient을 하나 만들고 컨트롤러에 종속성으로 전달하는 것입니다. ConnectionSettings에 사용되는 캐시는 이며 상대적으로이므로 하나의 인스턴스를 공유하는 것이 좋습니다. ElasticClient도 스레드 안전성을 갖기 때문에이 인스턴스도 하나만 공유 할 수 있습니다.