google-app-engine - Google App Engine - 关键字搜索 + 对其他属性进行排序

标签 google-app-engine

假设我有一个看起来有点像这样的实体:

class MyEntity(db.Model):
    keywords            = db.StringListProperty()
    sortProp            = db.FloatProperty()

我有一个过滤器,可以通过以下方式进行关键字搜索:

query = MyEntity.all()\
                .filter('keywords >=', unicode(kWord))\
                .filter('keywords <',  unicode(kWord) + u"\ufffd")\
                .order('keywords')

效果很好。我遇到的问题是,如果我尝试使用“sortProp”下订单:

                .order('sortProp')

排序没有效果。我明白为什么 - 文档明确指出这是不可能的,并且在使用具有多值属性的相等过滤器时会忽略排序顺序(来自 Google 文档):

One important caveat is queries with both an equality filter and a sort order on a multi-valued property. In those queries, the sort order is disregarded. For single-valued properties, this is a simple optimization. Every result would have the same value for the property, so the results do not need to be sorted further. However, multi-valued properties may have additional values. Since the sort order is disregarded, the query results may be returned in a different order than if the sort order were applied. (Restoring the dropped sort order would be expensive and require extra indices, and this use case is rare, so the query planner leaves it off.)

我的问题是:有人知道解决这个问题的好方法吗?有没有更好的方法来进行关键字搜索来规避此限制?我真的很想将使用关键字与其他属性的排序结合起来。我能想到的唯一解决方案是在查询后对列表进行排序,但如果这样做,我将失去偏移到查询中的能力,并且如果数据集很大,我什至可能无法获得最高排序顺序的结果。

感谢您的提示!

最佳答案

解决方法 1: 对关键字应用词干提取算法,然后您就不需要进行比较查找。

解决方法 2: 将所有唯一关键字存储在单独的实体组(“表”)中。从该组中查找符合您条件的关键字。然后使用关键字 IN [kw1, kw2, ...] 进行查询。确保匹配的关键字数量不要太多,例如只能选择前 10 个。

解决方法 3: 在应用程序端重新排序项目列表

解决方法 4: 使用IndexTank进行全文搜索,或申请@proppy提到的“受信任的测试人员计划”。

关于google-app-engine - Google App Engine - 关键字搜索 + 对其他属性进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8801508/

相关文章:

php72 动态 url 路由与前端 Controller 通过入口点标准不起作用 Google App Engine [GAE]

python正则表达式应用引擎

java - 谷歌应用引擎: How to send a Form POST?

java - Objectify 无法将大于 500 个字符的字符串自动转换为 @Embed 集合中的文本

google-app-engine - Google App Engine 路由和路径

google-app-engine - AppEngine,从控制面板清除内存缓存

java - 使用查询字符串搜索文件在 Google Drive api 上不起作用

python - 是否可以在 Google App Engine 中使用 PyMongo?

python - 为每个用户创建唯一的个人资料页面 python

google-app-engine - Google App Engine 上的 NodeJS Forge 查看器错误