【问题标题】:Implementing keyword search on Google App Engine?在 Google App Engine 上实施关键字搜索?
【发布时间】:2012-08-26 19:17:44
【问题描述】:

我正在尝试在 GAE 的数据存储中实现对特定实体类型的关键字/标签搜索:

class Docs(db.Model):
    title = db.StringProperty()
    user = db.StringProperty()
    tags = db.StringListProperty()

我还编写了一个非常基本的搜索函数(使用一个虚假的标签列表,而不是数据存储值),它接受一个查询字符串并将其与每组标签进行匹配。它根据与标签匹配的查询词数对 Docs 进行排名。这几乎就是我需要做的所有事情,除了使用实际的数据存储区。

我不知道如何获取实际的数据存储区值。为了使我的搜索功能正常工作,我需要数据存储区中所有实体的列表,这是不可能的 (?)。

我还尝试研究 GAE 的实验性全文搜索和关系索引实体,作为在不使用我编写的函数的情况下搜索数据存储的一种方式。两者都没有成功。

关于如何根据标签搜索实体还有其他想法吗?

【问题讨论】:

  • 搜索 api 可能是实现您的要求的更好选择。你说你调查过,没用。它在什么方面不起作用?
  • 我不知道如何使用 api 搜索标签列表。它每天也只能处理 1000 次搜索……这有点小。
  • 您可以要求更高的报价 - 它还处于早期阶段。至于搜索标签,它们可能只是一个包含所有标签的文本字段。有一个非常详细的示例代码——code.google.com/p/google-app-engine-samples/source/browse/trunk/…
  • 如果您使用 StringListProperty 并开始尝试匹配多个标签,您最终会得到非常昂贵的查询。
  • 否,但如果您正在查询匹配 3 个关键字的内容,那么您正在使用“IN”子句来查询字符串列表属性。我认为您需要阅读文档。

标签: google-app-engine search google-cloud-datastore


【解决方案1】:

这是一个非常简单的查询,如果你需要找到所有带有“findme”标签的Docs,很简单:

num_results = 10
query = Docs.all().filter("tags in", "findme")
results = query.fetch(num_results) # get list of results

有据可查: https://developers.google.com/appengine/docs/python/datastore/queries

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    相关资源
    最近更新 更多