2013-04-10 62 views
0

我有一個RavenDB索引問題。RavenDB:靜態索引投射和排序問題

簡單的查詢看起來是這樣的:

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

在執行過程中烏鴉創建動態索引:

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

與額外的選項: 場 - >率; 存儲 - >否; 索引 - >默認; Sort - > Double;

Field Rate has decimal type。

問題:

我想添加靜態指標,但是當我指定索引是這樣的:

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 } 

選項: Field - > Rate; 存儲 - >否; 索引 - >默認; Sort - > Double;

唯一的區別是,我在靜態指標已經鑄造,因爲我的字段類型爲小數和我使用排序選項。

因爲這個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自動選擇索引而不指定名稱,對我來說會更容易。 – 2013-04-10 09:10:59