gpt4 book ai didi

django - 使用 update_index --remove 从 Haystack/Xapian 索引中删除

转载 作者:行者123 更新时间:2023-12-01 10:09:25 41 4
gpt4 key购买 nike

我正在尝试让 ./manage.py update_index --remove 管理命令从搜索索引中删除结果。

我想删除对象,而不是在它们被删除时,只是在它们:

enabled = models.BooleanField()

字段为False

我在这里做什么?无论如何我都需要准备 SearchIndex 吗?

import datetime
from haystack.indexes import *
from haystack import site
from articles.models import Article

class ArticleIndex(SearchIndex):

text = CharField(document=True, use_template=True)
title = CharField(model_attr='title')
content = CharField(model_attr='content')

def get_queryset(self):
"""Used when the entire index for model is updated."""
return Article.site_published_objects.filter(enabled=True)

def get_updated_field(self):
return 'modified'

def remove_object(self):
pass

site.register(Article, ArticleIndex)

谢谢。

最佳答案

我还没有对此进行测试,但您可以通过将搜索索引模板包装在一个条件中来达到预期的效果,例如:

{# in search/indexes/yourapp/article_text.txt #}
{% if object.enabled %}
{# ... whatever you have now #}
{% endif %}

当你运行 ./manage.py update_index , 文章 enabled=False最终将没有与之关联的数据,也不会出现在搜索中。

更新

查看 SearchIndex 的来源, 有一个 remove_object() 从索引中删除对象的方法。还有 should_update() 运行它以确定是否应更新对象的索引。

也许可以使用类似的方式触发索引删除:

class ArticleIndex(SearchIndex):
# ...

def should_update(self, instance, **kwargs):
if not instance.enabled:
self.remove_object(instance, **kwargs)
return instance.enabled

关于django - 使用 update_index --remove 从 Haystack/Xapian 索引中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7009472/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com