如何从查询结果中排除实体类型

时间:2013-05-16 13:32:51

标签: ravendb

鉴于以下多地图索引,如何从查询中排除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-Entity-Name'未编入索引

1 个答案:

答案 0 :(得分:2)

您需要将该字段添加到映射函数中:

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

将其添加到两个地图中,然后可以删除Index()行。

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