【问题标题】:RavenDB index creation error: index already existsRavenDB 索引创建错误:索引已存在
【发布时间】:2016-03-02 21:14:54
【问题描述】:

我现在正在尝试使用 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 上启动应用程序时,它没有引发任何错误(即使我似乎无法使用索引),从第二次开始,它给了我这个错误:@987654322 @

(不那么)有趣的事情是,我在使用 RavenDB 工作室的任何地方都看不到索引,也无法使用它进行查询。所以看起来索引不可用但系统以某种方式知道?

【问题讨论】:

    标签: indexing ravendb


    【解决方案1】:

    首先,一个建议:让你的索引成为类。这样您就可以在以后使用索引类型强输入查询:

    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(...)
    

    【讨论】:

      【解决方案2】:

      与:

          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 的示例正是您在链接中找到的(并且正确)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多