java - 数据存储和index.yaml : no matching index found

标签 java google-app-engine google-cloud-datastore

我有一个在数据存储上执行查询的肥皂服务:

private final String KEY_NAME = "keyName";
private final String KEY_TYPE = "storedData";
private final String ENTITY_TYPE = "record";
private final String TEMP_ROW = "temperatura";
private final String HUM_ROW = "umidita";
private final String DATE_ROW = "date";
private DatastoreService dataStore;
private Key dataKey = KeyFactory.createKey(KEY_TYPE, KEY_NAME);
private final Query query = new Query(ENTITY_TYPE, dataKey).addSort(DATE_ROW,
    Query.SortDirection.ASCENDING);

@WebMethod
public int sendData(String temperatura, String umidita) {
    DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyy HH:mm:ss");
    Date date = new Date();

    Entity record = new Entity(ENTITY_TYPE, dataKey);
    record.setProperty(TEMP_ROW, temperatura);
    record.setProperty(HUM_ROW, umidita);
    record.setProperty(DATE_ROW, date);
    dataStore = DatastoreServiceFactory.getDatastoreService();
    dataStore.put(record);  
    return 1;
}

我已经写了这个index.yaml

indexes:
- kind: Record
  ancestor: yes
  properties:
      - name: temperatura
      - name: umidita
      - name: data
      direction: asc

但是当我尝试执行该查询时出现此错误:

com.google.appengine.api.datastore.DatastoreNeedIndexException: no matching index found.
The suggested index for this query is:
<datastore-index kind="Record" ancestor="true" source="manual">
    <property name="date" direction="asc"/>
</datastore-index>

index.yaml 与查询不匹配有什么问题?

最佳答案

您定义的索引使用 3 个属性。您的查询仅使用一个索引,或者您将查询更改为使用索引中定义的 3 个属性,或者您定义要在模型声明中建立索引的日期字段。

关于java - 数据存储和index.yaml : no matching index found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18550748/

相关文章:

google-app-engine - 来自 Cloud Datastore Viewer 的字符串编码 key 的 GQL 错误

google-cloud-datastore - 使用 Google 云数据流从一个数据存储读取数据并将数据写入另一个数据存储

java - 无法复制 : "Comparison method violates its general contract!"

java - 卷轴不出现

java - 如何在 Java 的 post 请求中添加 cookie?

google-app-engine - 谷歌应用引擎或亚马逊网络服务

google-app-engine - 使用 Google App Engine 或 ZoneEdit 在裸域上设置 OpenID 委托(delegate)

java - 为存储在 Google Appengine 数据存储区中的实体创建 URL

java - 疑似 JMS 队列资源泄漏 - 注入(inject)连接、 session 和队列

mysql - 使用一对多关系进行关联时,JDO 尝试创建新记录