从haystack索引中删除对象

时间:2014-03-07 05:16:22

标签: django indexing django-haystack

我使用django删除了一条记录:

 r = model.objects.get(id=1)
 r.delete()

现在我想从索引中删除记录而不重新编制索引。怎么样?

我无法让remove_object工作,haystack docs太高了。我不能只运行“python manage.py update_index - remove”,因为这也会重新索引所有内容。

3 个答案:

答案 0 :(得分:2)

哈,答案很简单,但很丑陋。基本上,以下代码有效,因为如果你正确计时(在过去一小时内没有数据库中的条目),它将只删除已删除记录的索引条目。瞧。

  python manage.py update_index --remove --age=1

答案 1 :(得分:1)

有 2 个选项可以删除单个对象。

  • 第一种方法:

您可以使用 remove_object (Django Haystack Docs) 或 update_object (Django Haystack Docs) 删除或更新单个对象,这是 class SearchIndex 的方法

您可以提供一个实例对象以及应该使用哪个连接。

<块引用>

SearchIndex.remove_object(self, instance, using=None, **kwargs)

从索引中删除一个对象。附加到类的删除后挂钩。

<块引用>

SearchIndex.update_object(self, instance, using=None, **kwargs)

更新单个对象的索引。附加到类的保存后挂钩。

<块引用>

如果提供了 using,则指定应使用哪个连接。 >默认依赖路由器来决定应该使用哪个后端。

示例:


from myapp.search_indexes import MyIndex

# Get the object you want to delete or update
instance = YourModel.objects.get(id=id)

# settings.HAYSTACK_CONNECTIONS / name of your index
using = "myindex_name"

# Remove object
MyIndex().remove_object(instance, using)

# Update object
MyIndex().update_object(instance, using)
  • 第二种方法:

您可以通过 SearchBackend.remove() 删除单个对象

这是一些例子:


from haystack import connections as haystack_connections

# Get the object you want to delete or update
instance = YourModel.objects.get(id=id)

# Get all Names/keys of your indexes / settings.HAYSTACK_CONNECTIONS
backend_names = haystack_connections.connections_info.keys()

# Get key of connection for your object
using = backend_names[0]

# Get the backend 
backend = haystack_connections[using].get_backend()

# To remove object
backend.remove(instance)

答案 2 :(得分:0)

实际上更简单的解决方案是使用SignalProcessor(docs),连接到post_delete会在您从orm中删除文档时自动删除文档。