1

我有一个需要非常灵活的搜索功能的应用程序。作为其中的一部分,用户将需要能够对多个文本字段进行全文搜索,但也需要通过一些数字字段进行过滤,这些字段记录定期更新的数据(有时不止一次或两次一分钟)。此数据存储在 NDB 数据存储中。

我目前正在使用 Search API 创建文档对象和索引来搜索文本数据,并且我知道我还可以将数值添加到这些文档中以进行索引。但是,由于这些数字字段的动态特性,我将不断更新(删除和重新创建)搜索 API 索引的文档。即使我允许搜索 API 在一段时间内使用旧数据,它仍然需要每天更新几次。对我来说,这似乎不是存储这些数据以进行搜索的有效方法,特别是考虑到搜索查询的数量将大大少于数据更新的数量。

有没有一种有效的方法可以比不断修改搜索文档更有效地处理这些动态数据?

我对这个想法的唯一想法是实现一个两步过程,然后将全文搜索的结果用于针对 NDB 数据存储的查询或使用 Python 手动过滤。两者似乎都不理想,但我没有想法。提前感谢您的任何帮助。

4

1 回答 1

2

确实,搜索 API 的文档可以包含数字数据,并且可以轻松更新,但正如您所说,如果您要进行大量更新,那么频繁地修改文档可能不是最佳选择。

您可能会考虑的一种设计是将数字数据存储在 Datastore 实体中,但也会大量使用缓存——memcache 或后端内存缓存。交叉引用文档及其关联实体(即,设计实体以包含具有关联文档 ID 的字段,并设计文档以包含具有关联实体键的字段)。如果您的应用程序域使得 doc id 和数据存储实体键名可以是相同的字符串,那么这更加简单。

然后,在缓存中,按 doc id 索引数字字段信息。这将使您可以有效地获取查询检索到的文档的相关数字信息。您当然需要管理更新数据存储实体的缓存。

只要缓存的大小不需要太大,这可能会很好。

如果您的 doc id 和关联的实体键名称可以是相同的字符串,那么我认为您可以利用 ndb 的缓存支持来完成大部分工作。

于 2012-08-16T08:10:39.293 回答