如何为我的应用重建索引?
我正在建立一个索引,似乎是这样工作的:
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)
我应该设置一个每天运行一次的定时任务,来重建整个索引,还是设置一个每天运行一次的定时任务,来从索引中删除最旧的实体呢?现在我没有把added
和modified
这些变量添加到索引中,但它们在索引中可能也很有用,比如我想搜索某个特定的时间戳。所以现在我看到这个索引工作正常,我想问一下,我是否也应该对索引变量进行操作,把added
和modified
这两个变量添加到索引中?
1 个回答
1
索引是自动生成并不断更新的,你对这个过程没有控制权。当某个实体被修改(或者创建/删除)时,索引就会更新。你无法选择不让某些实体参与这个过程。
如果你根本不需要旧的文档,那就把它们删除掉。
但无论是提供服务还是删除文档,你都需要使用多个相等条件的过滤器(比如在 title
、text
、city
等字段上),还需要一个不等条件的过滤器(在 created
字段上),所以你需要配置一个复合索引。