2013-04-11 1 views
1

에서 여러 (하드 코딩되지 않음)면을 추가 나는 탄성 검색 나는 C#에서 사용하고있어 탄성 검색 API 꽤 새로운 해요. 내 querybuiler

나는 간단한 요청을 가지고,하지만 난 그것으로 붙어 : 어떻게 내 querybuiler에서 여러 (하드 코딩되지 않음)면을 추가 할 수 있습니까?

//code has been simplified 

//list of fields I want to be added in my facet part of the querybuilder 
List<string> FacetFields = new List<string>{"field1", "field2", "fieldN"}; 

//qb is already instantiated with a simple ES query 
//I want now to add facets definition 

qb.Facets(_facets => 
    FacetFields.ForEach(_ff => 
     _facets.Terms(t => t 
      .FacetName("FacetsFor" + _ff) 
      .Field(_ff) 
     ); 
    }); 
); 

이 컴파일되지 않는 오류는 다음과 같습니다

일부 반환 형식으로 입력 'System.Func<PlainElastic.Net.Queries.Facets<MyType>,PlainElastic.Net.Queries.Facets<MyType>>을'위임 람다 식 변환 할 수 없습니다 블록의 암시 적 반환 형식으로 변환되지 않습니다 위임자

답변

0

나는 C# 사람이 아니지만 내 Ruby 코드와 비교해 보면 내 생각 엔 당신이 내면을 가지고 있다고 생각합니다.

목적은 궁극적으로 JSON이 결과는 용어가 내부면의 이름으로 각 절 밖에 앉아 있음을 수 있습니다 것 같습니다 코드를 보면

"facets" : { 
    "facet_name1" : { "terms" : {"field" : "tags"} } 
    "facet_name2" : { "terms" : {"field" : "user"} } 
} 

같은 것을보고 얻을 수 있습니다. 이것이 코드가 실제로하는 일이라면 정확하지 않습니다.

라이브러리에서 생성 한 JSON이나 쿼리 후 elasticsearch의 결과를 볼 수있는 방법이 있다면 ES가받는 것과 같은 쿼리를 볼 수 있습니다. 디버깅에 필수적인 것을 알 수 있습니다. 자체 쿼리. 명명 된 각면 내부

, 당신은, 다음 한면, 두 사람과 함께, 다음 더 복잡한 필터링을 너무 추가 필터링을 추가 할 수 있지만 첫 번째 작업 간단한 경우를 얻을 수 있습니다.

0

이 컴파일 오류의 이유는 이 인 결과가 void이고 qb.Facets()이 반환한다는 것입니다.

그래서 코드는 다음과 같아야합니다

List<string> FacetFields = new List<string>{"field1", "field2", "fieldN"}; 

qb.Facets(_facets => { 
    FacetFields.ForEach(_ffield => 
     _facets.Terms(t => t 
      .FacetName("FacetsFor" + _ffield) 
      .Field(_ffield) 
     ) 
    ); 
    // Return configured _facets as expected by qb.Facets 
    return _facets; 
}); 

// Get generated JSON 
string jsonQuery = qb.BuildBeautified();