【问题标题】:Substring searching of text in Google App Engine Datastore entityGoogle App Engine Datastore 实体中文本的子字符串搜索
【发布时间】:2012-10-23 12:23:40
【问题描述】:

我一直在使用 Google App Engine。我发现搜索子字符串和其他一些操作有问题。 javax.jdo.Query 提供了根据需要设置过滤器的选项。有几个过滤器可用,例如包含、不等式运算符,但我找不到任何符合我需要的过滤器。

我无法找到以下方法: 如何将查询过滤器设置为

  1. 搜索子字符串
  2. 按正则表达式搜索
  3. 忽略大小写搜索

以上 3 种操作中的任何一种都可以通过 JDO 实现吗?

【问题讨论】:

  • 我看到这个问题是2012年发布的。有什么新的发展可以让我们这样搜索吗?

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


【解决方案1】:

不,这些在 App Engine 数据存储区中是不可能的,因为它们不能满足索引。 App Engine 数据存储区不执行需要扫描所有实体的查询。

对于第一个选项,全文搜索可能是您想要的。第二,没有好的解决办法。最后,您只需将字符串的小写或大写版本存储在数据存储中即可进行搜索。

【讨论】:

  • 请注意,搜索 API 完全不区分大小写,因此它可以解决 1 和 3。
  • 如何使用全文搜索来搜索子字符串?假设我有一个Document,它的name 属性值为“banana”。如果我只有“ana”要搜索,如何查询该文档?
  • @NickJohnson 我想这样做是为了在用户在搜索字段中输入时通过 AJAX 提供搜索建议。我通过向文档添加一个属性来解决这个问题,该属性包含一个由所有可能的子字符串组成的句子,例如对于“香蕉”:“b ba ban bana bananbanana a an ana anan anana n na nan nana”,然后搜索该属性。
  • @NickJohnson 我更喜欢提供基于任意子字符串的搜索建议,而不仅仅是前缀。例如。当用户键入“virginia”时,“west Virginia”应该是一个建议。使用常规数据存储无法做到这一点。
  • @Korneel 如果你有一个 words 列表并对其进行前缀匹配。 “Vir”是“Virginia”的前缀,是列表中的单词之一[“West”,“Virginia”]。
【解决方案2】:

您是否从 App Engine 对新的 FTA 进行了一些搜索? https://developers.google.com/appengine/docs/java/search/

您必须从数据存储中创建数据索引,然后您可以使用一些通配符对索引文档进行搜索。

但请注意,这个项目目前是实验性的。

编辑:

另一种解决方案是在 App Engine 上使用 WhooshBackends Service。然后创建一个 Web 服务。并使用 urlfetch 从您的前端调用您的后端。

【讨论】:

  • 感谢您提供此链接。会与它保持联系。但由于它是实验性的,我现在不会使用它。
  • 另一种解决方案是使用带有后端的 Whoosh。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-25
  • 2012-09-29
  • 2012-06-19
相关资源
最近更新 更多