2017-02-23 32 views

回答

2

您可以在模型类中定义的方法get_indexed_objects,返回项的查询集被编入索引:

@classmethod 
def get_indexed_objects(cls): 
    return cls.objects.filter(live=True) 
+1

非常感谢!我很快就会提交一份文档补丁。 – shacker

1

如果你只需要对结果执行一些简单的过滤,我建议所有的索引在查询时做过滤(除非你不包括相当多的文件以节省硬盘空间):

MyModel.objects.filter(live=True).search("..") 

鹡鸰将是过滤器转换成Elasticsearch查询的一部分,所以这不应该”对pe没有任何显着的影响rformance。这确实需要使用index.FilterField对所有过滤器字段进行索引,但如果您使用的是页面模型,则Wagtail已为所有基本页面字段执行此操作。

这种方法的主要优点是,如果您将来需要为单独的搜索功能执行此操作,可以轻松地删除筛选器。例如,W does可以做到这一点,以允许搜索管理员中的所有页面,但只能在前端进行搜索。

+0

谢谢卡尔。在我们的案例中,可能存在一些隐私问题,我们需要注意围绕某些记录,因此将它们保留在索引之外非常重要。但作为一般方法,您是对的 - 将所有内容编入索引,然后过滤为您提供更大的灵活性。 – shacker