Python 如何为我的应用重建索引?

Python 如何为我的应用重建索引?,python,google-app-engine,python-2.7,indexing,google-search-api,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)

我正在建立这样的索引

    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作业从索引中删除最旧的实体?现在,如果我想搜索索引中的某个时间戳(?),我不会将
added
modified
变量添加到索引中,这在索引中也很有用因此,现在我看到它正在工作,我问我是否也对索引变量采取行动,并将
添加的
修改的
变量添加到索引中?

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

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


但是在这两种情况下(服务或删除),您都需要使用多个相等过滤器(在
标题
文本
城市
,等等)和一个不相等过滤器(在
创建
),所以您需要这样做。

第二个选项似乎更有效:每天删除旧文档。@presveva感谢您的帮助。有第三种选择吗?如果索引变大,我想我应该更新而不是重建。日期字段?谢谢你的回答。我认为,如果我只是删除一个实体,那么当索引更新时,该实体将从索引中消失。但我还没有读到索引是如何更新的(我也没有编写任何索引更新程序)。索引在实体更新后立即自动更新,但它们是异步更新的(=实体更新的结果在索引中不立即可见):请参阅I do
search.index(name='article').add(doc)中的应用阶段
我读到这可能是一个
.put
而不是
。add
但是
。add
似乎可以工作,而我在页面上看不到它。我可以做一个新的索引,因为这是实验性的第一次尝试。这是一个成功,因为我可以比我的备选方案更灵活地搜索索引,而我的备选方案不允许像谷歌搜索api那样很好地组合字段。我将创建一个新索引,其中还包含创建的
字段
,并从搜索中删除过期(>60天)的实体。所以我想我只是删除旧的实体或者尝试更新。