从嵌入式 RavenDB 中的索引检索结果时出现问题
Posted
技术标签:
【中文标题】从嵌入式 RavenDB 中的索引检索结果时出现问题【英文标题】:Problem retrieving results from an index in an embedded RavenDB 【发布时间】:2011-09-26 20:43:49 【问题描述】:当我使用 .Net 客户端 API 和基于服务器的 RavenDb 查询它时,我的索引效果很好。
但是,如果我将 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】:您无需等待索引完成,请致电WaitForNonStaleResultsAsOfNow
【讨论】:
行得通!感谢 Ayende - “我可能是个傻瓜,但我打算成为一个活生生的傻瓜” - Matrim Cauthon以上是关于从嵌入式 RavenDB 中的索引检索结果时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
RavenDB - 何时使用AbstractIndexCreationTask索引,排序和存储方法?
使用 Windows Azure 上嵌入的 RavenDB 写入日志文件失败
使用 RavenDB 从多个字符串数组创建扇出索引的编译错误