我正在尝试使用RavenDb创建索引以供以后使用(例如使用索引进行大量删除)。
据我所知,最好的实践是在应用程序启动时创建索引,并且不需要检查索引是否已经存在,在这种情况下,它将被简单地更新(如果某些内容已更改)。
鉴于我试图在global.asax application_start事件中构建自己的索引(因为我在MVC应用程序中玩)。这是我创建索引的代码:
store.DatabaseCommands.PutIndex("Xlns/ProductItems/ByCatalogueId",
new IndexDefinitionBuilder<ProductItem>
{
Map = items => from product in items
select new
{
CatalogueId = product.CatalogueId
}
}
);
很简单,不是吗? 当我第一次在空的RavenDB上启动应用程序时太糟糕了,它不会引发任何错误(即使看起来我似乎无法使用索引),并且从第二次开始,它给了我这个错误:{{ 1}}
(不是那么)有趣的事情是我无法使用RavenDB工作室在任何地方看到索引,而且我无法使用它来查询。所以似乎索引不可用,但系统已知道了什么?
答案 0 :(得分:0)
首先,建议:使索引成为类。这样,您可以稍后使用索引类型强烈输入查询:
public class ProductItems_ByCatalogueId : AbstractIndexCreationTask<ProductItem>
{
public ProductItems_ByCatalogueId()
{
Map = items => from product in items
select new
{
CatalogueId = product.CatalogueId
}
}
}
然后,使用一行代码安装程序集中的所有索引:
// Inside Global.asax, inside .Initialize():
IndexCreation.CreateIndexes(this.GetType().Assembly, store);
现在您的索引已准备就绪。要使用此索引进行查询:
var products = ravenSession.Query<ProductItem, ProductItems_ByCatalogueId>()
.Where(...)
答案 1 :(得分:0)
使用:
documentStore.DatabaseCommands.GetIndex("BlogPosts/ByTitles")
您可以知道索引是否存在,然后您知道是否需要添加索引; ravendb文档建议使用类来定义静态索引:http://ravendb.net/docs/article-page/2.5/csharp/client-api/querying/static-indexes/defining-static-index
Judah Himango的例子,它恰好(并且正确)你在链接中找到了什么