我正在使用带有python(版本2.7)的appengine用于处理作业列表和求职的Web应用程序。 后端包含一个“作业”表,其中包含20多个字段,如标题,日期,经验等。我为每个过滤器的排列和组合定义了必要的复合索引。正如您所猜测的那样,索引的数量很高。
前端为用户提供搜索作业的选项,并使用列过滤它们。
这符合预期,但有以下缺点:
有些列(例如5个)只接受一组值,因此使用它们进行过滤非常简单。虽然其他字段可以具有用户定义的值,因此通过它们进行过滤需要自定义python代码。
Jinja是模板引擎,然后将数据呈现为html。
高级搜索+索引参考:https://cloud.google.com/appengine/articles/indexselection
是否有更好的方法/算法在appengine中实现搜索和高级搜索?
答案 0 :(得分:3)
您可能需要考虑使用App Engine中提供的Full Text Search API。实质上,当在Cloud Datastore中创建实体时,您将创建一个包含实体ID / Key和所有可搜索字段的Document,并将其发送到Search API进行索引。对数据存储区实体的任何更新都需要更新相应的搜索文档。此外,删除实体时,删除相应的搜索文档。
修改应用程序的搜索代码,以执行搜索索引文档而不是数据存储区查询。检索文档ID的页面(例如50)。使用数据存储区获取50个实体的数据获取并显示结果。
根据documentation -
Search API可让您的应用程序执行类似Google的全文 搜索结构化数据,并支持基于地理位置的查询。 它可以在任何受益的应用程序域中使用 全文搜索,例如:
与数据存储区查询相比,这肯定会为您的应用程序用户提供更好的搜索体验。
实现此功能后,可能能够从数据存储区中删除复合索引。