Google Cloud Datastore过滤器数据,其中包含列表中的项目

tol*_*rdi 5 java datastore google-cloud-datastore

在我们的Google Cloud Datastore中,我们有一个属性(companies属性),该属性存储字符串列表,并且在查询数据存储区时,我们希望将Java列表发送到数据存储区API并获取公司属性至少包含以下内容之一的数据:列表中的项目。我们当前的查询代码在下面,但是我们无法找到如何在此代码上设置列表过滤器。有人对此有想法吗?

public List<MAExchangeNews> getExchangeNews(IExchangeController controller,int count, String offsetVal, List<String> relatedCompanySymbols) {
    List<MAExchangeNews> result = null;
    if (controller != null) {
        EntityQuery.Builder builder = Query.newEntityQueryBuilder();
        builder.setKind(KIND_NAME);
        builder.setLimit(count);
        builder.setOrderBy(OrderBy.desc(FIELD_NEWS_TIME));
        if (offsetVal != null) {
            builder.setStartCursor(Cursor.fromUrlSafe(offsetVal));
        }
        if (relatedCompanySymbols != null) {

//This is the area we want to add our filtering code        //builder.setFilter(PropertyFilter.Operator.GREATER_THAN_OR_EQUAL_VALUE);
        }

        Query<Entity> query = builder.build();

        QueryResults<Entity> resultList = datastore.run(query);
        result = entitiesToNews(controller,resultList);         
        if (result != null) {
            this.nextOffset = resultList.getCursorAfter().toUrlSafe();
        }           
    }

    return result;
}
Run Code Online (Sandbox Code Playgroud)

我们想要实现的示例:

- Our DataStore Entities Company Properties :
  1. FROTO, KCHOL
  2. KCHOL, ALBRK
  3. AKBNK, GARAN
  4. ALBRK, ACSEL

- Our query List
  1. {KCHOL,GARAN}

- Expected Result:
  1. FROTO, KCHOL
  2. KCHOL, ALBRK
  3. AKBNK, GARAN
Run Code Online (Sandbox Code Playgroud)

我认为我们需要的是一个包含或语句(如果可能)的包含查询,或一个in查询。但是我不知道如何使用Google Cloud Datastore API来实现它。

谢谢

par*_*han 2

我对java不熟悉。但与 Google Cloud Datastore 的关系不大。Google Cloud Datastore 有五种类型的过滤器(=<<=>>=),因此您只能使用过滤器中的一种。

为了获得 1.{KCHOL,GARAN} 的结果,您可以尝试使用两个查询,第一个查询查找 KCHOl 的数据,第二个查询查找 GARAN 的数据并将其合并。

Google Cloud Datastore 中没有任何类似的包含 In 的内容。也许本指南有助于找到您的解决方案。