如何重建我的应用程序的索引?

时间:2013-02-17 05:15:58

标签: python google-app-engine python-2.7 indexing google-search-api

我正在构建似乎像这样工作的索引

    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作业?现在我没有将addedmodified变量添加到索引中,如果我想搜索索引,那么该索引在索引中也很有用。索引中的某个时间戳(?)所以现在我看到它正在工作我问我是否也对索引变量做了很多操作并将addedmodified变量添加到索引中?

1 个答案:

答案 0 :(得分:1)

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

如果您根本不需要旧文件,则应将其删除。

但在这两种情况下(服务或删除),您需要使用多个相等过滤器(titletextcity等)和一个不等式过滤器(在created),所以您需要configure a compound index