2013-11-10 4 views
0

텍스트 검색 결과를 표시하는 색인이 있습니다. 결과는 항상 한 달 동안 만 표시됩니다.검색 결과 그룹화 - RavenDB

매달 결과가 얼마나되는지 보여줄 필요가 있습니다. 예제는 맨 아래에 있습니다.

면 처리 된 검색은 작업을 수행해야하지만 수동으로 범위를 생성/생성하는 것은 불가능하며 엄청난 양의 범위가 발생한다는 것을 알고 있습니다. 공식 문서, 심지어 올바른 도구가 아닌 ResultTransformers에서도 모든 것을 시도했습니다. 그래서 나는 뭔가를 간과 했음에 틀림 없어.

[{ 
    Year: 2013, 
    Month: 12, 
    Count: 3 
}, 
{ 
    Year: 2013, 
    Month: 11, 
    Count: 10 
}] 

답변

0

일부 파고 난 후에 Dynamic aggregation이 그 일을 할 것이라고 알았습니다. 익명의 객체가 작동하지 않았기 때문에 필드 달을 추가했습니다.

Map = transactions => from transaction in transactions 
select new 
    { 
     Value = transaction.Value, 
     Description = new object[] { transaction.Description, transaction.Items.Select(i => i.Name) }, 
     Account_UserName = transaction.Account.UserName, 
     Time = transaction.Time, 
     Month = new DateTime(transaction.Time.Year, transaction.Time.Month, 1) // new field 
    }; 

그리고 일부 변형, 원하는 결과 후에 .AggregateBy(x => x.Month).CountOn(x => x.Month);

var result = _session.Query<Transaction, Transaction_Search>() 
    .AggregateBy(x => x.Month) 
    .CountOn(x => x.Month); 

이 발생하여 질의를 확장.

0

당신은 한 달에 값이 각 인덱스 레코드를 근절하고 거기에서 가고 싶은 :

Map = transactions => from transaction in transactions 
select new 
    { 
     Description = new object[] { transaction.Description, transaction.Items.Select(i => i.Name), transaction.Documents.Select(i => i.Name) }, 
     Account_UserName = transaction.Account.UserName, 
     Month = transaction.Time.Month + "/" + transaction.Time.Year, // To be able to group on Months 
     Time = transaction.Time 
    }; 

을 당신도 할 수 거기에서 내가 기대

Map = transactions => from transaction in transactions 
select new 
    { 
     Description = new object[] { transaction.Description, transaction.Items.Select(i => i.Name), transaction.Documents.Select(i => i.Name) }, 
     Account_UserName = transaction.Account.UserName, 
     Time = transaction.Time 
    }; 

결과이 같은 것입니다 Month 필드에서 Faceting을 사용하거나 Reduce 함수를 사용하여 Months를 합계로 검색하여이 계산을 검색 가능하게 만들 수 있습니다.

+0

미안하지만 월 필드를 추가하는 것이 어떻게 도움이되는지 이해할 수 없습니다. 필드를 사용하여지도/색인 축소를 시도했습니다. ** 설명 ** - 검색어 : ** 사용자 이름 **, ** 연도 **, ** 월 **, ** 개수 **. 그러나 설명을 null로 설정하면 결과가 정상적으로 중지 된 인덱스 그룹을 만들 수 있습니다. 질문을 수정하여보다 명확하게했습니다. –

+0

그러면 월 필드를 축소 키로 사용할 수 있습니다. 'group by new {time.Month, time.Year} '를 사용하여이 작업을 계속할 수는 있지만 개인적인 선호는 가독성을 위해 하나의 필드에 넣는 것입니다. – synhershko

+0

당신의 코멘트를 다시 읽으십시오 - 당신이 설명을 원할 경우 Map/Reduce를 실제로 사용할 수 없으며 패싯 만 사용할 수 있습니다. – synhershko