2013-05-16 50 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',没有结果返回。任何想法?该索引不是陈旧的。 –