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-Entity-Name”未编入索引

4

1 回答 1

2

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

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

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

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

于 2013-05-16T15:31:03.543 回答