在W's的ElasticSearch indexing文档中,似乎将给定模型的所有实例都添加到索引中。但是我希望通过创建QuerySet或者通过设置某种类型的参数(QuerySet会更好)来排除一些(很多)行的索引。W index探索:排除一些内容或使用查询集?
有没有办法做到这一点?或者我是否需要从W outside外引入WT模型?
在W's的ElasticSearch indexing文档中,似乎将给定模型的所有实例都添加到索引中。但是我希望通过创建QuerySet或者通过设置某种类型的参数(QuerySet会更好)来排除一些(很多)行的索引。W index探索:排除一些内容或使用查询集?
有没有办法做到这一点?或者我是否需要从W outside外引入WT模型?
您可以在模型类中定义的方法get_indexed_objects
,返回项的查询集被编入索引:
@classmethod
def get_indexed_objects(cls):
return cls.objects.filter(live=True)
如果你只需要对结果执行一些简单的过滤,我建议所有的索引在查询时做过滤(除非你不包括相当多的文件以节省硬盘空间):
MyModel.objects.filter(live=True).search("..")
鹡鸰将是过滤器转换成Elasticsearch查询的一部分,所以这不应该”对pe没有任何显着的影响rformance。这确实需要使用index.FilterField
对所有过滤器字段进行索引,但如果您使用的是页面模型,则Wagtail已为所有基本页面字段执行此操作。
这种方法的主要优点是,如果您将来需要为单独的搜索功能执行此操作,可以轻松地删除筛选器。例如,W does可以做到这一点,以允许搜索管理员中的所有页面,但只能在前端进行搜索。
谢谢卡尔。在我们的案例中,可能存在一些隐私问题,我们需要注意围绕某些记录,因此将它们保留在索引之外非常重要。但作为一般方法,您是对的 - 将所有内容编入索引,然后过滤为您提供更大的灵活性。 – shacker
非常感谢!我很快就会提交一份文档补丁。 – shacker