2013-05-16 51 views
2

給定以下多圖索引,如何從查詢中排除TypeA類型的實體?如何從查詢結果中排除實體類型

指數:

AddMap<TypeA>(docs => from doc in docs 
         select new 
         { 
          doc.Title, 
          doc.DatePublished, 
          Query = new object[] 
          { 
           doc.Title, 
           doc.Body, 
           doc.Tags 
          } 
         }); 

AddMap<TypeB>(docs => from doc in docs 
         select new 
         { 
          doc.Title, 
          doc.DatePublished, 
          Query = new object[] 
          { 
           doc.Title, 
           doc.Body, 
           doc.Tags 
          } 
         }); 

Index("@metadata.Raven-Entity-Name", FieldIndexing.Default); 

我已經試過

session.Advanced.LuceneQuery<ISharedInterface, IndexType>() 
       .Not.WhereEquals("@metadata.Raven-Entity-Name", 
       Session.Advanced.DocumentStore 
         .Conventions.GetTypeTagName(typeof(TypeA))); 

但我得到的錯誤

字段 '@ metadata.Raven實體名' 沒有索引

回答

2

您需要在字段添加到映射函數:

select new { 
    ... 
    Tag = doc["@metadata"]["Raven-Entity-Name"], 
    ... 
} 

是添加到這兩個地圖,然後就可以刪除索引()線。

http://ravendb.net/docs/client-api/advanced/document-metadata

+0

謝謝,它有被稱爲'Tag'? –

+0

不,你可以任意調用它 – synhershko

+0

很酷,在Raven Studio'Tag:TypeAs'查詢工作,但是當我試圖否定條件時,'-Tag:TypeAs',沒有結果返回。任何想法?該索引不是陳舊的。 –