2012-02-05 44 views
4

這是我的指數代碼:爲什麼我得到這個錯誤在RavenDB索引查詢:字段「客戶ID」不被索引

public class InvoiceSummaryView 
{ 
    public DateTime DueDate { get; set; } 
    public string CompanyAddress { get; set; } 
    public string DebtorName { get; set; } 
    public float Amount { get; set; } 
    public bool IsPaid { get; set; } 
    public string CustomerId { get; set; } 
} 

public class InvoiceSummaryIndex : AbstractIndexCreationTask<CustomerInvoice> 
{ 
    public InvoiceSummaryIndex() 
    { 

     Map = invoices => from invoice in invoices 
          select new { DueDate = invoice.DueDate, DebtorId = invoice.DebtorId, Amount = invoice.Amount }; 

     TransformResults = (database, results) => 
      from invoice in results 
      let debtor = database.Load<Debtor>(invoice.DebtorId) 
      let company = database.Load<Company>(debtor.CompanyId)    
      select new { 
       DueDate = invoice.DueDate, 
       CompanyAddress = Company.Address.ToString(), 
       DebtorName = debtor.Contact.First + " " + debtor.Contact.Last, 
       Amount = invoice.Amount, 
       IsPaid = invoice.IsPaid, 
       CustomerId = Company.CustomerId 
      }; 

    } 
} 

這是我的查詢:

var query = from viewItem in session.Query<InvoiceSummaryView>("InvoiceSummaryIndex") 
         where viewItem.CustomerId == id 
         orderby viewItem.DueDate 
         select viewItem; 

的錯誤是:

「錯誤」:「System.ArgumentException:字段‘客戶編號’沒有被索引, 不能對沒有在索引字段查詢...

回答

8

看看你的索引:

select new { DueDate = invoice.DueDate, DebtorId = invoice.DebtorId, Amount = invoice.Amount }; 

你已經索引的字段是交貨期,DebtorId和金額,就是它了。

如果你是這樣的:

select new { DueDate = invoice.DueDate, DebtorId = invoice.DebtorId, Amount = invoice.Amount, invoice.CustomerId }; 

它將努力

+0

我最初的印象是在後臺進行的最終結果指標包括改造產生一個平坦的桌面。你描述它的方式,聽起來就像那張表是索引,轉換是在飛行中完成的。是對的嗎?那麼這是否意味着如果我有一個4級的實體,並且我要查詢它們中的任何一個,孩子需要它是父母身份,它是父母的父母身份等等? – 2012-02-06 06:11:35

+0

是的,它創建索引,但它沒有返回任何結果,我查看了Raven Studio中的索引,並且有一個索引錯誤將字符串轉換爲浮點數。 RS中顯示的索引已編譯爲投入Amount:Amount =((float)invoice.Amount)。當我從地圖和轉換中刪除此轉換時,它將起作用... – 2012-02-06 06:24:42

+0

空閒時,您只能查詢地圖的輸出(或減少,如果存在),TransformResults會即時發生,是的。 – 2012-02-07 20:49:58

相關問題