я тестировал на 3 типах интерфейса.Но данные результата имеют различие.
вначале cli
aws dynamodb query --table-name 'table' --index-name 'GSIName' \
--key-condition-expression 'createdTime = :a' \
--filter-expression '(contains(tags,:val0) or contains(tags,:val1))' \
--expression-attribute-values '{":a":{"N":"1538023462"},":val0":{"S":"test"},":val1":{"S":"test2"}}' \
--no-scan-index-forward \
--no-consistent-read \
--page-size 50
cli удалось получить чистые данные, которые я надеюсь получить. Но ПРОБЛЕМА находится на DynamoDBQueryExpression и QuerySpec.данные такого результата были получены с ограничением, а другой не возвращал данные ... я имею в виду, что AccumulatedItemCount был 0, а данные итератора были пустыми.
особенно QuerySpec был пуст ..
Table table = dynamoDB.getTable("table");
Index index = table.getIndex("GSIName");
QuerySpec spec = new QuerySpec()
.withKeyConditionExpression("createdTime = :a")
.withFilterExpression(queryString) //queryString : (contains(tags,:val0) or contains(tags,:val1))
.withValueMap(query2) // query2 values : :a=1538023462, :val0=test, :val1=test2
.withConsistentRead(false)
.withScanIndexForward(false)
.withMaxPageSize(50);
ItemCollection<QueryOutcome> items = index.query(spec);
String queryString= "(contains(tags,:val0) or contains(tags,:val1))";
HashMap<String, AttributeValue> query = new HashMap<>();
query.put(":val0", new AttributeValue("test"));
query.put(":val1", new AttributeValue("test2"));
DynamoDBQueryExpression<RecommendationUserInfoTable> expression = new DynamoDBQueryExpression<RecommendationUserInfoTable>()
.withIndexName('GSIName')
.withHashKeyValues(key)
.withFilterExpression(queryString)
.withExpressionAttributeValues(query)
.withConsistentRead(false)
.withScanIndexForward(false)
.withLimit(50);
Dynamodb Таблица расчетных данныхТипы
tags : SS
createdTime : N : I(RANGEKEY),GSI(HASHKEY)
user : S : I(HASHKEY)
order2 : S : GSI(RANGEKEY)