2

我正在使用带有应用程序引擎的java。SQL查询:

select * from Person where name LIKE "a%"

如何在 Google App Engine 上编写它?

4

4 回答 4

2

假设您正在查询 App Engine 数据存储区中的实体,在 Java 中您将重写LIKE "a%"为类似

Query query = new Query("Person")
  .addFilter("name", QueryFilterOperater.GREATER_THAN_OR_EQUAL, "a")
  .addFilter("name", QueryFilterOperator.LESS_THAN, "b");

剩下的留作练习。请参阅https://developers.google.com/appengine/docs/java/datastore/queries

于 2013-03-27T06:09:00.807 回答
1

Appengine 的数据存储中不支持 LIKE 运算符。

两种解决方案:

  • 如果您想保留类似 SQL 的查询,请使用 Google Cloud SQL
  • 对数据存储中的实体使用全文搜索
于 2013-03-27T06:12:01.603 回答
1

要执行此类查询,您必须使用Google Cloud SQL

如果您使用的是 Datastore,那么它不支持全文搜索。您必须手动创建所有可能的名称变体并使用它们来查询实体。您可以将它们存储在特殊实体的多值字段中(它可能很昂贵)或使用完全适合此目的的特殊搜索 API(搜索不支持子字符串匹配,因此您必须使用相同的变体)。

使用 Search API 的两个词是:

  1. 列表项在 Datastore 中创建 Person 实体,其中包含一些name

  2. 在名为 的搜索索引中创建相应的文档Persons,其中包含字段possible_namesentity_id(您也可以使用 Document.doc_id 来存储实体的 id)。在possible_names您存储所有有用的名称变体除以空格。

  3. 查询Persons索引以查找字段possible_names与您的搜索字符串匹配的所有文档。

  4. 使用字段entity_id表单结果的文档按 id 从数据存储中检索实体。

是一个小例子。

于 2013-03-27T06:29:45.490 回答
0

你在找这个吗 "select * from Person where name LIKE \"a%\""

于 2013-03-27T04:47:24.877 回答