Django Haystack index.remove_object 不起作用

问题描述 投票:0回答:1

我无法让index.remove_object真正完成删除对象的操作。即使删除后,它们仍会继续出现在索引中。

我已经通过信号处理器以及在外壳中手动尝试过。我没有收到错误消息,但该对象仍然通过 SearchQuerySet 显示。

相关代码如下:

### search_index.py ###
class BookIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.EdgeNgramField(document=True, use_template=True)
    id = indexes.IntegerField(indexed=False, stored=True, model_attr='id')
### shell ###
from haystack import connections
from haystack.query import SearchQuerySet
from .models import Book

book_object = Book.objects.first()
SearchQuerySet().filter(id=book_object.id).count()
--> 1

index = connections['default'].get_unified_index().get_index(Book)
index.remove_object(book_object, using='default')
SearchQuerySet().filter(id=book_object.id).count()
--> 1

book_object.delete()  # RealTimeSignalProcessor fires here, confirmed via print statement, no errors
SearchQuerySet().filter(id=book_object.id).count()
--> 1



# Update does work, though, as seen below:
another_book_object = Book.objects.last()
another_book_object.name
--> 'The Shining'
SearchQuerySet().filter(name='The Shining').count()
--> 1
another_book_object.name = 'Lord of the Rings'
another_book_object.save()  # RealTimeSignalProcessor fires here
SearchQuerySet().filter(name='The Shining').count()  # No longer finds 'The Shining' in index because it has been updated
--> 0

我什至可以向信号处理器添加一条打印语句,显示代码正在触发,但由于某种原因索引本身没有更新。 如果我运行rebuild_index,该对象确实会消失,但我不想每次删除某些内容时都必须这样做。

index.update_object 工作正常,新值反映在索引中。但remove_object不会。

有什么想法吗?

django django-haystack
1个回答
0
投票

您找到解决这个问题的方法了吗?

抱歉使用答案选项,我没有足够的声誉来评论哈哈

© www.soinside.com 2019 - 2024. All rights reserved.