【问题标题】:Searchkick manually remove specific record IndexSearchkick 手动删除特定记录索引
【发布时间】:2015-04-26 00:20:48
【问题描述】:

如何使用 Searchkick 手动删除特定记录索引。有重新索引特定记录的选项,但我没有找到删除记录索引的任何选项。

 product = Product.find 10
 product.reindex

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 elasticsearch searchkick


    【解决方案1】:

    如果有人正在寻找如何删除和删除整个索引以重新开始,您可以这样做:

    MyModel.searchkick_index.delete &&  MyModel.searchkick_index.create
    

    【讨论】:

      【解决方案2】:

      从索引中删除:

      product = Product.find 10
      Product.searchkick_index.remove(product)
      

      【讨论】:

        【解决方案3】:

        给定product = Product.find(10)

        如果product.should_index? 返回falseproduct.reindex 将从索引中删除该记录。

        如果您需要手动删除记录,Product.searchkick_index.remove(product) 是您的最佳选择。

        【讨论】:

        • 你确定吗?我刚刚在 3.1.3 上对此进行了测试,它并没有从索引中删除记录。无论如何,我认为当should_index?false 时,它不仅会跳过重新索引,而且还会删除任何现有记录,这并不直观。我会假设should_index? 将用于在仅更新非索引字段等时跳过不必要的重新索引。
        【解决方案4】:

        如果您只有已删除模型的 id 怎么办?例如。如果您在后台工作人员中接听电话?

        查看源代码,searchkick 仅检查对象的类以计算索引并从对象中获取 id,因此您可以执行以下操作来绕过它:

        # given value id holding the record id of the deleted model record (eg. Product with id 123)
        
        prod = Product.new(id: id)
        
        Product.searchkick_index.remove(prod)
        

        哈克但有效:P

        【讨论】:

          猜你喜欢
          • 2023-03-09
          • 1970-01-01
          • 2023-04-03
          • 1970-01-01
          • 1970-01-01
          • 2016-08-11
          • 2015-05-09
          • 2013-09-14
          • 1970-01-01
          相关资源
          最近更新 更多