private void RunQuery(AerospikeClient client, Arguments args, string indexName, string binName, string valuePrefix) { string filter = valuePrefix + 3; console.Info("Query for: ns={0} set={1} index={2} bin={3} filter={4}", args.ns, args.set, indexName, binName, filter); Statement stmt = new Statement(); stmt.SetNamespace(args.ns); stmt.SetSetName(args.set); stmt.SetBinNames(binName); stmt.SetFilters(Filter.Equal(binName, filter)); RecordSet rs = client.Query(null, stmt); try { int count = 0; while (rs.Next()) { Key key = rs.Key; Record record = rs.Record; string result = (string)record.GetValue(binName); if (result.Equals(filter)) { console.Info("Record found: namespace={0} set={1} digest={2} bin={3} value={4}", key.ns, key.setName, ByteUtil.BytesToHexString(key.digest), binName, result); } else { console.Error("Query mismatch: Expected {0}. Received {1}.", filter, result); } count++; } if (count == 0) { console.Error("Query failed. No records returned."); } } finally { rs.Close(); } }
private void RunQuery(AerospikeClient client, Arguments args, string indexName, string binName) { int begin = 14; int end = 18; console.Info("Query for: ns={0} set={1} index={2} bin={3} >= {4} <= {5}", args.ns, args.set, indexName, binName, begin, end); Statement stmt = new Statement(); stmt.SetNamespace(args.ns); stmt.SetSetName(args.set); stmt.SetBinNames(binName); stmt.SetFilters(Filter.Range(binName, begin, end)); RecordSet rs = client.Query(null, stmt); try { int count = 0; while (rs.Next()) { Key key = rs.Key; Record record = rs.Record; long result = record.GetLong(binName); console.Info("Record found: namespace={0} set={1} digest={2} bin={3} value={4}", key.ns, key.setName, ByteUtil.BytesToHexString(key.digest), binName, result); count++; } if (count != 5) { console.Error("Query count mismatch. Expected 5. Received " + count); } } finally { rs.Close(); } }
private void ValidateRecords(AerospikeClient client, Arguments args, string indexName, string binName1, string binName2, int size) { int begin = 1; int end = size + 100; console.Info("Validate records"); Statement stmt = new Statement(); stmt.SetNamespace(args.ns); stmt.SetSetName(args.set); stmt.SetFilters(Filter.Range(binName1, begin, end)); RecordSet rs = client.Query(null, stmt); try { int[] expectedList = new int[] {1,2,3,104,5,106,7,108,-1,10}; int expectedSize = size - 1; int count = 0; while (rs.Next()) { Key key = rs.Key; Record record = rs.Record; object value1 = null; object value2 = null; record.bins.TryGetValue(binName1, out value1); record.bins.TryGetValue(binName2, out value2); console.Info("Record found: ns={0} set={1} bin1={2} value1={3} bin2={4} value2={5}", key.ns, key.setName, binName1, value1, binName2, value2); if (value1 == null) { console.Error("Data mismatch. value1 is null"); break; } long val1 = (long)value1; if (val1 == 9) { console.Error("Data mismatch. value1 " + val1 + " should not exist"); break; } if (val1 == 5) { if (value2 != null) { console.Error("Data mismatch. value2 " + value2 + " should be null"); break; } } else { long val2 = (long)value2; if (val1 != expectedList[val2 - 1]) { console.Error("Data mismatch. Expected " + expectedList[val2 - 1] + ". Received " + value1); break; } } count++; } if (count != expectedSize) { console.Error("Query count mismatch. Expected " + expectedSize + ". Received " + count); } } finally { rs.Close(); } }
private void RunQuery(AerospikeClient client, Arguments args, string binName, string binName2, IndexCollectionType indexType) { console.Info("Query for: ns={0} set={1} bin={2} {3} within <region>", args.ns, args.set, binName, indexType.ToString()); StringBuilder rgnsb = GenerateQueryRegion(); Statement stmt = new Statement(); stmt.SetNamespace(args.ns); stmt.SetSetName(args.set); stmt.SetFilters(Filter.GeoWithinRegion(binName, indexType, rgnsb.ToString())); RecordSet rs = client.Query(null, stmt); try { int count = 0; HashSet<string> uniques = new HashSet<string>(); while (rs.Next()) { Record record = rs.Record; string val = record.GetString(binName2); uniques.Add(val); count++; } if (count != 697) { console.Error("Query failed. {0} records expected. {1} returned.", 697, count); } else if (uniques.Count != 21) { console.Error("Query failed. {0} unique records expected. {1} unique returned.", 21, uniques.Count); } else { console.Info("query succeeded with {0} records {1} unique", count, uniques.Count); } } finally { rs.Close(); } }
public static void Main(string[] args) { String ns = "test"; String set = "demo"; String host = "127.0.0.1"; int port = 3000; const int MAX_RECORDS = 1000; AerospikeClient client = new AerospikeClient(host, port); /* * Create an index on list values */ IndexTask creator = client.CreateIndex(null, ns, set, "list_value_index", "interests", IndexType.STRING, IndexCollectionType.LIST); creator.IsDone(); Console.WriteLine("created list value index"); /* * Create an index on map keys */ creator = client.CreateIndex(null, ns, set, "map_key_index", "email", IndexType.STRING, IndexCollectionType.MAPKEYS); creator.IsDone(); Console.WriteLine("created map keys index"); /* * Create an index on map keys */ creator = client.CreateIndex(null, ns, set, "map_value_index", "email", IndexType.STRING, IndexCollectionType.MAPVALUES); creator.IsDone(); Console.WriteLine("created map values index"); /* * Load some data */ String[] possibleInterests = new String[]{"cats", "dogs", "mice", "birds", "snakes", "fish", "pigs", "cows"}; String[] emailPostFix = new String[]{"@gmail.com", "@hotmail.com", "@yahoo.com"}; String[] emailType = new String[]{"home", "work", "private"}; Random rand1 = new Random(); Random rand2 = new Random(); for (int i = 0; i < MAX_RECORDS; i++){ /* * create key */ String userName = "******"+i; Key key = new Key(ns, set, userName); Bin user = new Bin("user", userName); /* * create interests */ List<String> interestList = new List<String>(); int interest_count = rand1.Next(possibleInterests.Length-1); for (int j = 0; j < interest_count; j++){ interestList.Add(possibleInterests[rand2.Next(possibleInterests.Length-1)]); } Bin interests = new Bin("interests", interestList); /* * create email addresses */ Dictionary<String, String> emailAddresses = new Dictionary<String, String>(); int email_count = rand1.Next(emailPostFix.Length-1); for (int j = 0; j < email_count; j++){ String type = emailType[rand2.Next(emailType.Length-1)]; String emailString = userName + emailPostFix[rand2.Next(emailPostFix.Length-1)]; emailAddresses.Add(type, emailString); } Bin emails = new Bin("email", emailAddresses); client.Put(null, key, user, interests, emails); } Console.WriteLine(String.Format("created {0} users", MAX_RECORDS)); /* * Query for users interested in "cats" */ Statement stmt = new Statement(); stmt.SetNamespace(ns); stmt.SetSetName(set); stmt.SetBinNames("user", "interests"); stmt.SetFilters(Filter.Contains("interests", IndexCollectionType.LIST, "cats")); RecordSet recordSet = client.Query(null, stmt); int recordCount = 0; try { while(recordSet.Next()){ Console.WriteLine(recordSet.Record); recordCount++; } } finally { recordSet.Close(); } Console.WriteLine(String.Format("Found {0} users interested in cats", recordCount)); /* * Query for users with "work" email addresses. */ stmt.SetBinNames("user", "email"); stmt.SetFilters(Filter.Contains("email", IndexCollectionType.MAPKEYS, "work")); recordSet = client.Query(null, stmt); recordCount = 0; try { while(recordSet.Next()){ Console.WriteLine(recordSet.Record); recordCount++; } } finally { recordSet.Close(); } Console.WriteLine(String.Format("Found {0} users with work email address", recordCount)); /* * Query for users with email address equal to "*****@*****.**". */ stmt.SetBinNames("user", "email"); stmt.SetFilters(Filter.Contains("email", IndexCollectionType.MAPVALUES, "*****@*****.**")); recordSet = client.Query(null, stmt); recordCount = 0; try { while(recordSet.Next()){ Console.WriteLine(recordSet.Record); recordCount++; } } finally { recordSet.Close(); } Console.WriteLine(String.Format("Found {0} users with email address of [email protected]", recordCount)); }
private void RunQuery(AerospikeClient client, Arguments args, string indexName, string binName) { StringBuilder rgnsb = new StringBuilder(); rgnsb.Append("{ "); rgnsb.Append(" \"type\": \"Polygon\", "); rgnsb.Append(" \"coordinates\": [ "); rgnsb.Append(" [[-122.500000, 37.000000],[-121.000000, 37.000000], "); rgnsb.Append(" [-121.000000, 38.080000],[-122.500000, 38.080000], "); rgnsb.Append(" [-122.500000, 37.000000]] "); rgnsb.Append(" ] "); rgnsb.Append(" } "); console.Info("QueryRegion: " + rgnsb); Statement stmt = new Statement(); stmt.SetNamespace(args.ns); stmt.SetSetName(args.set); stmt.SetBinNames(binName); stmt.SetFilters(Filter.GeoWithinRegion(binName, rgnsb.ToString())); RecordSet rs = client.Query(null, stmt); try { int count = 0; while (rs.Next()) { Key key = rs.Key; Record record = rs.Record; string result = record.GetGeoJSON(binName); console.Info("Record found: " + result); count++; } if (count != 6) { console.Error("Query count mismatch. Expected 6. Received " + count); } } finally { rs.Close(); } }
private void RunRadiusQuery(AerospikeClient client, Arguments args, string indexName, string binName) { double lon = -122.0; double lat = 37.5; double radius = 50000.0; console.Info("QueryRadius long=" + lon + " lat= " + lat + " radius=" + radius); Statement stmt = new Statement(); stmt.SetNamespace(args.ns); stmt.SetSetName(args.set); stmt.SetBinNames(binName); stmt.SetFilters(Filter.GeoWithinRadius(binName, lon, lat, radius)); RecordSet rs = client.Query(null, stmt); try { int count = 0; while (rs.Next()) { Key key = rs.Key; Record record = rs.Record; string result = record.GetGeoJSON(binName); console.Info("Record found: " + result); count++; } if (count != 4) { console.Error("Query count mismatch. Expected 4. Received " + count); } } finally { rs.Close(); } }