删除模型索引后如何删除Sunspot索引数据?

时间:2018-02-27 09:10:13

标签: ruby-on-rails sunspot sunspot-rails sunspot-solr websolr

我正在使用RailsSunspot gem和Websolr进行Solr托管。假设我有一个Solr索引的ActiveRecord模型,如下所示:

class User < ActiveRecord::Base
  searchable do
    text :name
  end
end

现在我想从这个模型中删除索引,所以我只删除了这个索引代码(可搜索的块)。索引数据会自动从Solr中删除吗?我假设没有,我需要手动删除/重新索引。我可以重新索引这样的一切:

Sunspot.index
Sunspot.commit

但是重新索引我的整个数据库会很慢。还有另一种 - 更快的方法来停止索引1个模型吗?我没有看到Websolr中的任何界面查看和删除索引中的记录,我似乎无法找到有关如何使用Sunspot从索引中删除模型的任何信息。

1 个答案:

答案 0 :(得分:0)

  

我可以重新索引这样的所有内容:

不,你不能,如果你需要再次重新索引,那么输入rails c然后

打开Rails控制台
=> Model.index

# User Load (15.6ms)  SELECT  "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT $1  [["LIMIT", 50]]
# [2018-02-27 18:45:04 +0600] Start Indexing
# D, [2018-02-27T18:45:05.439714 #15296] DEBUG -- :   SOLR Request (762.4ms)  [ path=update parameters={} ]

对于删除索引数据,请尝试以下

curl http://localhost:8982/solr/default/update?commit=true -d '<delete><query>*:*</query></delete>'

让我们在网址部分描述

  • localhost :是主机名。
  • 8982 :您的Solr服务器运行的端口号,如果您混淆了什么是您的端口号,然后打开rails console并键入此puts Sunspot.config.inspect它将显示您的端口号。
  • /solr/default/update :这是执行命令的路径。
  • ?commit=true -d :这是指令。
  • '<delete><query>*:*</query></delete>' :这就是方法。

我找到了这个here,但它对我不起作用,因为端口号和路径不同,我已经编辑了自己的方式并且它运行良好。

我认为这会有所帮助。