변환

2013-02-13 4 views
0

내가 가진 다음지도/I가 변환

내가 실행

다음과 같은 하나의 기술, "NH"와 "MVC"두 위치, 각각 고용주 개체가

public class PositionSearch : AbstractIndexCreationTask<Employer> 
{ 
    public PositionSearch() 
    { 
     Map = employers => 
      from employer in employers 
      from position in employer.Positions 
      select new 
      { 
       EmployerName = employer.Name, 
       SearchSkills = position.RequiredSkills 
             .Select(x => x.Skill) 
      }; 

     TransformResults = (database, results) => 
      from result in results 
      from position in result.Positions 
      select new 
      { 
       EmployerId = result.Id, 
       EmployerName = result.Name, 
       PositionId = position.Id, 
       PositionTitle = position.Title, 
       RequiredSkills = position.RequiredSkills 
            .Select(x => new { x.Skill, x.Proficiency }) 
      }; 

     // Any field you are going to use .Search() on should be analyzed. 
     Index("SearchSkills", FieldIndexing.Analyzed); 
    } 
} 

변환 필터 쿼리 예상 한 두 위치 결과가 반환됩니다. 왜 이런 식으로 행동하는지 누가 알 수 있습니까? 나는 그것이 내가하고있는 조인과 관련이 있다고 느낀다. 그러나 나는 확실하지 않다. 나는 순서의 임시-색인 점수를 메타 데이터에 액세스 할 수 있도록 변환 사용 꿔

using (var session = DocumentStore.OpenSession()) 
{ 
    var results = session.Query<PositionSearchResultModel, PositionSearch>() 
        .Customize(x => x.WaitForNonStaleResults()) 
         .Search(x => x.SearchSkills, "NH") 
        .OfType<PositionSearchResultModel>().ToList(); 

     Assert.AreEqual(1, results.Count()); 
} 

, 나는 변환 지금까지하지 않고 메타 데이터에 액세스 할 수 없었습니다.

+0

질문 제목에서 태그를 제거했습니다. http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles을 참조하십시오. – GolfWolf

답변

2

Employer 문서의 색인을 생성하고 있습니다. 검색에서 해당 스킬이 포함 된 문서를 찾은 다음 문서를 변환하도록 요청했습니다.

당신이 가지고 있던 방법 before는 색인에서 예상하고 있습니다. 이것은 결과의 일부로 발견 된 특정 위치를 얻는 유일한 방법입니다.

은 정말

public class Employer 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
} 

public class Position 
{ 
    public string Id { get; set; } 
    public string EmployerId { get; set; } 
    public string Title { get; set; } 
    public string Location { get; set; } 
    public ICollection<SkillProficiency> RequiredSkills { get; set; } 
} 

이 사고에 더 많은 관계를 보일 수 있습니다 ... 당신이 자신의 문서이기로 Position에 더 행복 할 것이라고 생각하지만, RavenDB에서 잘 작동, 그것은 훨씬 쉬울 것입니다 당신이 지금하고있는 것보다 쿼리.

+0

대단히 감사합니다! - 귀하의 의견으로는, 제가 집계되지 않은 문서를 가지고이 접근 방식을 취하는 것이 합리적일까요? 또는 인덱스에서 투사를 계속할까요? - 시간 내 주셔서 다시 한번 감사드립니다! – Jamez

+1

나는 당신의 경우에,'Position'은 실제로 집계라고 주장 할 것입니다. 개별적으로 투영해야 할 필요가 있음을 입증합니다. 'Order'와'OrderLines'의 경우를 생각해보십시오. 당신은 결코 자신의 문서에'OrderLines'을 넣지 않을 것입니다. 주문한 품목으로 검색 한 경우에도 여전히 전체 '주문'을 반환합니다. 그러나 당신은'Position'을 가진'Employer's를 요구하지 않습니다. 당신은 실제'Position's을 요구하고 있습니다. –

+0

나는 전구가 켜지는 것을 느꼈다고 생각한다. 모든 도움을 주셔서 대단히 감사합니다! - 다행히도 나는 곧 또 다른 질문을 게시 할 필요가 없기를 희망한다. – Jamez