如何根文档
问题描述:
中提取收集的财产我使用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做任何事情来获得你想要的。
我希望对你有意义。如果没有,请更新您的问题,并告诉我们更多关于您真正想要做的事情。
答
从技术上讲,你可以用逗号“”巢到集合。 这应该工作,但不建议。你可以让你的整个对象使用它,它更容易,更快。
我不想加载整个文档。我只想从所有文档中提取某些值。 使用LINQ我不能创建一个索引,因为文件不与波苏斯只是ExpandoObject或动态实体存储。 – legion 2012-01-13 01:31:36
您可以使用字符串创建索引,该字符串将在服务器上处理。 – 2012-01-13 14:05:27
通过使用字符串创建索引,你的意思是什么? – legion 2012-01-26 02:48:12