0

我正在构建看起来像这样工作的索引

    doc = search.Document(doc_id=str(article.key()), fields=[
        search.TextField(name='title', value=article.title),
        search.TextField(name='text', value=article.text),
        search.TextField(name='city', value=article.city),
        search.TextField(name='region', value=article.region),
        search.NumberField(name='cityID', value=city_entity.key().id()),
        search.NumberField(name='regionID', value=region_entity.key().id()),
        search.NumberField(name='category', value=int(article.category)),
        search.NumberField(name='constant', value=1),
        search.NumberField(name='articleID', value=article.key().id()),
        search.TextField(name='name', value=article.name)
        ], language='en')
    search.Index(name='article').add(doc)

该应用程序获得了一篇新文章,该文章通过上面似乎有效的代码填充了索引。索引已建立,我可以使用搜索 API 搜索实体。但是我不想要超过 60 天的旧文章,那么我该如何调整呢?实体有一个“创建”和“更新”时间戳:

added = db.DateTimeProperty(verbose_name='added', auto_now_add=True)  # readonly
modified = db.DateTimeProperty(verbose_name='modified',
                                   auto_now_add=True)

我应该每 24 小时有一个 cron 作业来重建整个索引,还是每 24 小时有一个 cron 作业从索引中删除最旧的实体?现在我没有将addedandmodified变量添加到索引中,这在索引中也很有用,如果我想在索引中搜索某个时间戳(?),所以现在我看到它正在工作,我问我是否也多作用于索引变量并将addedmodified变量添加到索引中?

4

1 回答 1

1

索引是自动连续构建的,您无法控制此过程。当实体更改(或创建/删除)时,索引会更新。没有办法将某些实体排除在外。

如果您根本不需要旧文件,那么您应该删除它们。

但是在这两种情况下(服务或删除),您都需要使用多个相等过滤器(on titletextcity等)和一个不等过滤器(on created),因此您需要配置一个复合索引

于 2013-02-17T09:12:56.210 回答