如何根文档

问题描述:

中提取收集的财产我使用RavenDB和我有麻烦提取使用Lucene的查询特定值。如何根文档

这里是我的文档中的JSON:

{ 
"customer" : "my customer" 
"locations": [ 
    { 
     "name": "vel arcu. Curabitur", 
     "settings": { 
     "enabled": true 
     } 
    } 
    ] 
} 

这里是我的查询:

var list = session.Advanced.LuceneQuery<ExpandoObject>() 
    .SelectFields<ExpandoObject>("customer", "locations;settings.enabled", "locations;name") 
    .ToList(); 

列表填充,并包含了一堆客户的性质ExpandoObjects的,但我不能为我的生活得到的位置 - >名称或位置 - >设置 - >启用回来。

是“;”要么 ”。”错误的用法?

看来你误会在RavenDB索引和查询的概念。当你在RavenDB中加载一个文档时,你总是加载整个文档,包括它所包含的所有内容。所以在你的情况下,如果你加载了一个客户,你已经拥有了这个集合以及它的所有子项。这意味着,您可以使用标准的linq-to-objects来提取所有这些值,不需要像索引或lucene这样的特殊内容。

如果你想要做在数据库端这种提取,这样就可以对这些属性进行查询,那么你就需要一个索引。索引是用linq编写的,但了解它们在服务器上运行并提取一些数据以填充lucene索引很重要。但是,在大多数情况下,你甚至不需要自己编写索引,因为RavenDB可以为你自动创建索引。

我任何情况下,你需要编写Lucene的查询,如因为在RavenDB Lucene的查询一个在你的问题总是会针对预建指标执行,而这些一般是平的。但是,再次,你可能不需要用lucene做任何事情来获得你想要的。

我希望对你有意义。如果没有,请更新您的问题,并告诉我们更多关于您真正想要做的事情。

+0

我不想加载整个文档。我只想从所有文档中提取某些值。 使用LINQ我不能创建一个索引,因为文件不与波苏斯只是ExpandoObject或动态实体存储。 – legion 2012-01-13 01:31:36

+0

您可以使用字符串创建索引,该字符串将在服务器上处理。 – 2012-01-13 14:05:27

+0

通过使用字符串创建索引,你的意思是什么? – legion 2012-01-26 02:48:12

从技术上讲,你可以用逗号“”巢到集合。 这应该工作,但不建议。你可以让你的整个对象使用它,它更容易,更快。