2013-04-10 2 views
0

RavenDB 인덱싱에 문제가 있습니다.RavenDB : 정적 인덱스 캐스팅 및 정렬 문제

간단한 쿼리는 다음과 같다 : 추가 옵션

from doc in docs.MyCollection 
select new { Rate = doc.Rate, IsReady = doc.IsReady, IsDeleted = doc.IsDeleted, MyId = doc.MyId } 

: 실행시

 var values = 
      myCollection.Query.Where(w => 
       w.MyId == MyId && 
       w.IsReady == false && 
       w.IsDeleted && 
       w.Rate > 0) 

까마귀 동적 색인 생성 필드 -> 속도; 저장 용량 -> 아니요; 인덱싱 -> 기본값; 정렬 -> 더블;

필드 비율십진수 유형입니다.

문제 :

이 같은 인덱스 지정된 때 정적 인덱스를 추가하고 싶었지만 :

public class MyIndex : AbstractIndexCreationTask<MyCollection> { 
    public MyIndex() { 
     Map = d => d.Select(s => new { Rate = s.Rate, IsReady = s.IsReady, IsDeleted = s.IsDeleted, MyId = s.MyId }); 
     Sort(x => x.Rate, SortOptions.Double); 
    } 
} 
을 까마귀는 약간 다른 인덱스를 만드는

: 추가로

from doc in docs.MyCollection 
select new { Rate = (decimal)doc.Rate, IsReady = doc.IsReady, IsDeleted = doc.IsDeleted, MyId = doc.MyId } 

을 옵션 : 필드 -> 비율; 저장 용량 -> 아니요; 인덱싱 -> 기본값; 정렬 -> 더블;

유일한 차이점

내 필드 유형이 진수을하기 때문에 내가 정적 인덱스에 캐스팅하고 내가 더블 정렬 옵션을 사용하고 있다는 점이다.

때문에 Raven은 내 정적 색인을 사용하지 않고 대신 쿼리가 실행될 때마다 동적 색인을 만듭니다.

Sort() 내부에서 일부 캐스팅을 시도했지만 색인이 전혀 작성되지 않았습니다. 이 문제를 극복하는 한 가지 방법은 생성 된 관리 콘솔에서 정적 인덱스를 수동으로 수정하는 것이지만 좋은 해결책은 아닙니다.

어떻게 해결할 수 있을까요? 감사합니다. .

편집 : 다른 예 (/ 미만 이상)

필드 날짜 시간 유형과 같은 쿼리 술어 날짜 시간 값을 사용. Raven은 동적 인덱스 생성에서 문자열을 SortOption으로 선택하고 정적 인덱스를 준비하려고 할 때 캐스팅 문제가 발생합니다.

답변

0

오버로드를 명시 적으로 지정하려면 IDocumentSession.Query(string indexName, [bool isMapReduce]) 또는 IDocumentSession.Query<TResult, TIndexCreator>() 오버로드를 사용할 수 있습니다. 따라서 구체적인 경우에는 IDocumentSession.Query<MyCollection, MyIndex>() 또는 IDocumentSession.Query("MyIndex")입니다.

+0

답변 해 주셔서 감사합니다. 네, 인덱스 이름을 직접 지정할 수는 있습니다.하지만 그렇게하고 싶지는 않습니다. :) Session.Query()를 직접 사용하지 않고 이름을 지정하지 않고 Raven이 인덱스를 자동으로 선택하면 더 쉽게 될 것입니다. –