Download the javascript SDK and include it like any other javascript library by adding the following line in the appropriate HTML file:
<script src="path/to/asterix-sdk-stable.js"></script>
There are two interactive demos that are available for download. Both of the demos illustrate how the javascript API would be used in an application:
In this section, we explore how to form AQL queries using the javascript SDK. The queries from AsterixDB 101: An ADM and AQL Primer are used as examples here. For each AQL statement, the equivalent javascript expression is shown below it, followed by the results of executing the query.
use dataverse TinySocial; for $user in dataset FacebookUsers where $user.id >= 2 and $user.id <= 4 return $user;
var expression0b = new FLWOGRExpression() .ForClause("$user", new AExpression("dataset FacebookUsers")) .WhereClause().and(new AExpression("$user.id >= 2"), new AExpression("$user.id <= 4")) .ReturnClause("$user");
{ "id": { int32: 2 } , "alias": "Isbel", "name": "IsbelDull", "user-since": { datetime: 1295691000000}, "friend-ids": { unorderedlist: [{ int32: 1 } , { int32: 4 } ]}, "employment": { orderedlist: [{ "organization-name": "Hexviafind", "start-date": { date: 1272326400000}, "end-date": null } ]} } { "id": { int32: 3 } , "alias": "Emory", "name": "EmoryUnk", "user-since": { datetime: 1341915000000}, "friend-ids": { unorderedlist: [{ int32: 1 } , { int32: 5 } , { int32: 8 } , { int32: 9 } ]}, "employment": { orderedlist: [{ "organization-name": "geomedia", "start-date": { date: 1276732800000}, "end-date": { date: 1264464000000} } ]} } { "id": { int32: 4 } , "alias": "Nicholas", "name": "NicholasStroh", "user-since": { datetime: 1293444600000}, "friend-ids": { unorderedlist: [{ int32: 2 } ]}, "employment": { orderedlist: [{ "organization-name": "Zamcorporation", "start-date": { date: 1275955200000}, "end-date": null } ]} }
use dataverse TinySocial; for $user in dataset FacebookUsers where $user.user-since >= datetime('2010-07-22T00:00:00') and $user.user-since <= datetime('2012-07-29T23:59:59') return $user;
var expression1 = new FLWOGRExpression() .ForClause("$user", new AExpression("dataset FacebookUsers")) .WhereClause().and( new AExpression("$user.user-since >= datetime('2010-07-22T00:00:00')"), new AExpression("$user.user-since <= datetime('2012-07-29T23:59:59')") ).ReturnClause("$user");
{ "id": { int32: 2 } , "alias": "Isbel", "name": "IsbelDull", "user-since": { datetime: 1295691000000}, "friend-ids": { unorderedlist: [{ int32: 1 } , { int32: 4 } ]}, "employment": { orderedlist: [{ "organization-name": "Hexviafind", "start-date": { date: 1272326400000}, "end-date": null } ]} } { "id": { int32: 10 } , "alias": "Bram", "name": "BramHatch", "user-since": { datetime: 1287223800000}, "friend-ids": { unorderedlist: [{ int32: 1 } , { int32: 5 } , { int32: 9 } ]}, "employment": { orderedlist: [{ "organization-name": "physcane", "start-date": { date: 1181001600000}, "end-date": { date: 1320451200000} } ]} } { "id": { int32: 3 } , "alias": "Emory", "name": "EmoryUnk", "user-since": { datetime: 1341915000000}, "friend-ids": { unorderedlist: [{ int32: 1 } , { int32: 5 } , { int32: 8 } , { int32: 9 } ]}, "employment": { orderedlist: [{ "organization-name": "geomedia", "start-date": { date: 1276732800000}, "end-date": { date: 1264464000000} } ]} } { "id": { int32: 4 } , "alias": "Nicholas", "name": "NicholasStroh", "user-since": { datetime: 1293444600000}, "friend-ids": { unorderedlist: [{ int32: 2 } ]}, "employment": { orderedlist: [{ "organization-name": "Zamcorporation", "start-date": { date: 1275955200000}, "end-date": null } ]} }
use dataverse TinySocial; for $user in dataset FacebookUsers for $message in dataset FacebookMessages where $message.author-id = $user.id return { "uname": $user.name, "message": $message.message };
var expression2a = new FLWOGRExpression() .ForClause ("$user", new AExpression("dataset FacebookUsers")) .ForClause ("$message", new AExpression("dataset FacebookMessages")) .WhereClause(new AExpression("$message.author-id = $user.id")) .ReturnClause({ "uname" : "$user.name", "message" : "$message.message" });
{ "uname": "MargaritaStoddard", "message": " dislike x-phone its touch-screen is horrible" } { "uname": "MargaritaStoddard", "message": " like ccast the 3G is awesome:)" } { "uname": "MargaritaStoddard", "message": " can't stand product-w the touch-screen is terrible" } { "uname": "MargaritaStoddard", "message": " can't stand acast the network is horrible:(" } { "uname": "MargaritaStoddard", "message": " can't stand acast its plan is terrible" } { "uname": "IsbelDull", "message": " like product-y the plan is amazing" } { "uname": "IsbelDull", "message": " like product-z its platform is mind-blowing" } { "uname": "WoodrowNehling", "message": " love acast its 3G is good:)" } { "uname": "BramHatch", "message": " dislike x-phone the voice-command is bad:(" } { "uname": "BramHatch", "message": " can't stand product-z its voicemail-service is OMG:(" } { "uname": "EmoryUnk", "message": " love product-b its shortcut-menu is awesome:)" } { "uname": "EmoryUnk", "message": " love ccast its wireless is good" } { "uname": "WillisWynne", "message": " love product-b the customization is mind-blowing" } { "uname": "SuzannaTillson", "message": " like x-phone the voicemail-service is awesome" } { "uname": "VonKemble", "message": " dislike product-b the speed is horrible" }
use dataverse TinySocial; for $user in dataset FacebookUsers for $message in dataset FacebookMessages where $message.author-id /*+ indexnl */ = $user.id return { "uname": $user.name, "message": $message.message };
var expression2b = new FLWOGRExpression() .ForClause ("$user", new AExpression("dataset FacebookUsers")) .ForClause ("$message", new AExpression("dataset FacebookMessages")) .WhereClause(new AExpression("$message.author-id /*+ indexnl */ = $user.id")) .ReturnClause({ "uname" : "$user.name", "message" : "$message.message" });
{ "uname": "MargaritaStoddard", "message": " dislike x-phone its touch-screen is horrible" } { "uname": "MargaritaStoddard", "message": " like ccast the 3G is awesome:)" } { "uname": "MargaritaStoddard", "message": " can't stand product-w the touch-screen is terrible" } { "uname": "MargaritaStoddard", "message": " can't stand acast the network is horrible:(" } { "uname": "MargaritaStoddard", "message": " can't stand acast its plan is terrible" } { "uname": "IsbelDull", "message": " like product-y the plan is amazing" } { "uname": "IsbelDull", "message": " like product-z its platform is mind-blowing" } { "uname": "WoodrowNehling", "message": " love acast its 3G is good:)" } { "uname": "BramHatch", "message": " dislike x-phone the voice-command is bad:(" } { "uname": "BramHatch", "message": " can't stand product-z its voicemail-service is OMG:(" } { "uname": "EmoryUnk", "message": " love product-b its shortcut-menu is awesome:)" } { "uname": "EmoryUnk", "message": " love ccast its wireless is good" } { "uname": "WillisWynne", "message": " love product-b the customization is mind-blowing" } { "uname": "SuzannaTillson", "message": " like x-phone the voicemail-service is awesome" } { "uname": "VonKemble", "message": " dislike product-b the speed is horrible" }
use dataverse TinySocial; for $user in dataset FacebookUsers return { "uname": $user.name, "messages": for $message in dataset FacebookMessages where $message.author-id = $user.id return $message.message };
var expression3messages = new FLWOGRExpression() .ForClause("$message", new AExpression("dataset FacebookMessages")) .WhereClause(new AExpression("$message.author-id = $user.id")) .ReturnClause("$message.message"); var expression3 = new FLWOGRExpression() .ForClause ("$user", new AExpression("dataset FacebookUsers")) .ReturnClause({ "uname": "$user.name", "messages" : expression3messages });
{ "uname": "MargaritaStoddard", "messages": { orderedlist: [" dislike x-phone its touch-screen is horrible", " like ccast the 3G is awesome:)", " can't stand product-w the touch-screen is terrible", " can't stand acast the network is horrible:(", " can't stand acast its plan is terrible" ]} } { "uname": "IsbelDull", "messages": { orderedlist: [" like product-y the plan is amazing", " like product-z its platform is mind-blowing" ]} } { "uname": "NilaMilliron", "messages": { orderedlist: [ ]} } { "uname": "WoodrowNehling", "messages": { orderedlist: [" love acast its 3G is good:)" ]} } { "uname": "BramHatch", "messages": { orderedlist: [" dislike x-phone the voice-command is bad:(", " can't stand product-z its voicemail-service is OMG:(" ]} } { "uname": "EmoryUnk", "messages": { orderedlist: [" love product-b its shortcut-menu is awesome:)", " love ccast its wireless is good" ]} } { "uname": "WillisWynne", "messages": { orderedlist: [" love product-b the customization is mind-blowing" ]} } { "uname": "SuzannaTillson", "messages": { orderedlist: [" like x-phone the voicemail-service is awesome" ]} } { "uname": "NicholasStroh", "messages": { orderedlist: [ ]} } { "uname": "VonKemble", "messages": { orderedlist: [" dislike product-b the speed is horrible" ]} }
use dataverse TinySocial; for $t in dataset TweetMessages return { "message": $t.message-text, "nearby-messages": for $t2 in dataset TweetMessages where spatial-distance($t.sender-location, $t2.sender-location) <= 1 return { "msgtxt":$t2.message-text} };
var expression4messages = new FLWOGRExpression() .ForClause( "$t2", new AExpression("dataset TweetMessages")) .WhereClause( new AExpression("spatial-distance($t.sender-location, $t2.sender-location) <= 1")) .ReturnClause({ "msgtxt" : "$t2.message-text" }); var expression4 = new FLWOGRExpression() .ForClause( "$t", new AExpression("dataset TweetMessages")) .ReturnClause({ "message" : "$t.message-text", "nearby-messages" : expression4messages });
{ "message": " hate ccast its voice-clarity is OMG:(", "nearby-messages": { orderedlist: [{ "msgtxt": " hate ccast its voice-clarity is OMG:(" }, { "msgtxt": " like product-w the speed is good:)" } ]} } { "message": " like x-phone the voice-clarity is good:)", "nearby-messages": { orderedlist: [{ "msgtxt": " like x-phone the voice-clarity is good:)" } ]} } { "message": " like product-y the platform is good", "nearby-messages": { orderedlist: [{ "msgtxt": " like product-y the platform is good" } ]} } { "message": " love product-z its customization is good:)", "nearby-messages": { orderedlist: [{ "msgtxt": " love product-z its customization is good:)" } ]} } { "message": " like product-y the voice-command is amazing:)", "nearby-messages": { orderedlist: [{ "msgtxt": " like product-y the voice-command is amazing:)" } ]} } { "message": " like product-w the speed is good:)", "nearby-messages": { orderedlist: [{ "msgtxt": " hate ccast its voice-clarity is OMG:(" }, { "msgtxt": " like product-w the speed is good:)" } ]} } { "message": " love ccast its voicemail-service is awesome", "nearby-messages": { orderedlist: [{ "msgtxt": " love ccast its voicemail-service is awesome" } ]} } { "message": " can't stand product-w its speed is terrible:(", "nearby-messages": { orderedlist: [{ "msgtxt": " can't stand product-w its speed is terrible:(" } ]} } { "message": " like product-z the shortcut-menu is awesome:)", "nearby-messages": { orderedlist: [{ "msgtxt": " like product-z the shortcut-menu is awesome:)" } ]} } { "message": " can't stand x-phone its platform is terrible", "nearby-messages": { orderedlist: [{ "msgtxt": " can't stand x-phone its platform is terrible" } ]} } { "message": " like ccast its shortcut-menu is awesome:)", "nearby-messages": { orderedlist: [{ "msgtxt": " like ccast its shortcut-menu is awesome:)" } ]} } { "message": " like product-b the voice-command is mind-blowing:)", "nearby-messages": { orderedlist: [{ "msgtxt": " like product-b the voice-command is mind-blowing:)" } ]} }
use dataverse TinySocial;
set simfunction "edit-distance"; set simthreshold "3"; for $fbu in dataset FacebookUsers return { "id": $fbu.id, "name": $fbu.name, "similar-users": for $t in dataset TweetMessages let $tu := $t.user where $tu.name ~= $fbu.name return { "twitter-screenname": $tu.screen-name, "twitter-name": $tu.name } };
var similarUsersExpression = new FLWOGRExpression() .ForClause("$t", new AExpression("dataset TweetMessages")) .LetClause ("$tu", new AExpression("$t.user")) .WhereClause(new AExpression("$tu.name ~= $fbu.name")) .ReturnClause({ "twitter-screenname": "$tu.screen-name", "twitter-name": "$tu.name" }); var expression5 = new FLWOGRExpression() .ForClause ("$fbu", new AExpression("dataset FacebookUsers")) .ReturnClause( { "id" : "$fbu.id", "name" : "$fbu.name", "similar-users" : similarUsersExpression } );
{ "id": { int32: 1 } , "name": "MargaritaStoddard", "similar-users": { orderedlist: [ ]} } { "id": { int32: 2 } , "name": "IsbelDull", "similar-users": { orderedlist: [ ]} } { "id": { int32: 8 } , "name": "NilaMilliron", "similar-users": { orderedlist: [{ "twitter-screenname": "NilaMilliron_tw", "twitter-name": "Nila Milliron" } ]} } { "id": { int32: 9 } , "name": "WoodrowNehling", "similar-users": { orderedlist: [ ]} } { "id": { int32: 10 } , "name": "BramHatch", "similar-users": { orderedlist: [ ]} } { "id": { int32: 3 } , "name": "EmoryUnk", "similar-users": { orderedlist: [ ]} } { "id": { int32: 6 } , "name": "WillisWynne", "similar-users": { orderedlist: [ ]} } { "id": { int32: 7 } , "name": "SuzannaTillson", "similar-users": { orderedlist: [ ]} } { "id": { int32: 4 } , "name": "NicholasStroh", "similar-users": { orderedlist: [ ]} } { "id": { int32: 5 } , "name": "VonKemble", "similar-users": { orderedlist: [ ]} }
use dataverse TinySocial; for $fbu in dataset FacebookUsers where (some $e in $fbu.employment satisfies is-null($e.end-date)) return $fbu;
var expression6 = new FLWOGRExpression() .ForClause ("$fbu", new AQLClause().set("dataset FacebookUsers")) .WhereClause( new QuantifiedExpression ( "some" , {"$e" : new AExpression("$fbu.employment") }, new FunctionExpression("is-null", new AExpression("$e.end-date")) ) ) .ReturnClause("$fbu");
{ "id": { int32: 1 } , "alias": "Margarita", "name": "MargaritaStoddard", "user-since": { datetime: 1345457400000}, "friend-ids": { unorderedlist: [{ int32: 2 } , { int32: 3 } , { int32: 6 } , { int32: 10 } ]}, "employment": { orderedlist: [{ "organization-name": "Codetechno", "start-date": { date: 1154822400000}, "end-date": null } ]} } { "id": { int32: 2 } , "alias": "Isbel", "name": "IsbelDull", "user-since": { datetime: 1295691000000}, "friend-ids": { unorderedlist: [{ int32: 1 } , { int32: 4 } ]}, "employment": { orderedlist: [{ "organization-name": "Hexviafind", "start-date": { date: 1272326400000}, "end-date": null } ]} } { "id": { int32: 8 } , "alias": "Nila", "name": "NilaMilliron", "user-since": { datetime: 1199182200000}, "friend-ids": { unorderedlist: [{ int32: 3 } ]}, "employment": { orderedlist: [{ "organization-name": "Plexlane", "start-date": { date: 1267315200000}, "end-date": null } ]} } { "id": { int32: 6 } , "alias": "Willis", "name": "WillisWynne", "user-since": { datetime: 1105956600000}, "friend-ids": { unorderedlist: [{ int32: 1 } , { int32: 3 } , { int32: 7 } ]}, "employment": { orderedlist: [{ "organization-name": "jaydax", "start-date": { date: 1242345600000}, "end-date": null } ]} } { "id": { int32: 7 } , "alias": "Suzanna", "name": "SuzannaTillson", "user-since": { datetime: 1344334200000}, "friend-ids": { unorderedlist: [{ int32: 6 } ]}, "employment": { orderedlist: [{ "organization-name": "Labzatron", "start-date": { date: 1303171200000}, "end-date": null } ]} } { "id": { int32: 4 } , "alias": "Nicholas", "name": "NicholasStroh", "user-since": { datetime: 1293444600000}, "friend-ids": { unorderedlist: [{ int32: 2 } ]}, "employment": { orderedlist: [{ "organization-name": "Zamcorporation", "start-date": { date: 1275955200000}, "end-date": null } ]} } { "id": { int32: 5 } , "alias": "Von", "name": "VonKemble", "user-since": { datetime: 1262686200000}, "friend-ids": { unorderedlist: [{ int32: 3 } , { int32: 6 } , { int32: 10 } ]}, "employment": { orderedlist: [{ "organization-name": "Kongreen", "start-date": { date: 1290816000000}, "end-date": null } ]} }
use dataverse TinySocial; for $fbu in dataset FacebookUsers where (every $e in $fbu.employment satisfies not(is-null($e.end-date))) return $fbu;
var expression7 = new FLWOGRExpression() .ForClause("$fbu", new AExpression("dataset FacebookUsers")) .WhereClause( new QuantifiedExpression ( "every" , {"$e" : new AExpression("$fbu.employment") }, new FunctionExpression("not", new FunctionExpression("is-null", new AExpression("$e.end-date"))) ) ) .ReturnClause("$fbu");
{ "id": { int32: 9 } , "alias": "Woodrow", "name": "WoodrowNehling", "user-since": { datetime: 1127211000000}, "friend-ids": { unorderedlist: [{ int32: 3 } , { int32: 10 } ]}, "employment": { orderedlist: [{ "organization-name": "Zuncan", "start-date": { date: 1050969600000}, "end-date": { date: 1260662400000} } ]} } { "id": { int32: 10 } , "alias": "Bram", "name": "BramHatch", "user-since": { datetime: 1287223800000}, "friend-ids": { unorderedlist: [{ int32: 1 } , { int32: 5 } , { int32: 9 } ]}, "employment": { orderedlist: [{ "organization-name": "physcane", "start-date": { date: 1181001600000}, "end-date": { date: 1320451200000} } ]} } { "id": { int32: 3 } , "alias": "Emory", "name": "EmoryUnk", "user-since": { datetime: 1341915000000}, "friend-ids": { unorderedlist: [{ int32: 1 } , { int32: 5 } , { int32: 8 } , { int32: 9 } ]}, "employment": { orderedlist: [{ "organization-name": "geomedia", "start-date": { date: 1276732800000}, "end-date": { date: 1264464000000} } ]} }
use dataverse TinySocial; for $t in dataset TweetMessages group by $uid := $t.user.screen-name with $t return { "user": $uid, "count": count($t) };
use dataverse TinySocial; for $t in dataset TweetMessages /*+ hash*/ group by $uid := $t.user.screen-name with $t return { "user": $uid, "count": count($t) };
var expression9b = new FLWOGRExpression() .ForClause("$t", new AExpression("dataset TweetMessages")) .AQLClause("/*+ hash*/") .GroupClause("$uid", new AExpression("$t.user.screen-name"), "with", "$t") .ReturnClause( { "user" : "$uid", "count" : new FunctionExpression("count", new AExpression("$t")) } );
use dataverse TinySocial; for $t in dataset TweetMessages group by $uid := $t.user.screen-name with $t let $c := count($t) order by $c desc limit 3 return { "user": $uid, "count": $c };
var expression10 = new FLWOGRExpression() .ForClause("$t", new AExpression("dataset TweetMessages")) .GroupClause("$uid", new AExpression("$t.user.screen-name"), "with", "$t") .LetClause("$c", new FunctionExpression("count", new AExpression("$t"))) .OrderbyClause( new AExpression("$c"), "desc" ) .LimitClause(new AExpression("3")) .ReturnClause( { "user" : "$uid", "count" : "$c" } );
use dataverse TinySocial; set simfunction "jaccard"; set simthreshold "0.3"; for $t in dataset TweetMessages return { "tweet": $t, "similar-tweets": for $t2 in dataset TweetMessages where $t2.referred-topics ~= $t.referred-topics and $t2.tweetid != $t.tweetid return $t2.referred-topics };
var expression11 = new FLWOGRExpression() .ForClause( "$t", new AExpression("dataset TweetMessages")) .ReturnClause({ "tweet" : new AExpression("$t"), "similar-tweets": new FLWOGRExpression() .ForClause( "$t2", new AExpression("dataset TweetMessages")) .WhereClause().and( new AExpression("$t2.referred-topics ~= $t.referred-topics"), new AExpression("$t2.tweetid != $t.tweetid") ) .ReturnClause("$t2.referred-topics") });
{ "tweet": { "tweetid": "10", "user": { "screen-name": "ColineGeyer@63", "lang": "en", "friends_count": { int32: 121 } , "statuses_count": { int32: 362 } , "name": "Coline Geyer", "followers_count": { int32: 17159 } }, "sender-location": { point: [29.15, 76.53]}, "send-time": { datetime: 1201342200000}, "referred-topics": { unorderedlist: ["ccast", "voice-clarity" ]}, "message-text": " hate ccast its voice-clarity is OMG:(" }, "similar-tweets": { orderedlist: [{ unorderedlist: ["x-phone", "voice-clarity" ]}, { unorderedlist: ["ccast", "shortcut-menu" ]}, { unorderedlist: ["ccast", "voicemail-service" ]} ]} } { "tweet": { "tweetid": "6", "user": { "screen-name": "ColineGeyer@63", "lang": "en", "friends_count": { int32: 121 } , "statuses_count": { int32: 362 } , "name": "Coline Geyer", "followers_count": { int32: 17159 } }, "sender-location": { point: [47.51, 83.99]}, "send-time": { datetime: 1273227000000}, "referred-topics": { unorderedlist: ["x-phone", "voice-clarity" ]}, "message-text": " like x-phone the voice-clarity is good:)" }, "similar-tweets": { orderedlist: [{ unorderedlist: ["ccast", "voice-clarity" ]}, { unorderedlist: ["x-phone", "platform" ]} ]} } { "tweet": { "tweetid": "7", "user": { "screen-name": "ChangEwing_573", "lang": "en", "friends_count": { int32: 182 } , "statuses_count": { int32: 394 } , "name": "Chang Ewing", "followers_count": { int32: 32136 } }, "sender-location": { point: [36.21, 72.6]}, "send-time": { datetime: 1314267000000}, "referred-topics": { unorderedlist: ["product-y", "platform" ]}, "message-text": " like product-y the platform is good" }, "similar-tweets": { orderedlist: [{ unorderedlist: ["x-phone", "platform" ]}, { unorderedlist: ["product-y", "voice-command" ]} ]} } { "tweet": { "tweetid": "1", "user": { "screen-name": "NathanGiesen@211", "lang": "en", "friends_count": { int32: 39339 } , "statuses_count": { int32: 473 } , "name": "Nathan Giesen", "followers_count": { int32: 49416 } }, "sender-location": { point: [47.44, 80.65]}, "send-time": { datetime: 1209204600000}, "referred-topics": { unorderedlist: ["product-z", "customization" ]}, "message-text": " love product-z its customization is good:)" }, "similar-tweets": { orderedlist: [{ unorderedlist: ["product-z", "shortcut-menu" ]} ]} } { "tweet": { "tweetid": "12", "user": { "screen-name": "OliJackson_512", "lang": "en", "friends_count": { int32: 445 } , "statuses_count": { int32: 164 } , "name": "Oli Jackson", "followers_count": { int32: 22649 } }, "sender-location": { point: [24.82, 94.63]}, "send-time": { datetime: 1266055800000}, "referred-topics": { unorderedlist: ["product-y", "voice-command" ]}, "message-text": " like product-y the voice-command is amazing:)" }, "similar-tweets": { orderedlist: [{ unorderedlist: ["product-y", "platform" ]}, { unorderedlist: ["product-b", "voice-command" ]} ]} } { "tweet": { "tweetid": "3", "user": { "screen-name": "NathanGiesen@211", "lang": "en", "friends_count": { int32: 39339 } , "statuses_count": { int32: 473 } , "name": "Nathan Giesen", "followers_count": { int32: 49416 } }, "sender-location": { point: [29.72, 75.8]}, "send-time": { datetime: 1162635000000}, "referred-topics": { unorderedlist: ["product-w", "speed" ]}, "message-text": " like product-w the speed is good:)" }, "similar-tweets": { orderedlist: [{ unorderedlist: ["product-w", "speed" ]} ]} } { "tweet": { "tweetid": "9", "user": { "screen-name": "NathanGiesen@211", "lang": "en", "friends_count": { int32: 39339 } , "statuses_count": { int32: 473 } , "name": "Nathan Giesen", "followers_count": { int32: 49416 } }, "sender-location": { point: [36.86, 74.62]}, "send-time": { datetime: 1342865400000}, "referred-topics": { unorderedlist: ["ccast", "voicemail-service" ]}, "message-text": " love ccast its voicemail-service is awesome" }, "similar-tweets": { orderedlist: [{ unorderedlist: ["ccast", "voice-clarity" ]}, { unorderedlist: ["ccast", "shortcut-menu" ]} ]} } { "tweet": { "tweetid": "5", "user": { "screen-name": "NathanGiesen@211", "lang": "en", "friends_count": { int32: 39339 } , "statuses_count": { int32: 473 } , "name": "Nathan Giesen", "followers_count": { int32: 49416 } }, "sender-location": { point: [40.09, 92.69]}, "send-time": { datetime: 1154686200000}, "referred-topics": { unorderedlist: ["product-w", "speed" ]}, "message-text": " can't stand product-w its speed is terrible:(" }, "similar-tweets": { orderedlist: [{ unorderedlist: ["product-w", "speed" ]} ]} } { "tweet": { "tweetid": "8", "user": { "screen-name": "NathanGiesen@211", "lang": "en", "friends_count": { int32: 39339 } , "statuses_count": { int32: 473 } , "name": "Nathan Giesen", "followers_count": { int32: 49416 } }, "sender-location": { point: [46.05, 93.34]}, "send-time": { datetime: 1129284600000}, "referred-topics": { unorderedlist: ["product-z", "shortcut-menu" ]}, "message-text": " like product-z the shortcut-menu is awesome:)" }, "similar-tweets": { orderedlist: [{ unorderedlist: ["ccast", "shortcut-menu" ]}, { unorderedlist: ["product-z", "customization" ]} ]} } { "tweet": { "tweetid": "11", "user": { "screen-name": "NilaMilliron_tw", "lang": "en", "friends_count": { int32: 445 } , "statuses_count": { int32: 164 } , "name": "Nila Milliron", "followers_count": { int32: 22649 } }, "sender-location": { point: [37.59, 68.42]}, "send-time": { datetime: 1205057400000}, "referred-topics": { unorderedlist: ["x-phone", "platform" ]}, "message-text": " can't stand x-phone its platform is terrible" }, "similar-tweets": { orderedlist: [{ unorderedlist: ["x-phone", "voice-clarity" ]}, { unorderedlist: ["product-y", "platform" ]} ]} } { "tweet": { "tweetid": "2", "user": { "screen-name": "ColineGeyer@63", "lang": "en", "friends_count": { int32: 121 } , "statuses_count": { int32: 362 } , "name": "Coline Geyer", "followers_count": { int32: 17159 } }, "sender-location": { point: [32.84, 67.14]}, "send-time": { datetime: 1273745400000}, "referred-topics": { unorderedlist: ["ccast", "shortcut-menu" ]}, "message-text": " like ccast its shortcut-menu is awesome:)" }, "similar-tweets": { orderedlist: [{ unorderedlist: ["product-z", "shortcut-menu" ]}, { unorderedlist: ["ccast", "voice-clarity" ]}, { unorderedlist: ["ccast", "voicemail-service" ]} ]} } { "tweet": { "tweetid": "4", "user": { "screen-name": "NathanGiesen@211", "lang": "en", "friends_count": { int32: 39339 } , "statuses_count": { int32: 473 } , "name": "Nathan Giesen", "followers_count": { int32: 49416 } }, "sender-location": { point: [39.28, 70.48]}, "send-time": { datetime: 1324894200000}, "referred-topics": { unorderedlist: ["product-b", "voice-command" ]}, "message-text": " like product-b the voice-command is mind-blowing:)" }, "similar-tweets": { orderedlist: [{ unorderedlist: ["product-y", "voice-command" ]} ]} }