问题从嵌入式RavenDB中的索引检索结果

时间:2011-09-26 20:43:50

标签: indexing ravendb embedded-database

当我使用基于服务器的RavenDb的.Net客户端API查询时,我的索引效果很好。

但是,如果我将RavenDb更改为嵌入类型,那么除非我首先查询索引使用的文档,否则我无法直接查询索引。

例如,如果我有以下文档对象作为RavenDb中的单独集合驻留:

private class TestParentDocument
        {
            public string Id { get { return GetType().Name + "/" + AggregateRootId; } }
            public Guid AggregateRootId { get; set; }
            public string Name { get; set; }
            public string Description { get; set; }
        }

private class TestChildProductFlagDocument
        {
            public string TestParentDocumentId { get; set; }
            public short ProductFlagTypeId { get; set; }
        }

然后我有以下对象,它表示索引映射到的输出文档:

private class TestJoinIndexOutput
        {
            public string TestParentDocumentId { get; set; }
            public string Name { get; set; }
            public short ProductFlagTypeId { get; set; }
        }

这是索引定义:

private class TestJoinIndex : AbstractIndexCreationTask<TestChildProductFlagDocument, TestJoinIndexOutput>
        {
            public TestJoinIndex()
            {
                Map = docs => from doc in docs
                              select new
                              {
                                  TestParentDocumentId = doc.TestParentDocumentId,
                                  ProductFlagTypeId = doc.ProductFlagTypeId
                              };

                TransformResults = (database, results) =>
                    from result in results
                    let parentDoc = database.Load<TestParentDocument>(result.TestParentDocumentId)
                    select new
                    {
                        TestParentDocumentId = result.TestParentDocumentId,
                        ProductFlagTypeId = result.ProductFlagTypeId, 
                        Name = parentDoc.Name
                    };
            }

我调用索引的代码如下所示:

var theJoinIndexes = ravenSession.Query<TestJoinIndexOutput, TestJoinIndex>().ToList();

除非我执行以下操作,否则几乎立即返回并失败:

var theParentDocuments = ravenSession.Query<TestParentDocument>().ToList();
var theJoinIndexes = ravenSession.Query<TestJoinIndexOutput, TestJoinIndex>().ToList();

我的Ravendb嵌入式定义如下:

docStore = new EmbeddableDocumentStore
                 {
                    UseEmbeddedHttpServer = false,
                    RunInMemory = true

                };
                docStore.Configuration.Port = 7777;
                docStore.Initialize();

                IndexCreation.CreateIndexes(typeof(TestJoinIndex).Assembly, docstore);

1 个答案:

答案 0 :(得分:2)

您不是在等待索引编制完成,请致电WaitForNonStaleResultsAsOfNow