You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@asterixdb.apache.org by "Ali Alsuliman (Code Review)" <do...@asterixdb.incubator.apache.org> on 2019/03/01 00:12:42 UTC

Change in asterixdb[master]: [ASTERIXDB-2516][RT] array deep comparison (ordering)

Ali Alsuliman has submitted this change and it was merged.

Change subject: [ASTERIXDB-2516][RT] array deep comparison (ordering)
......................................................................


[ASTERIXDB-2516][RT] array deep comparison (ordering)

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
Add support for physical array deep comparison.
- Refactored and renamed AObjectAscBinaryComparatorFactory/AObjectDescBinaryComparatorFactory
- Refactored AGenericDescBinaryComparator and AGenericAscBinaryComparator
- Added test cases

Change-Id: Ib369a4dd22f32bfca4bd2c0cbf987529c0bafa6d
Reviewed-on: https://asterix-gerrit.ics.uci.edu/3233
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Till Westmann <ti...@apache.org>
---
A asterixdb/asterix-app/data/complex/arrays1.adm
A asterixdb/asterix-app/data/complex/arrays2.adm
M asterixdb/asterix-app/src/main/java/org/apache/asterix/app/io/PersistedResourceRegistry.java
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.1.ddl.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.2.update.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.3.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.4.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.5.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.6.query.sqlpp
A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.7.ddl.sqlpp
M asterixdb/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/basic-1_2_1/basic-1_2_1.6.adm
M asterixdb/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/basic-1_2_2/basic-1_2_2.6.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/sorting/arrays/arrays.3.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/sorting/arrays/arrays.4.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/sorting/arrays/arrays.5.adm
A asterixdb/asterix-app/src/test/resources/runtimets/results/sorting/arrays/arrays.6.adm
M asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
M asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AGenericAscBinaryComparator.java
C asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AGenericAscBinaryComparatorFactory.java
M asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AGenericDescBinaryComparator.java
R asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AGenericDescBinaryComparatorFactory.java
A asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AbstractAGenericBinaryComparator.java
R asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AbstractAGenericBinaryComparatorFactory.java
M asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/BinaryComparatorFactoryProvider.java
24 files changed, 902 insertions(+), 518 deletions(-)

Approvals:
  Anon. E. Moose #1000171: 
  Till Westmann: Looks good to me, approved
  Jenkins: Verified; ; Verified

Objections:
  Jenkins: Violations found



diff --git a/asterixdb/asterix-app/data/complex/arrays1.adm b/asterixdb/asterix-app/data/complex/arrays1.adm
new file mode 100644
index 0000000..fb74f83
--- /dev/null
+++ b/asterixdb/asterix-app/data/complex/arrays1.adm
@@ -0,0 +1,21 @@
+{"id":1, "name":"Margarita", "dept_ids": [3, 2, 8]}
+{"id":2, "name":"Isac", "dept_ids": [99, 12, 14, 15, 77]}
+{"id":3, "name":"Emory", "dept_ids": [33, 11, 3, 16]}
+{"id":4, "name":"Nicholas", "dept_ids": []}
+{"id":5, "name":"Von", "dept_ids": [4]}
+{"id":6, "name":"Willis", "dept_ids": [1, 5, 6]}
+{"id":7, "name":"Suzanna", "dept_ids": [9, 5, 2]}
+{"id":8, "name":"Nicole", "dept_ids": [33, 11, 3, 16]}
+{"id":9, "name":"Woodrow", "dept_ids": [3, 2, 8]}
+{"id":10, "name":"Bram", "dept_ids": []}
+{"id":11, "name":"Nicholas", "dept_ids": null}
+{"id":12, "name":"John", "dept_ids": [2]}
+{"id":13, "name":"Steve", "dept_ids": [8, 2]}
+{"id":14, "name":"Jay", "dept_ids": [4]}
+{"id":15, "name":"Jim", "dept_ids": null}
+{"id":16, "name":"Wail", "dept_ids": [9, 5, 2]}
+{"id":17, "name":"Jim"}
+{"id":18, "name":"Kayle", "dept_ids": [8, 2, 1, 7, 9]}
+{"id":19, "name":"Mart"}
+{"id":20, "name":"Mai", "dept_ids": [1, 5, 9]}
+{"id":21, "name":"Ken", "dept_ids": [3, 5, 8]}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/data/complex/arrays2.adm b/asterixdb/asterix-app/data/complex/arrays2.adm
new file mode 100644
index 0000000..fe56a69
--- /dev/null
+++ b/asterixdb/asterix-app/data/complex/arrays2.adm
@@ -0,0 +1,21 @@
+{"id":1, "name":"Margarita", "dept_ids": [4]}
+{"id":2, "name":"Isac", "dept_ids": [99, 12, 14, 15]}
+{"id":3, "name":"Emory", "dept_ids": [33, 3, 16]}
+{"id":4, "name":"Nicholas", "dept_ids": [1, 5, 6]}
+{"id":5, "name":"Von", "dept_ids": [3, 2, 8]}
+{"id":6, "name":"Willis", "dept_ids": []}
+{"id":7, "name":"Suzanna", "dept_ids": [4]}
+{"id":8, "name":"Nicole", "dept_ids": [33, 11, 3, 16]}
+{"id":9, "name":"Woodrow", "dept_ids": null}
+{"id":10, "name":"Bram", "dept_ids": []}
+{"id":11, "name":"Nicholas", "dept_ids":[3, 2, 8] }
+{"id":12, "name":"John", "dept_ids": [9, 5, 2]}
+{"id":13, "name":"Steve"}
+{"id":14, "name":"Jay", "dept_ids": [9, 5, 2]}
+{"id":15, "name":"Jim", "dept_ids": null}
+{"id":16, "name":"Wail", "dept_ids": [2]}
+{"id":17, "name":"Jim", "dept_ids": [8, 2]}
+{"id":18, "name":"Kayle"}
+{"id":19, "name":"Mart", "dept_ids": [8, 2, 1, 7, 9]}
+{"id":20, "name":"Mai", "dept_ids": [1, 5, 9]}
+{"id":21, "name":"Ken", "dept_ids": [3, 5, 8]}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/io/PersistedResourceRegistry.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/io/PersistedResourceRegistry.java
index 11d1b26..7bd5620 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/io/PersistedResourceRegistry.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/io/PersistedResourceRegistry.java
@@ -40,8 +40,8 @@
 import org.apache.asterix.dataflow.data.nontagged.comparators.AIntervalAscPartialBinaryComparatorFactory;
 import org.apache.asterix.dataflow.data.nontagged.comparators.AIntervalDescPartialBinaryComparatorFactory;
 import org.apache.asterix.dataflow.data.nontagged.comparators.ALinePartialBinaryComparatorFactory;
-import org.apache.asterix.dataflow.data.nontagged.comparators.AObjectAscBinaryComparatorFactory;
-import org.apache.asterix.dataflow.data.nontagged.comparators.AObjectDescBinaryComparatorFactory;
+import org.apache.asterix.dataflow.data.nontagged.comparators.AGenericAscBinaryComparatorFactory;
+import org.apache.asterix.dataflow.data.nontagged.comparators.AGenericDescBinaryComparatorFactory;
 import org.apache.asterix.dataflow.data.nontagged.comparators.APoint3DPartialBinaryComparatorFactory;
 import org.apache.asterix.dataflow.data.nontagged.comparators.APointPartialBinaryComparatorFactory;
 import org.apache.asterix.dataflow.data.nontagged.comparators.APolygonPartialBinaryComparatorFactory;
@@ -189,8 +189,8 @@
         REGISTERED_CLASSES.put("AIntervalDescPartialBinaryComparatorFactory",
                 AIntervalDescPartialBinaryComparatorFactory.class);
         REGISTERED_CLASSES.put("ALinePartialBinaryComparatorFactory", ALinePartialBinaryComparatorFactory.class);
-        REGISTERED_CLASSES.put("AObjectAscBinaryComparatorFactory", AObjectAscBinaryComparatorFactory.class);
-        REGISTERED_CLASSES.put("AObjectDescBinaryComparatorFactory", AObjectDescBinaryComparatorFactory.class);
+        REGISTERED_CLASSES.put("AObjectAscBinaryComparatorFactory", AGenericAscBinaryComparatorFactory.class);
+        REGISTERED_CLASSES.put("AObjectDescBinaryComparatorFactory", AGenericDescBinaryComparatorFactory.class);
         REGISTERED_CLASSES.put("APoint3DPartialBinaryComparatorFactory", APoint3DPartialBinaryComparatorFactory.class);
         REGISTERED_CLASSES.put("APointPartialBinaryComparatorFactory", APointPartialBinaryComparatorFactory.class);
         REGISTERED_CLASSES.put("APolygonPartialBinaryComparatorFactory", APolygonPartialBinaryComparatorFactory.class);
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.1.ddl.sqlpp
new file mode 100644
index 0000000..7842019
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.1.ddl.sqlpp
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+drop  dataverse test if exists;
+create  dataverse test;
+use test;
+
+create type closedType as closed {
+id:int,
+name:string,
+dept_ids:[int]?
+};
+
+create type openType as {
+id:int,
+name:string
+};
+
+create dataset closedDs(closedType) primary key id;
+create dataset openDs(openType) primary key id;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.2.update.sqlpp
new file mode 100644
index 0000000..98b5875
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.2.update.sqlpp
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+use test;
+
+load dataset closedDs using localfs (("path"="asterix_nc1://data/complex/arrays1.adm"),("format"="adm"));
+load dataset openDs using localfs (("path"="asterix_nc1://data/complex/arrays1.adm"),("format"="adm"));
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.3.query.sqlpp
new file mode 100644
index 0000000..8ed8d27
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.3.query.sqlpp
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+use test;
+
+select value v from openDs v order by v.dept_ids, v.id;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.4.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.4.query.sqlpp
new file mode 100644
index 0000000..2376bcb
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.4.query.sqlpp
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+use test;
+
+select value v from closedDs v order by v.dept_ids, v.id;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.5.query.sqlpp
new file mode 100644
index 0000000..a9a00d7
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.5.query.sqlpp
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+use test;
+
+select value v from openDs v order by v.dept_ids desc, v.id;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.6.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.6.query.sqlpp
new file mode 100644
index 0000000..6af915c
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.6.query.sqlpp
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+use test;
+
+select value v from closedDs v order by v.dept_ids desc, v.id;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.7.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.7.ddl.sqlpp
new file mode 100755
index 0000000..269f673
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/sorting/arrays/arrays.7.ddl.sqlpp
@@ -0,0 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+drop  dataverse test;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/basic-1_2_1/basic-1_2_1.6.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/basic-1_2_1/basic-1_2_1.6.adm
index a2efb10..8a5eceb 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/basic-1_2_1/basic-1_2_1.6.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/basic-1_2_1/basic-1_2_1.6.adm
@@ -2,68 +2,68 @@
 { "authors": "Ajith Abraham Swagatam Das Amit Konar", "tokens": [ "ajith", "abraham", "swagatam", "das", "amit", "konar" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [  ] ] }
 { "authors": "Alessandro Moschitti Fabio Massimo Zanzotto", "tokens": [ "alessandro", "moschitti", "fabio", "massimo", "zanzotto" ], "ranked": [ [  ], [  ], [  ], [ 171 ], [ 631 ] ] }
 { "authors": "Alexander Schrijver", "tokens": [ "alexander", "schrijver" ], "ranked": [ [  ], [ 777 ] ] }
-{ "authors": "Alexei Pozdnoukhov Samy Bengio", "tokens": [ "alexei", "pozdnoukhov", "samy", "bengio" ], "ranked": [ [ 13 ], [ 431 ], [ 712 ], [ 637 ] ] }
+{ "authors": "Alexei Pozdnoukhov Samy Bengio", "tokens": [ "alexei", "pozdnoukhov", "samy", "bengio" ], "ranked": [ [ 13 ], [ 431 ], [ 637 ], [ 712 ] ] }
 { "authors": "Alexei Vinokourov Andrei N. Soklakov Craig Saunders", "tokens": [ "alexei", "vinokourov", "andrei", "n", "soklakov", "craig", "saunders" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [ 13 ], [ 807 ] ] }
 { "authors": "Andrea C. Arpaci-Dusseau Remzi H. Arpaci-Dusseau Nathan C. Burnett Timothy E. Denehy Thomas J. Engle Haryadi S. Gunawi James A. Nugent Florentina I. Popovici", "tokens": [ "andrea", "c", "arpaci", "dusseau", "remzi", "h", "arpaci", "dusseau", "nathan", "c", "burnett", "timothy", "e", "denehy", "thomas", "j", "engle", "haryadi", "s", "gunawi", "james", "a", "nugent", "florentina", "i", "popovici" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [ 22 ], [ 659 ], [ 725 ], [ 781 ], [ 800 ], [ 805 ], [ 816 ], [ 817 ], [ 817 ], [ 819 ], [ 822 ] ] }
-{ "authors": "Andreas Argyriou Raphael Hauser Charles A. Micchelli Massimiliano Pontil", "tokens": [ "andreas", "argyriou", "raphael", "hauser", "charles", "a", "micchelli", "massimiliano", "pontil" ], "ranked": [ [ 216 ], [ 30 ], [ 430 ], [ 448 ], [ 366 ], [ 375 ], [ 738 ], [ 740 ], [ 816 ] ] }
+{ "authors": "Andreas Argyriou Raphael Hauser Charles A. Micchelli Massimiliano Pontil", "tokens": [ "andreas", "argyriou", "raphael", "hauser", "charles", "a", "micchelli", "massimiliano", "pontil" ], "ranked": [ [ 30 ], [ 216 ], [ 366 ], [ 375 ], [ 430 ], [ 448 ], [ 738 ], [ 740 ], [ 816 ] ] }
 { "authors": "Andrew Whitaker Marianne Shaw Steven D. Gribble", "tokens": [ "andrew", "whitaker", "marianne", "shaw", "steven", "d", "gribble" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [ 519 ], [ 813 ] ] }
 { "authors": "Annegret Weng", "tokens": [ "annegret", "weng" ], "ranked": [ [ 25 ], [ 597 ] ] }
-{ "authors": "Antti Airola Sampo Pyysalo Jari Björne Tapio Pahikkala Filip Ginter Tapio Salakoski", "tokens": [ "antti", "airola", "sampo", "pyysalo", "jari", "björne", "tapio", "pahikkala", "filip", "ginter", "tapio", "salakoski" ], "ranked": [ [ 175 ], [ 202 ], [ 8 ], [ 28 ], [ 63 ], [ 410 ], [ 434 ], [ 466 ], [ 467 ], [ 263 ], [ 724 ], [ 724 ] ] }
-{ "authors": "Arvind Seshadri Mark Luk Ning Qu Adrian Perrig", "tokens": [ "arvind", "seshadri", "mark", "luk", "ning", "qu", "adrian", "perrig" ], "ranked": [ [ 7 ], [ 36 ], [ 398 ], [ 416 ], [ 438 ], [ 487 ], [ 344 ], [ 784 ] ] }
+{ "authors": "Antti Airola Sampo Pyysalo Jari Björne Tapio Pahikkala Filip Ginter Tapio Salakoski", "tokens": [ "antti", "airola", "sampo", "pyysalo", "jari", "björne", "tapio", "pahikkala", "filip", "ginter", "tapio", "salakoski" ], "ranked": [ [ 8 ], [ 28 ], [ 63 ], [ 175 ], [ 202 ], [ 263 ], [ 410 ], [ 434 ], [ 466 ], [ 467 ], [ 724 ], [ 724 ] ] }
+{ "authors": "Arvind Seshadri Mark Luk Ning Qu Adrian Perrig", "tokens": [ "arvind", "seshadri", "mark", "luk", "ning", "qu", "adrian", "perrig" ], "ranked": [ [ 7 ], [ 36 ], [ 344 ], [ 398 ], [ 416 ], [ 438 ], [ 487 ], [ 784 ] ] }
 { "authors": "Aurélie Bugeau Patrick Pérez", "tokens": [ "aurélie", "bugeau", "patrick", "pérez" ], "ranked": [ [  ], [  ], [ 435 ], [ 787 ] ] }
-{ "authors": "Bastian Blankenburg Rajdeep K. Dash Sarvapali D. Ramchurn Matthias Klusch Nicholas R. Jennings", "tokens": [ "bastian", "blankenburg", "rajdeep", "k", "dash", "sarvapali", "d", "ramchurn", "matthias", "klusch", "nicholas", "r", "jennings" ], "ranked": [ [ 133 ], [ 443 ], [ 446 ], [ 473 ], [ 266 ], [ 641 ], [ 693 ], [ 704 ], [ 763 ], [ 636 ], [ 812 ], [ 813 ], [ 818 ] ] }
-{ "authors": "Benjamin Schrauwen Jan Van Campenhout", "tokens": [ "benjamin", "schrauwen", "jan", "van", "campenhout" ], "ranked": [ [ 645 ], [ 713 ], [ 638 ], [ 801 ], [ 814 ] ] }
+{ "authors": "Bastian Blankenburg Rajdeep K. Dash Sarvapali D. Ramchurn Matthias Klusch Nicholas R. Jennings", "tokens": [ "bastian", "blankenburg", "rajdeep", "k", "dash", "sarvapali", "d", "ramchurn", "matthias", "klusch", "nicholas", "r", "jennings" ], "ranked": [ [ 133 ], [ 266 ], [ 443 ], [ 446 ], [ 473 ], [ 636 ], [ 641 ], [ 693 ], [ 704 ], [ 763 ], [ 812 ], [ 813 ], [ 818 ] ] }
+{ "authors": "Benjamin Schrauwen Jan Van Campenhout", "tokens": [ "benjamin", "schrauwen", "jan", "van", "campenhout" ], "ranked": [ [ 638 ], [ 645 ], [ 713 ], [ 801 ], [ 814 ] ] }
 { "authors": "Bernard Haasdonk Hans Burkhardt", "tokens": [ "bernard", "haasdonk", "hans", "burkhardt" ], "ranked": [ [  ], [  ], [  ], [ 670 ] ] }
-{ "authors": "Brett Fleisch Mark Allan A. Co", "tokens": [ "brett", "fleisch", "mark", "allan", "a", "co" ], "ranked": [ [ 177 ], [ 15 ], [ 76 ], [ 113 ], [ 784 ], [ 816 ] ] }
+{ "authors": "Brett Fleisch Mark Allan A. Co", "tokens": [ "brett", "fleisch", "mark", "allan", "a", "co" ], "ranked": [ [ 15 ], [ 76 ], [ 113 ], [ 177 ], [ 784 ], [ 816 ] ] }
 { "authors": "Brian Kulis Mátyás A. Sustik Inderjit S. Dhillon", "tokens": [ "brian", "kulis", "mátyás", "a", "sustik", "inderjit", "s", "dhillon" ], "ranked": [ [  ], [  ], [ 655 ], [ 676 ], [ 695 ], [ 798 ], [ 816 ], [ 819 ] ] }
 { "authors": "Brian Kulis Mátyás Sustik Inderjit Dhillon", "tokens": [ "brian", "kulis", "mátyás", "sustik", "inderjit", "dhillon" ], "ranked": [ [  ], [  ], [ 655 ], [ 676 ], [ 695 ], [ 798 ] ] }
-{ "authors": "Brian Kulis Sugato Basu Inderjit Dhillon Raymond Mooney", "tokens": [ "brian", "kulis", "sugato", "basu", "inderjit", "dhillon", "raymond", "mooney" ], "ranked": [ [ 49 ], [ 450 ], [ 381 ], [ 655 ], [ 676 ], [ 695 ], [ 525 ], [ 798 ] ] }
+{ "authors": "Brian Kulis Sugato Basu Inderjit Dhillon Raymond Mooney", "tokens": [ "brian", "kulis", "sugato", "basu", "inderjit", "dhillon", "raymond", "mooney" ], "ranked": [ [ 49 ], [ 381 ], [ 450 ], [ 525 ], [ 655 ], [ 676 ], [ 695 ], [ 798 ] ] }
 { "authors": "Brian N. Bershad", "tokens": [ "brian", "n", "bershad" ], "ranked": [ [ 56 ], [ 798 ], [ 807 ] ] }
 { "authors": "Brian N. Bershad Craig Chambers Susan Eggers Chris Maeda Dylan McNamee Przemyslaw Pardyak Stefan Savage Emin Gün Sirer Emin Gun Sirer", "tokens": [ "brian", "n", "bershad", "craig", "chambers", "susan", "eggers", "chris", "maeda", "dylan", "mcnamee", "przemyslaw", "pardyak", "stefan", "savage", "emin", "gün", "sirer", "emin", "gun", "sirer" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [ 56 ], [ 108 ], [ 350 ], [ 531 ], [ 790 ], [ 798 ], [ 807 ] ] }
-{ "authors": "Bruno De Bus Dominique Chanet Ludo Van Put Bjorn De Sutter Koen De Bosschere", "tokens": [ "bruno", "de", "bus", "dominique", "chanet", "ludo", "van", "put", "bjorn", "de", "sutter", "koen", "de", "bosschere" ], "ranked": [ [ 147 ], [ 62 ], [ 68 ], [ 82 ], [ 96 ], [ 433 ], [ 307 ], [ 343 ], [ 643 ], [ 533 ], [ 799 ], [ 799 ], [ 799 ], [ 814 ] ] }
-{ "authors": "Bryan Ford Mike Hibler Jay Lepreau Patrick Tullmann Godmar Back Stephen Clawson", "tokens": [ "bryan", "ford", "mike", "hibler", "jay", "lepreau", "patrick", "tullmann", "godmar", "back", "stephen", "clawson" ], "ranked": [ [ 181 ], [ 205 ], [ 231 ], [ 42 ], [ 78 ], [ 112 ], [ 264 ], [ 332 ], [ 378 ], [ 562 ], [ 787 ], [ 791 ] ] }
+{ "authors": "Bruno De Bus Dominique Chanet Ludo Van Put Bjorn De Sutter Koen De Bosschere", "tokens": [ "bruno", "de", "bus", "dominique", "chanet", "ludo", "van", "put", "bjorn", "de", "sutter", "koen", "de", "bosschere" ], "ranked": [ [ 62 ], [ 68 ], [ 82 ], [ 96 ], [ 147 ], [ 307 ], [ 343 ], [ 433 ], [ 533 ], [ 643 ], [ 799 ], [ 799 ], [ 799 ], [ 814 ] ] }
+{ "authors": "Bryan Ford Mike Hibler Jay Lepreau Patrick Tullmann Godmar Back Stephen Clawson", "tokens": [ "bryan", "ford", "mike", "hibler", "jay", "lepreau", "patrick", "tullmann", "godmar", "back", "stephen", "clawson" ], "ranked": [ [ 42 ], [ 78 ], [ 112 ], [ 181 ], [ 205 ], [ 231 ], [ 264 ], [ 332 ], [ 378 ], [ 562 ], [ 787 ], [ 791 ] ] }
 { "authors": "Carl G. Looney", "tokens": [ "carl", "g", "looney" ], "ranked": [ [ 89 ], [ 341 ], [ 811 ] ] }
 { "authors": "Carlo Drioli Davide Rocchesso", "tokens": [ "carlo", "drioli", "davide", "rocchesso" ], "ranked": [ [  ], [  ], [  ], [  ] ] }
-{ "authors": "Carsten Ditze", "tokens": [ "carsten", "ditze" ], "ranked": [ [ 146 ], [ 91 ] ] }
+{ "authors": "Carsten Ditze", "tokens": [ "carsten", "ditze" ], "ranked": [ [ 91 ], [ 146 ] ] }
 { "authors": "Chang Wang Stephen D. Scott", "tokens": [ "chang", "wang", "stephen", "d", "scott" ], "ranked": [ [ 480 ], [ 647 ], [ 791 ], [ 808 ], [ 813 ] ] }
-{ "authors": "Charles A. Micchelli Massimiliano Pontil", "tokens": [ "charles", "a", "micchelli", "massimiliano", "pontil" ], "ranked": [ [ 430 ], [ 366 ], [ 375 ], [ 740 ], [ 816 ] ] }
+{ "authors": "Charles A. Micchelli Massimiliano Pontil", "tokens": [ "charles", "a", "micchelli", "massimiliano", "pontil" ], "ranked": [ [ 366 ], [ 375 ], [ 430 ], [ 740 ], [ 816 ] ] }
 { "authors": "Charles Crowley", "tokens": [ "charles", "crowley" ], "ranked": [ [ 122 ], [ 740 ] ] }
 { "authors": "Charles Pecheur", "tokens": [ "charles", "pecheur" ], "ranked": [ [  ], [ 740 ] ] }
-{ "authors": "Cheng Soon Ong Alexander J. Smola Robert C. Williamson", "tokens": [ "cheng", "soon", "ong", "alexander", "j", "smola", "robert", "c", "williamson" ], "ranked": [ [ 741 ], [ 601 ], [ 770 ], [ 772 ], [ 777 ], [ 785 ], [ 803 ], [ 817 ], [ 822 ] ] }
-{ "authors": "Cheng Soon Ong Er J. Smola Robert C. Williamson", "tokens": [ "cheng", "soon", "ong", "er", "j", "smola", "robert", "c", "williamson" ], "ranked": [ [  ], [ 741 ], [ 601 ], [ 770 ], [ 772 ], [ 785 ], [ 803 ], [ 817 ], [ 822 ] ] }
-{ "authors": "Cheng Soon Ong Stéphane Canu Alexander J. Smola", "tokens": [ "cheng", "soon", "ong", "stéphane", "canu", "alexander", "j", "smola" ], "ranked": [ [ 87 ], [ 741 ], [ 522 ], [ 770 ], [ 772 ], [ 777 ], [ 785 ], [ 822 ] ] }
+{ "authors": "Cheng Soon Ong Alexander J. Smola Robert C. Williamson", "tokens": [ "cheng", "soon", "ong", "alexander", "j", "smola", "robert", "c", "williamson" ], "ranked": [ [ 601 ], [ 741 ], [ 770 ], [ 772 ], [ 777 ], [ 785 ], [ 803 ], [ 817 ], [ 822 ] ] }
+{ "authors": "Cheng Soon Ong Er J. Smola Robert C. Williamson", "tokens": [ "cheng", "soon", "ong", "er", "j", "smola", "robert", "c", "williamson" ], "ranked": [ [  ], [ 601 ], [ 741 ], [ 770 ], [ 772 ], [ 785 ], [ 803 ], [ 817 ], [ 822 ] ] }
+{ "authors": "Cheng Soon Ong Stéphane Canu Alexander J. Smola", "tokens": [ "cheng", "soon", "ong", "stéphane", "canu", "alexander", "j", "smola" ], "ranked": [ [ 87 ], [ 522 ], [ 741 ], [ 770 ], [ 772 ], [ 777 ], [ 785 ], [ 822 ] ] }
 { "authors": "Chia-hui Chang Yu-chieh Wu", "tokens": [ "chia", "hui", "chang", "yu", "chieh", "wu" ], "ranked": [ [ 100 ], [ 647 ], [ 649 ], [ 674 ], [ 728 ], [ 776 ] ] }
-{ "authors": "Christian Poellabauer Karsten Schwan Richard West", "tokens": [ "christian", "poellabauer", "karsten", "schwan", "richard", "west" ], "ranked": [ [ 109 ], [ 429 ], [ 452 ], [ 714 ], [ 598 ], [ 782 ] ] }
-{ "authors": "Christina S. Leslie Eleazar Eskin Adiel Cohen Jason Weston William Stafford Noble", "tokens": [ "christina", "s", "leslie", "eleazar", "eskin", "adiel", "cohen", "jason", "weston", "william", "stafford", "noble" ], "ranked": [ [ 156 ], [ 167 ], [ 6 ], [ 115 ], [ 650 ], [ 696 ], [ 751 ], [ 765 ], [ 773 ], [ 774 ], [ 795 ], [ 819 ] ] }
-{ "authors": "Christoph Heinz Bernhard Seeger", "tokens": [ "christoph", "heinz", "bernhard", "seeger" ], "ranked": [ [ 220 ], [ 110 ], [ 483 ], [ 640 ] ] }
+{ "authors": "Christian Poellabauer Karsten Schwan Richard West", "tokens": [ "christian", "poellabauer", "karsten", "schwan", "richard", "west" ], "ranked": [ [ 109 ], [ 429 ], [ 452 ], [ 598 ], [ 714 ], [ 782 ] ] }
+{ "authors": "Christina S. Leslie Eleazar Eskin Adiel Cohen Jason Weston William Stafford Noble", "tokens": [ "christina", "s", "leslie", "eleazar", "eskin", "adiel", "cohen", "jason", "weston", "william", "stafford", "noble" ], "ranked": [ [ 6 ], [ 115 ], [ 156 ], [ 167 ], [ 650 ], [ 696 ], [ 751 ], [ 765 ], [ 773 ], [ 774 ], [ 795 ], [ 819 ] ] }
+{ "authors": "Christoph Heinz Bernhard Seeger", "tokens": [ "christoph", "heinz", "bernhard", "seeger" ], "ranked": [ [ 110 ], [ 220 ], [ 483 ], [ 640 ] ] }
 { "authors": "Christoph M. Kirsch Marco A. A. Sanvido Thomas A. Henzinger Wolfgang Pree", "tokens": [ "christoph", "m", "kirsch", "marco", "a", "a", "sanvido", "thomas", "a", "henzinger", "wolfgang", "pree" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [  ], [ 110 ], [ 725 ], [ 816 ], [ 816 ], [ 816 ], [ 820 ] ] }
-{ "authors": "Chunhua Shen Anton Van Den Hengel Anthony Dick Michael J. Brooks", "tokens": [ "chunhua", "shen", "anton", "van", "den", "hengel", "anthony", "dick", "michael", "j", "brooks" ], "ranked": [ [  ], [  ], [ 227 ], [ 26 ], [ 77 ], [ 111 ], [ 654 ], [ 717 ], [ 814 ], [ 821 ], [ 822 ] ] }
-{ "authors": "Chunhua Shen Michael J. Brooks Anton Van Den Hengel", "tokens": [ "chunhua", "shen", "michael", "j", "brooks", "anton", "van", "den", "hengel" ], "ranked": [ [ 227 ], [ 26 ], [ 77 ], [ 111 ], [ 654 ], [ 717 ], [ 814 ], [ 821 ], [ 822 ] ] }
-{ "authors": "Cyril Allauzen Mehryar Mohri Ameet Talwalkar", "tokens": [ "cyril", "allauzen", "mehryar", "mohri", "ameet", "talwalkar" ], "ranked": [ [ 16 ], [ 18 ], [ 124 ], [ 698 ], [ 701 ], [ 536 ] ] }
-{ "authors": "Dan Tsafrir Yoav Etsion Dror G. Feitelson Scott Kirkpatrick", "tokens": [ "dan", "tsafrir", "yoav", "etsion", "dror", "g", "feitelson", "scott", "kirkpatrick" ], "ranked": [ [ 152 ], [ 168 ], [ 174 ], [ 126 ], [ 480 ], [ 304 ], [ 559 ], [ 614 ], [ 811 ] ] }
+{ "authors": "Chunhua Shen Anton Van Den Hengel Anthony Dick Michael J. Brooks", "tokens": [ "chunhua", "shen", "anton", "van", "den", "hengel", "anthony", "dick", "michael", "j", "brooks" ], "ranked": [ [  ], [  ], [ 26 ], [ 77 ], [ 111 ], [ 227 ], [ 654 ], [ 717 ], [ 814 ], [ 821 ], [ 822 ] ] }
+{ "authors": "Chunhua Shen Michael J. Brooks Anton Van Den Hengel", "tokens": [ "chunhua", "shen", "michael", "j", "brooks", "anton", "van", "den", "hengel" ], "ranked": [ [ 26 ], [ 77 ], [ 111 ], [ 227 ], [ 654 ], [ 717 ], [ 814 ], [ 821 ], [ 822 ] ] }
+{ "authors": "Cyril Allauzen Mehryar Mohri Ameet Talwalkar", "tokens": [ "cyril", "allauzen", "mehryar", "mohri", "ameet", "talwalkar" ], "ranked": [ [ 16 ], [ 18 ], [ 124 ], [ 536 ], [ 698 ], [ 701 ] ] }
+{ "authors": "Dan Tsafrir Yoav Etsion Dror G. Feitelson Scott Kirkpatrick", "tokens": [ "dan", "tsafrir", "yoav", "etsion", "dror", "g", "feitelson", "scott", "kirkpatrick" ], "ranked": [ [ 126 ], [ 152 ], [ 168 ], [ 174 ], [ 304 ], [ 480 ], [ 559 ], [ 614 ], [ 811 ] ] }
 { "authors": "Daniel Cremers Timo Kohlberger Christoph Schnörr", "tokens": [ "daniel", "cremers", "timo", "kohlberger", "christoph", "schnörr" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [ 110 ] ] }
 { "authors": "Daniel Lohmann Fabian Scheler Reinhard Tartler Olaf Spinczyk Wolfgang Schröder-preikschat", "tokens": [ "daniel", "lohmann", "fabian", "scheler", "reinhard", "tartler", "olaf", "spinczyk", "wolfgang", "schröder", "preikschat" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ] ] }
 { "authors": "Daniel Lohmann Fabian Scheler Wolfgang Schröder-preikschat Olaf Spinczyk", "tokens": [ "daniel", "lohmann", "fabian", "scheler", "wolfgang", "schröder", "preikschat", "olaf", "spinczyk" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ] ] }
-{ "authors": "Dao-qiang Zhang Song-can Chen", "tokens": [ "dao", "qiang", "zhang", "song", "can", "chen" ], "ranked": [ [ 129 ], [ 86 ], [ 510 ], [ 767 ], [ 810 ], [ 815 ] ] }
+{ "authors": "Dao-qiang Zhang Song-can Chen", "tokens": [ "dao", "qiang", "zhang", "song", "can", "chen" ], "ranked": [ [ 86 ], [ 129 ], [ 510 ], [ 767 ], [ 810 ], [ 815 ] ] }
 { "authors": "Daoqiang Zhang Songcan Chen Zhi-hua Zhou", "tokens": [ "daoqiang", "zhang", "songcan", "chen", "zhi", "hua", "zhou" ], "ranked": [ [  ], [ 130 ], [ 673 ], [ 736 ], [ 771 ], [ 810 ], [ 815 ] ] }
 { "authors": "Daoqiang Zhang Zhi-hua Zhou Songcan Chen", "tokens": [ "daoqiang", "zhang", "zhi", "hua", "zhou", "songcan", "chen" ], "ranked": [ [  ], [ 130 ], [ 673 ], [ 736 ], [ 771 ], [ 810 ], [ 815 ] ] }
 { "authors": "Darrin P. Lewis Tony Jebara William Stafford Noble", "tokens": [ "darrin", "p", "lewis", "tony", "jebara", "william", "stafford", "noble" ], "ranked": [ [ 132 ], [ 335 ], [ 680 ], [ 765 ], [ 773 ], [ 786 ], [ 794 ], [ 795 ] ] }
 { "authors": "David J. Crisp Christopher J. C. Burges", "tokens": [ "david", "j", "crisp", "christopher", "j", "c", "burges" ], "ranked": [ [ 80 ], [ 121 ], [ 652 ], [ 742 ], [ 817 ], [ 822 ], [ 822 ] ] }
 { "authors": "Dawei Liu Xihong Lin Debashis Ghosh", "tokens": [ "dawei", "liu", "xihong", "lin", "debashis", "ghosh" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [ 339 ] ] }
 { "authors": "Dawson Engler M. Frans Kaashoek James O'toole", "tokens": [ "dawson", "engler", "m", "frans", "kaashoek", "james", "o", "toole" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [ 401 ], [ 781 ], [ 820 ] ] }
-{ "authors": "Dawson R. Engler M. Frans Kaashoek James O'toole Jr.", "tokens": [ "dawson", "r", "engler", "m", "frans", "kaashoek", "james", "o", "toole", "jr" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [ 401 ], [ 284 ], [ 781 ], [ 818 ], [ 820 ] ] }
-{ "authors": "Dawson R. Engler M. Frans Kaashoek James O’Toole Jr.", "tokens": [ "dawson", "r", "engler", "m", "frans", "kaashoek", "james", "o", "toole", "jr" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [ 401 ], [ 284 ], [ 781 ], [ 818 ], [ 820 ] ] }
+{ "authors": "Dawson R. Engler M. Frans Kaashoek James O'toole Jr.", "tokens": [ "dawson", "r", "engler", "m", "frans", "kaashoek", "james", "o", "toole", "jr" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [ 284 ], [ 401 ], [ 781 ], [ 818 ], [ 820 ] ] }
+{ "authors": "Dawson R. Engler M. Frans Kaashoek James O’Toole Jr.", "tokens": [ "dawson", "r", "engler", "m", "frans", "kaashoek", "james", "o", "toole", "jr" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [ 284 ], [ 401 ], [ 781 ], [ 818 ], [ 820 ] ] }
 { "authors": "Dawson R. Engler M. Frans Kaashoek James O’toole", "tokens": [ "dawson", "r", "engler", "m", "frans", "kaashoek", "james", "o", "toole" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [ 401 ], [ 781 ], [ 818 ], [ 820 ] ] }
-{ "authors": "Ding-xuan Zhou", "tokens": [ "ding", "xuan", "zhou" ], "ranked": [ [ 656 ], [ 736 ], [ 609 ] ] }
-{ "authors": "En Bedrijfskunde Gent Tony Van Gestel Bart Baesens Johan A. K. Suykens Dirk Van Den Poel Dirk-emma Baestaens Marleen Willekens", "tokens": [ "en", "bedrijfskunde", "gent", "tony", "van", "gestel", "bart", "baesens", "johan", "a", "k", "suykens", "dirk", "van", "den", "poel", "dirk", "emma", "baestaens", "marleen", "willekens" ], "ranked": [ [  ], [  ], [  ], [ 161 ], [ 43 ], [ 428 ], [ 362 ], [ 654 ], [ 657 ], [ 657 ], [ 665 ], [ 721 ], [ 739 ], [ 754 ], [ 599 ], [ 635 ], [ 794 ], [ 812 ], [ 814 ], [ 814 ], [ 816 ] ] }
+{ "authors": "Ding-xuan Zhou", "tokens": [ "ding", "xuan", "zhou" ], "ranked": [ [ 609 ], [ 656 ], [ 736 ] ] }
+{ "authors": "En Bedrijfskunde Gent Tony Van Gestel Bart Baesens Johan A. K. Suykens Dirk Van Den Poel Dirk-emma Baestaens Marleen Willekens", "tokens": [ "en", "bedrijfskunde", "gent", "tony", "van", "gestel", "bart", "baesens", "johan", "a", "k", "suykens", "dirk", "van", "den", "poel", "dirk", "emma", "baestaens", "marleen", "willekens" ], "ranked": [ [  ], [  ], [  ], [ 43 ], [ 161 ], [ 362 ], [ 428 ], [ 599 ], [ 635 ], [ 654 ], [ 657 ], [ 657 ], [ 665 ], [ 721 ], [ 739 ], [ 754 ], [ 794 ], [ 812 ], [ 814 ], [ 814 ], [ 816 ] ] }
 { "authors": "Endre Boros Vladimir Gurvich", "tokens": [ "endre", "boros", "vladimir", "gurvich" ], "ranked": [ [  ], [  ], [  ], [ 580 ] ] }
-{ "authors": "Erik H. W. Meijering Karel J. Zuiderveld Max A. Viergever", "tokens": [ "erik", "h", "w", "meijering", "karel", "j", "zuiderveld", "max", "a", "viergever" ], "ranked": [ [ 288 ], [ 367 ], [ 373 ], [ 746 ], [ 575 ], [ 629 ], [ 800 ], [ 809 ], [ 816 ], [ 822 ] ] }
-{ "authors": "Ernest Artiaga Albert Serra Marisa Gil", "tokens": [ "ernest", "artiaga", "albert", "serra", "marisa", "gil" ], "ranked": [ [ 166 ], [ 200 ], [ 11 ], [ 35 ], [ 486 ], [ 360 ] ] }
-{ "authors": "Experimental Design Xuanlong Nguyen Martin J. Wainwright Michael I. Jordan", "tokens": [ "experimental", "design", "xuanlong", "nguyen", "martin", "j", "wainwright", "michael", "i", "jordan" ], "ranked": [ [  ], [  ], [ 703 ], [ 732 ], [ 761 ], [ 586 ], [ 802 ], [ 805 ], [ 821 ], [ 822 ] ] }
-{ "authors": "Faisal N. Abu-khzam Michael A. Langston W. Henry Suters", "tokens": [ "faisal", "n", "abu", "khzam", "michael", "a", "langston", "w", "henry", "suters" ], "ranked": [ [ 172 ], [ 228 ], [ 4 ], [ 303 ], [ 324 ], [ 532 ], [ 807 ], [ 809 ], [ 816 ], [ 821 ] ] }
+{ "authors": "Erik H. W. Meijering Karel J. Zuiderveld Max A. Viergever", "tokens": [ "erik", "h", "w", "meijering", "karel", "j", "zuiderveld", "max", "a", "viergever" ], "ranked": [ [ 288 ], [ 367 ], [ 373 ], [ 575 ], [ 629 ], [ 746 ], [ 800 ], [ 809 ], [ 816 ], [ 822 ] ] }
+{ "authors": "Ernest Artiaga Albert Serra Marisa Gil", "tokens": [ "ernest", "artiaga", "albert", "serra", "marisa", "gil" ], "ranked": [ [ 11 ], [ 35 ], [ 166 ], [ 200 ], [ 360 ], [ 486 ] ] }
+{ "authors": "Experimental Design Xuanlong Nguyen Martin J. Wainwright Michael I. Jordan", "tokens": [ "experimental", "design", "xuanlong", "nguyen", "martin", "j", "wainwright", "michael", "i", "jordan" ], "ranked": [ [  ], [  ], [ 586 ], [ 703 ], [ 732 ], [ 761 ], [ 802 ], [ 805 ], [ 821 ], [ 822 ] ] }
+{ "authors": "Faisal N. Abu-khzam Michael A. Langston W. Henry Suters", "tokens": [ "faisal", "n", "abu", "khzam", "michael", "a", "langston", "w", "henry", "suters" ], "ranked": [ [ 4 ], [ 172 ], [ 228 ], [ 303 ], [ 324 ], [ 532 ], [ 807 ], [ 809 ], [ 816 ], [ 821 ] ] }
 { "authors": "Fan Zhang Edwin R. Hancock", "tokens": [ "fan", "zhang", "edwin", "r", "hancock" ], "ranked": [ [  ], [  ], [  ], [ 815 ], [ 818 ] ] }
-{ "authors": "Florent Lafarge Xavier Descombes Josiane Zerubia", "tokens": [ "florent", "lafarge", "xavier", "descombes", "josiane", "zerubia" ], "ranked": [ [ 141 ], [ 178 ], [ 283 ], [ 321 ], [ 729 ], [ 623 ] ] }
-{ "authors": "Francesca Odone Annalisa Barla Alessandro Verri", "tokens": [ "francesca", "odone", "annalisa", "barla", "alessandro", "verri" ], "ranked": [ [ 185 ], [ 24 ], [ 47 ], [ 402 ], [ 572 ], [ 631 ] ] }
+{ "authors": "Florent Lafarge Xavier Descombes Josiane Zerubia", "tokens": [ "florent", "lafarge", "xavier", "descombes", "josiane", "zerubia" ], "ranked": [ [ 141 ], [ 178 ], [ 283 ], [ 321 ], [ 623 ], [ 729 ] ] }
+{ "authors": "Francesca Odone Annalisa Barla Alessandro Verri", "tokens": [ "francesca", "odone", "annalisa", "barla", "alessandro", "verri" ], "ranked": [ [ 24 ], [ 47 ], [ 185 ], [ 402 ], [ 572 ], [ 631 ] ] }
 { "authors": "Francis Bach Michael I. Jordan", "tokens": [ "francis", "bach", "michael", "i", "jordan" ], "ranked": [ [ 778 ], [ 779 ], [ 802 ], [ 805 ], [ 821 ] ] }
 { "authors": "Francis R. Bach", "tokens": [ "francis", "r", "bach" ], "ranked": [ [ 778 ], [ 779 ], [ 818 ] ] }
 { "authors": "Francis R. Bach Gert R. G. Lanckriet Michael I. Jordan", "tokens": [ "francis", "r", "bach", "gert", "r", "g", "lanckriet", "michael", "i", "jordan" ], "ranked": [ [ 197 ], [ 322 ], [ 778 ], [ 779 ], [ 802 ], [ 805 ], [ 811 ], [ 818 ], [ 818 ], [ 821 ] ] }
@@ -81,14 +81,14 @@
 { "authors": "Hae Jong Seo Peyman Milanfar", "tokens": [ "hae", "jong", "seo", "peyman", "milanfar" ], "ranked": [ [  ], [  ], [  ], [  ], [  ] ] }
 { "authors": "Hideyuki Tokuda Tatsuo Nakajima", "tokens": [ "hideyuki", "tokuda", "tatsuo", "nakajima" ], "ranked": [ [ 233 ], [ 392 ], [ 539 ], [ 555 ] ] }
 { "authors": "Hiren D. Patel Sandeep K. Shukla", "tokens": [ "hiren", "d", "patel", "sandeep", "k", "shukla" ], "ranked": [ [ 234 ], [ 413 ], [ 469 ], [ 720 ], [ 812 ], [ 813 ] ] }
-{ "authors": "Holger Fröhlich Jörg K. Wegner Florian Sieker Andreas Zell", "tokens": [ "holger", "fröhlich", "jörg", "k", "wegner", "florian", "sieker", "andreas", "zell" ], "ranked": [ [ 179 ], [ 190 ], [ 241 ], [ 502 ], [ 687 ], [ 734 ], [ 738 ], [ 589 ], [ 812 ] ] }
+{ "authors": "Holger Fröhlich Jörg K. Wegner Florian Sieker Andreas Zell", "tokens": [ "holger", "fröhlich", "jörg", "k", "wegner", "florian", "sieker", "andreas", "zell" ], "ranked": [ [ 179 ], [ 190 ], [ 241 ], [ 502 ], [ 589 ], [ 687 ], [ 734 ], [ 738 ], [ 812 ] ] }
 { "authors": "Hujun Yin", "tokens": [ "hujun", "yin" ], "ranked": [ [ 249 ], [ 613 ] ] }
-{ "authors": "Huzefa Rangwala George Karypis", "tokens": [ "huzefa", "rangwala", "george", "karypis" ], "ranked": [ [ 194 ], [ 252 ], [ 447 ], [ 290 ] ] }
+{ "authors": "Huzefa Rangwala George Karypis", "tokens": [ "huzefa", "rangwala", "george", "karypis" ], "ranked": [ [ 194 ], [ 252 ], [ 290 ], [ 447 ] ] }
 { "authors": "Ihor Kuz Yan Liu Ian Gorton Gernot Heiser", "tokens": [ "ihor", "kuz", "yan", "liu", "ian", "gorton", "gernot", "heiser" ], "ranked": [ [  ], [  ], [ 196 ], [ 221 ], [ 254 ], [ 257 ], [ 317 ], [ 796 ] ] }
 { "authors": "Ingo Mierswa", "tokens": [ "ingo", "mierswa" ], "ranked": [ [ 376 ], [ 677 ] ] }
-{ "authors": "Ingo Mierswa Katharina Morik", "tokens": [ "ingo", "mierswa", "katharina", "morik" ], "ranked": [ [ 384 ], [ 291 ], [ 376 ], [ 677 ] ] }
-{ "authors": "Ingo Steinwart", "tokens": [ "ingo", "steinwart" ], "ranked": [ [ 677 ], [ 517 ] ] }
-{ "authors": "Italo J. Dejter Abel A. Delgado", "tokens": [ "italo", "j", "dejter", "abel", "a", "delgado" ], "ranked": [ [ 137 ], [ 3 ], [ 258 ], [ 653 ], [ 816 ], [ 822 ] ] }
+{ "authors": "Ingo Mierswa Katharina Morik", "tokens": [ "ingo", "mierswa", "katharina", "morik" ], "ranked": [ [ 291 ], [ 376 ], [ 384 ], [ 677 ] ] }
+{ "authors": "Ingo Steinwart", "tokens": [ "ingo", "steinwart" ], "ranked": [ [ 517 ], [ 677 ] ] }
+{ "authors": "Italo J. Dejter Abel A. Delgado", "tokens": [ "italo", "j", "dejter", "abel", "a", "delgado" ], "ranked": [ [ 3 ], [ 137 ], [ 258 ], [ 653 ], [ 816 ], [ 822 ] ] }
 { "authors": "Jason Weston Christina Leslie Eugene Ie Dengyong Zhou Andre Elisseeff William Stafford Noble", "tokens": [ "jason", "weston", "christina", "leslie", "eugene", "ie", "dengyong", "zhou", "andre", "elisseeff", "william", "stafford", "noble" ], "ranked": [ [  ], [ 139 ], [ 169 ], [ 256 ], [ 650 ], [ 660 ], [ 696 ], [ 736 ], [ 751 ], [ 765 ], [ 773 ], [ 774 ], [ 795 ] ] }
 { "authors": "Jean-charles Fabre", "tokens": [ "jean", "charles", "fabre" ], "ranked": [ [  ], [ 679 ], [ 740 ] ] }
 { "authors": "Jezekiel Ben-Arie Zhiqian Wang", "tokens": [ "jezekiel", "ben", "arie", "zhiqian", "wang" ], "ranked": [ [ 32 ], [ 52 ], [ 270 ], [ 628 ], [ 808 ] ] }
@@ -97,15 +97,15 @@
 { "authors": "Jieping Ye Jianhui Chen Shuiwang Ji", "tokens": [ "jieping", "ye", "jianhui", "chen", "shuiwang", "ji" ], "ranked": [ [ 681 ], [ 682 ], [ 683 ], [ 719 ], [ 733 ], [ 810 ] ] }
 { "authors": "Jinbo Bi Glenn Fung Murat Dundar Bharat Rao", "tokens": [ "jinbo", "bi", "glenn", "fung", "murat", "dundar", "bharat", "rao" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ] ] }
 { "authors": "Johannes Aßfalg Karsten M. Borgwardt Hans-peter Kriegel", "tokens": [ "johannes", "aßfalg", "karsten", "m", "borgwardt", "hans", "peter", "kriegel" ], "ranked": [ [ 40 ], [ 279 ], [ 642 ], [ 670 ], [ 694 ], [ 782 ], [ 788 ], [ 820 ] ] }
-{ "authors": "John Penix Willem Visser Eric Engstrom Aaron Larson Nicholas Weininger", "tokens": [ "john", "penix", "willem", "visser", "eric", "engstrom", "aaron", "larson", "nicholas", "weininger" ], "ranked": [ [ 164 ], [ 165 ], [ 1 ], [ 415 ], [ 326 ], [ 704 ], [ 755 ], [ 579 ], [ 593 ], [ 600 ] ] }
-{ "authors": "John Penix Willem Visser Seungjoon Park Eric Engstrom Aaron Larson Nicholas Weininger", "tokens": [ "john", "penix", "willem", "visser", "seungjoon", "park", "eric", "engstrom", "aaron", "larson", "nicholas", "weininger" ], "ranked": [ [  ], [ 164 ], [ 165 ], [ 1 ], [ 415 ], [ 326 ], [ 704 ], [ 709 ], [ 755 ], [ 579 ], [ 593 ], [ 600 ] ] }
+{ "authors": "John Penix Willem Visser Eric Engstrom Aaron Larson Nicholas Weininger", "tokens": [ "john", "penix", "willem", "visser", "eric", "engstrom", "aaron", "larson", "nicholas", "weininger" ], "ranked": [ [ 1 ], [ 164 ], [ 165 ], [ 326 ], [ 415 ], [ 579 ], [ 593 ], [ 600 ], [ 704 ], [ 755 ] ] }
+{ "authors": "John Penix Willem Visser Seungjoon Park Eric Engstrom Aaron Larson Nicholas Weininger", "tokens": [ "john", "penix", "willem", "visser", "seungjoon", "park", "eric", "engstrom", "aaron", "larson", "nicholas", "weininger" ], "ranked": [ [  ], [ 1 ], [ 164 ], [ 165 ], [ 326 ], [ 415 ], [ 579 ], [ 593 ], [ 600 ], [ 704 ], [ 709 ], [ 755 ] ] }
 { "authors": "John Shawe-taylor Christopher K. I. Williams Nello Cristianini Jaz Kandola", "tokens": [ "john", "shawe", "taylor", "christopher", "k", "i", "williams", "nello", "cristianini", "jaz", "kandola" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [  ], [  ], [ 742 ], [ 755 ], [ 805 ], [ 812 ] ] }
 { "authors": "Jooseuk Kim Clayton D. Scott", "tokens": [ "jooseuk", "kim", "clayton", "d", "scott" ], "ranked": [ [  ], [  ], [ 480 ], [ 692 ], [ 813 ] ] }
-{ "authors": "Joseph Reisinger Peter Stone Risto Miikkulainen", "tokens": [ "joseph", "reisinger", "peter", "stone", "risto", "miikkulainen" ], "ranked": [ [ 451 ], [ 453 ], [ 377 ], [ 685 ], [ 521 ], [ 788 ] ] }
+{ "authors": "Joseph Reisinger Peter Stone Risto Miikkulainen", "tokens": [ "joseph", "reisinger", "peter", "stone", "risto", "miikkulainen" ], "ranked": [ [ 377 ], [ 451 ], [ 453 ], [ 521 ], [ 685 ], [ 788 ] ] }
 { "authors": "Junbin Gao Daming Shi Xiaomao Liu", "tokens": [ "junbin", "gao", "daming", "shi", "xiaomao", "liu" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [ 192 ] ] }
 { "authors": "Karsten M. Borgwardt Cheng Soon Ong Stefan Schönauer S. V. N. Vishwanathan Alex J. Smola Hans-peter Kriegel", "tokens": [ "karsten", "m", "borgwardt", "cheng", "soon", "ong", "stefan", "schönauer", "s", "v", "n", "vishwanathan", "alex", "j", "smola", "hans", "peter", "kriegel" ], "ranked": [ [  ], [ 479 ], [ 642 ], [ 670 ], [ 694 ], [ 726 ], [ 727 ], [ 741 ], [ 770 ], [ 772 ], [ 782 ], [ 785 ], [ 788 ], [ 790 ], [ 807 ], [ 819 ], [ 820 ], [ 822 ] ] }
-{ "authors": "Keith Sullivan Sean Luke", "tokens": [ "keith", "sullivan", "sean", "luke" ], "ranked": [ [ 481 ], [ 345 ], [ 690 ], [ 527 ] ] }
-{ "authors": "Kenji Hisazumi Teruaki Kitasuka Tsuneo Nakanishi Akira Fukuda", "tokens": [ "kenji", "hisazumi", "teruaki", "kitasuka", "tsuneo", "nakanishi", "akira", "fukuda" ], "ranked": [ [ 191 ], [ 236 ], [ 10 ], [ 393 ], [ 298 ], [ 305 ], [ 545 ], [ 561 ] ] }
+{ "authors": "Keith Sullivan Sean Luke", "tokens": [ "keith", "sullivan", "sean", "luke" ], "ranked": [ [ 345 ], [ 481 ], [ 527 ], [ 690 ] ] }
+{ "authors": "Kenji Hisazumi Teruaki Kitasuka Tsuneo Nakanishi Akira Fukuda", "tokens": [ "kenji", "hisazumi", "teruaki", "kitasuka", "tsuneo", "nakanishi", "akira", "fukuda" ], "ranked": [ [ 10 ], [ 191 ], [ 236 ], [ 298 ], [ 305 ], [ 393 ], [ 545 ], [ 561 ] ] }
 { "authors": "Khawar M. Zuberi Y Padmanabhan Pillai Kang G. Shin", "tokens": [ "khawar", "m", "zuberi", "y", "padmanabhan", "pillai", "kang", "g", "shin" ], "ranked": [ [  ], [ 409 ], [ 424 ], [ 689 ], [ 691 ], [ 718 ], [ 737 ], [ 811 ], [ 820 ] ] }
 { "authors": "Kiran B. Chilakamarri Peter Hamburger", "tokens": [ "kiran", "b", "chilakamarri", "peter", "hamburger" ], "ranked": [ [  ], [  ], [  ], [ 634 ], [ 788 ] ] }
 { "authors": "Koji Tsuda", "tokens": [ "koji", "tsuda" ], "ranked": [ [  ], [  ] ] }
@@ -119,78 +119,78 @@
 { "authors": "M. Frans Kaashoek Dawson R. Engler Gregory R. Ganger Russell Hunt Thomas Pinckney", "tokens": [ "m", "frans", "kaashoek", "dawson", "r", "engler", "gregory", "r", "ganger", "russell", "hunt", "thomas", "pinckney" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [  ], [  ], [ 463 ], [ 725 ], [ 748 ], [ 818 ], [ 818 ], [ 820 ] ] }
 { "authors": "Majid M. Beigi Andreas Zell", "tokens": [ "majid", "m", "beigi", "andreas", "zell" ], "ranked": [ [ 51 ], [ 353 ], [ 734 ], [ 738 ], [ 820 ] ] }
 { "authors": "Manuel Díaz Sergio Romero Bartolomé Rubio Enrique Soler José M. Troya", "tokens": [ "manuel", "díaz", "sergio", "romero", "bartolomé", "rubio", "enrique", "soler", "josé", "m", "troya" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [ 485 ], [ 697 ], [ 820 ] ] }
-{ "authors": "Maria-florina Balcan Avrim Blum Santosh Vempala", "tokens": [ "maria", "florina", "balcan", "avrim", "blum", "santosh", "vempala" ], "ranked": [ [ 180 ], [ 39 ], [ 45 ], [ 65 ], [ 472 ], [ 359 ], [ 570 ] ] }
+{ "authors": "Maria-florina Balcan Avrim Blum Santosh Vempala", "tokens": [ "maria", "florina", "balcan", "avrim", "blum", "santosh", "vempala" ], "ranked": [ [ 39 ], [ 45 ], [ 65 ], [ 180 ], [ 359 ], [ 472 ], [ 570 ] ] }
 { "authors": "Mark Baker Hong Ong", "tokens": [ "mark", "baker", "hong", "ong" ], "ranked": [ [ 44 ], [ 750 ], [ 784 ], [ 785 ] ] }
 { "authors": "Matthew Brand", "tokens": [ "matthew", "brand" ], "ranked": [ [ 72 ], [ 762 ] ] }
 { "authors": "Matthew Burnside Angelos D. Keromytis", "tokens": [ "matthew", "burnside", "angelos", "d", "keromytis" ], "ranked": [ [ 23 ], [ 81 ], [ 299 ], [ 762 ], [ 813 ] ] }
-{ "authors": "Matthias Daum Jan Dörrenbächer Sebastian Bogan", "tokens": [ "matthias", "daum", "jan", "dörrenbächer", "sebastian", "bogan" ], "ranked": [ [ 134 ], [ 154 ], [ 67 ], [ 482 ], [ 763 ], [ 801 ] ] }
+{ "authors": "Matthias Daum Jan Dörrenbächer Sebastian Bogan", "tokens": [ "matthias", "daum", "jan", "dörrenbächer", "sebastian", "bogan" ], "ranked": [ [ 67 ], [ 134 ], [ 154 ], [ 482 ], [ 763 ], [ 801 ] ] }
 { "authors": "Michael Engel Bernd Freisleben", "tokens": [ "michael", "engel", "bernd", "freisleben" ], "ranked": [ [ 163 ], [ 189 ], [ 639 ], [ 821 ] ] }
-{ "authors": "Michael Hohmuth Hendrik Tews Shane G. Stephens", "tokens": [ "michael", "hohmuth", "hendrik", "tews", "shane", "g", "stephens" ], "ranked": [ [ 225 ], [ 239 ], [ 716 ], [ 518 ], [ 546 ], [ 811 ], [ 821 ] ] }
+{ "authors": "Michael Hohmuth Hendrik Tews Shane G. Stephens", "tokens": [ "michael", "hohmuth", "hendrik", "tews", "shane", "g", "stephens" ], "ranked": [ [ 225 ], [ 239 ], [ 518 ], [ 546 ], [ 716 ], [ 811 ], [ 821 ] ] }
 { "authors": "Michel Gien", "tokens": [ "michel", "gien" ], "ranked": [ [ 199 ], [ 700 ] ] }
 { "authors": "Michel Neuhaus Horst Bunke", "tokens": [ "michel", "neuhaus", "horst", "bunke" ], "ranked": [ [ 79 ], [ 394 ], [ 671 ], [ 700 ] ] }
-{ "authors": "Min Xu Ravi Sandhu Xuxian Jiang Xinwen Zhang", "tokens": [ "min", "xu", "ravi", "sandhu", "xuxian", "jiang", "xinwen", "zhang" ], "ranked": [ [ 449 ], [ 470 ], [ 731 ], [ 752 ], [ 764 ], [ 608 ], [ 610 ], [ 815 ] ] }
+{ "authors": "Min Xu Ravi Sandhu Xuxian Jiang Xinwen Zhang", "tokens": [ "min", "xu", "ravi", "sandhu", "xuxian", "jiang", "xinwen", "zhang" ], "ranked": [ [ 449 ], [ 470 ], [ 608 ], [ 610 ], [ 731 ], [ 752 ], [ 764 ], [ 815 ] ] }
 { "authors": "Moonsang Kwon Yookun Cho", "tokens": [ "moonsang", "kwon", "yookun", "cho" ], "ranked": [ [ 104 ], [ 319 ], [ 382 ], [ 617 ] ] }
-{ "authors": "Nail Akar Khosrow Sohraby", "tokens": [ "nail", "akar", "khosrow", "sohraby" ], "ranked": [ [ 9 ], [ 390 ], [ 508 ], [ 302 ] ] }
-{ "authors": "Olivier Chapelle S. Sathiya Keerthi Vikas Sindhwani", "tokens": [ "olivier", "chapelle", "s", "sathiya", "keerthi", "vikas", "sindhwani" ], "ranked": [ [ 97 ], [ 475 ], [ 503 ], [ 295 ], [ 706 ], [ 577 ], [ 819 ] ] }
+{ "authors": "Nail Akar Khosrow Sohraby", "tokens": [ "nail", "akar", "khosrow", "sohraby" ], "ranked": [ [ 9 ], [ 302 ], [ 390 ], [ 508 ] ] }
+{ "authors": "Olivier Chapelle S. Sathiya Keerthi Vikas Sindhwani", "tokens": [ "olivier", "chapelle", "s", "sathiya", "keerthi", "vikas", "sindhwani" ], "ranked": [ [ 97 ], [ 295 ], [ 475 ], [ 503 ], [ 577 ], [ 706 ], [ 819 ] ] }
 { "authors": "Pancham Shukla Pier Luigi Dragotti", "tokens": [ "pancham", "shukla", "pier", "luigi", "dragotti" ], "ranked": [ [  ], [  ], [  ], [  ], [ 720 ] ] }
-{ "authors": "Paul Mckenney Jack Slingwine Phil Krueger", "tokens": [ "paul", "mckenney", "jack", "slingwine", "phil", "krueger" ], "ranked": [ [ 422 ], [ 505 ], [ 260 ], [ 312 ], [ 368 ], [ 766 ] ] }
-{ "authors": "Pavel B. Brazdil Carlos Soares", "tokens": [ "pavel", "b", "brazdil", "carlos", "soares" ], "ranked": [ [ 73 ], [ 90 ], [ 506 ], [ 710 ], [ 634 ] ] }
-{ "authors": "Pavel P. Kuksa Pai-hsi Huang Vladimir Pavlovic", "tokens": [ "pavel", "p", "kuksa", "pai", "hsi", "huang", "vladimir", "pavlovic" ], "ranked": [ [ 245 ], [ 411 ], [ 414 ], [ 314 ], [ 710 ], [ 580 ], [ 780 ], [ 786 ] ] }
+{ "authors": "Paul Mckenney Jack Slingwine Phil Krueger", "tokens": [ "paul", "mckenney", "jack", "slingwine", "phil", "krueger" ], "ranked": [ [ 260 ], [ 312 ], [ 368 ], [ 422 ], [ 505 ], [ 766 ] ] }
+{ "authors": "Pavel B. Brazdil Carlos Soares", "tokens": [ "pavel", "b", "brazdil", "carlos", "soares" ], "ranked": [ [ 73 ], [ 90 ], [ 506 ], [ 634 ], [ 710 ] ] }
+{ "authors": "Pavel P. Kuksa Pai-hsi Huang Vladimir Pavlovic", "tokens": [ "pavel", "p", "kuksa", "pai", "hsi", "huang", "vladimir", "pavlovic" ], "ranked": [ [ 245 ], [ 314 ], [ 411 ], [ 414 ], [ 580 ], [ 710 ], [ 780 ], [ 786 ] ] }
 { "authors": "Peter Druschel", "tokens": [ "peter", "druschel" ], "ranked": [ [ 153 ], [ 788 ] ] }
 { "authors": "Philippe Thévenaz Thierry Blu Michael Unser", "tokens": [ "philippe", "thévenaz", "thierry", "blu", "michael", "unser" ], "ranked": [ [  ], [  ], [  ], [  ], [ 423 ], [ 821 ] ] }
-{ "authors": "Prasanth B. Nair Arindam Choudhury Andy J. Keane", "tokens": [ "prasanth", "b", "nair", "arindam", "choudhury", "andy", "j", "keane" ], "ranked": [ [ 33 ], [ 107 ], [ 391 ], [ 432 ], [ 293 ], [ 633 ], [ 634 ], [ 822 ] ] }
+{ "authors": "Prasanth B. Nair Arindam Choudhury Andy J. Keane", "tokens": [ "prasanth", "b", "nair", "arindam", "choudhury", "andy", "j", "keane" ], "ranked": [ [ 33 ], [ 107 ], [ 293 ], [ 391 ], [ 432 ], [ 633 ], [ 634 ], [ 822 ] ] }
 { "authors": "Qun Dai Songcan Chen", "tokens": [ "qun", "dai", "songcan", "chen" ], "ranked": [ [ 440 ], [ 743 ], [ 771 ], [ 810 ] ] }
 { "authors": "R. Venkatesh Babu Patrick Pérez Patrick Bouthemy", "tokens": [ "r", "venkatesh", "babu", "patrick", "pérez", "patrick", "bouthemy" ], "ranked": [ [ 41 ], [ 70 ], [ 435 ], [ 571 ], [ 787 ], [ 787 ], [ 818 ] ] }
-{ "authors": "Rafael Serrano-gotarredona Teresa Serrano-gotarredona Antonio Acosta-jiménez Bernabé Linares-barranco", "tokens": [ "rafael", "serrano", "gotarredona", "teresa", "serrano", "gotarredona", "antonio", "acosta", "jiménez", "bernabé", "linares", "barranco" ], "ranked": [ [  ], [ 5 ], [ 27 ], [ 48 ], [ 55 ], [ 441 ], [ 340 ], [ 666 ], [ 666 ], [ 715 ], [ 715 ], [ 544 ] ] }
+{ "authors": "Rafael Serrano-gotarredona Teresa Serrano-gotarredona Antonio Acosta-jiménez Bernabé Linares-barranco", "tokens": [ "rafael", "serrano", "gotarredona", "teresa", "serrano", "gotarredona", "antonio", "acosta", "jiménez", "bernabé", "linares", "barranco" ], "ranked": [ [  ], [ 5 ], [ 27 ], [ 48 ], [ 55 ], [ 340 ], [ 441 ], [ 544 ], [ 666 ], [ 666 ], [ 715 ], [ 715 ] ] }
 { "authors": "Rafal Kolanski Gerwin Gerwin Klein", "tokens": [ "rafal", "kolanski", "gerwin", "gerwin", "klein" ], "ranked": [ [  ], [  ], [ 747 ], [ 747 ], [ 757 ] ] }
 { "authors": "Ramani Duraiswami Vikas C. Raykar", "tokens": [ "ramani", "duraiswami", "vikas", "c", "raykar" ], "ranked": [ [  ], [  ], [  ], [ 577 ], [ 817 ] ] }
-{ "authors": "Richard West Karsten Schwan Christian Poellabauer", "tokens": [ "richard", "west", "karsten", "schwan", "christian", "poellabauer" ], "ranked": [ [ 109 ], [ 429 ], [ 452 ], [ 714 ], [ 598 ], [ 782 ] ] }
+{ "authors": "Richard West Karsten Schwan Christian Poellabauer", "tokens": [ "richard", "west", "karsten", "schwan", "christian", "poellabauer" ], "ranked": [ [ 109 ], [ 429 ], [ 452 ], [ 598 ], [ 714 ], [ 782 ] ] }
 { "authors": "Robert Jenssen Torbjørn Eltoft", "tokens": [ "robert", "jenssen", "torbjørn", "eltoft" ], "ranked": [ [ 160 ], [ 268 ], [ 556 ], [ 803 ] ] }
 { "authors": "Roberto Manduchi Pietro Perona", "tokens": [ "roberto", "manduchi", "pietro", "perona" ], "ranked": [ [  ], [  ], [  ], [  ] ] }
 { "authors": "Roger Butenuth", "tokens": [ "roger", "butenuth" ], "ranked": [ [  ], [ 455 ] ] }
 { "authors": "Roland Opfer", "tokens": [ "roland", "opfer" ], "ranked": [ [ 407 ], [ 456 ] ] }
-{ "authors": "Ronald G. Minnich Matthew J. Sottile Sung-eun Choi Erik Hendriks Jim Mckie", "tokens": [ "ronald", "g", "minnich", "matthew", "j", "sottile", "sung", "eun", "choi", "erik", "hendriks", "jim", "mckie" ], "ranked": [ [ 170 ], [ 226 ], [ 105 ], [ 511 ], [ 274 ], [ 369 ], [ 380 ], [ 746 ], [ 762 ], [ 529 ], [ 789 ], [ 811 ], [ 822 ] ] }
+{ "authors": "Ronald G. Minnich Matthew J. Sottile Sung-eun Choi Erik Hendriks Jim Mckie", "tokens": [ "ronald", "g", "minnich", "matthew", "j", "sottile", "sung", "eun", "choi", "erik", "hendriks", "jim", "mckie" ], "ranked": [ [ 105 ], [ 170 ], [ 226 ], [ 274 ], [ 369 ], [ 380 ], [ 511 ], [ 529 ], [ 746 ], [ 762 ], [ 789 ], [ 811 ], [ 822 ] ] }
 { "authors": "Rudolf Berghammer Thorsten Hoffmann", "tokens": [ "rudolf", "berghammer", "thorsten", "hoffmann" ], "ranked": [ [  ], [  ], [  ], [ 238 ] ] }
 { "authors": "Ryohei Fujimaki Takehisa Yairi Kazuo Machida", "tokens": [ "ryohei", "fujimaki", "takehisa", "yairi", "kazuo", "machida" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [  ] ] }
-{ "authors": "Samuel G. Steckley Shane G. Henderson", "tokens": [ "samuel", "g", "steckley", "shane", "g", "henderson" ], "ranked": [ [ 224 ], [ 468 ], [ 716 ], [ 515 ], [ 811 ], [ 811 ] ] }
-{ "authors": "Samy Bengio Johnny Mariéthoz", "tokens": [ "samy", "bengio", "johnny", "mariéthoz" ], "ranked": [ [ 281 ], [ 361 ], [ 712 ], [ 637 ] ] }
+{ "authors": "Samuel G. Steckley Shane G. Henderson", "tokens": [ "samuel", "g", "steckley", "shane", "g", "henderson" ], "ranked": [ [ 224 ], [ 468 ], [ 515 ], [ 716 ], [ 811 ], [ 811 ] ] }
+{ "authors": "Samy Bengio Johnny Mariéthoz", "tokens": [ "samy", "bengio", "johnny", "mariéthoz" ], "ranked": [ [ 281 ], [ 361 ], [ 637 ], [ 712 ] ] }
 { "authors": "Sarit Shwartz Michael Zibulevsky Yoav Y. Schechner", "tokens": [ "sarit", "shwartz", "michael", "zibulevsky", "yoav", "y", "schechner" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [ 614 ], [ 821 ] ] }
 { "authors": "Satoshi Niijima Satoru Kuhara", "tokens": [ "satoshi", "niijima", "satoru", "kuhara" ], "ranked": [ [  ], [  ], [  ], [  ] ] }
-{ "authors": "Sauro Menchetti Fabrizio Costa Paolo Frasconi", "tokens": [ "sauro", "menchetti", "fabrizio", "costa", "paolo", "frasconi" ], "ranked": [ [ 476 ], [ 374 ], [ 651 ], [ 661 ], [ 662 ], [ 708 ] ] }
-{ "authors": "Sayantan Sur Hyun-wook Jin Dhabaleswar K. Panda", "tokens": [ "sayantan", "sur", "hyun", "wook", "jin", "dhabaleswar", "k", "panda" ], "ranked": [ [ 142 ], [ 253 ], [ 412 ], [ 477 ], [ 753 ], [ 530 ], [ 605 ], [ 812 ] ] }
-{ "authors": "Sayantan Sur Lei Chai Hyun-wook Jin Dhabaleswar K. Panda Sun Microsystems", "tokens": [ "sayantan", "sur", "lei", "chai", "hyun", "wook", "jin", "dhabaleswar", "k", "panda", "sun", "microsystems" ], "ranked": [ [  ], [ 142 ], [ 253 ], [ 93 ], [ 412 ], [ 477 ], [ 330 ], [ 753 ], [ 530 ], [ 605 ], [ 792 ], [ 812 ] ] }
-{ "authors": "Sean Luke Keith Sullivan", "tokens": [ "sean", "luke", "keith", "sullivan" ], "ranked": [ [ 481 ], [ 345 ], [ 690 ], [ 527 ] ] }
+{ "authors": "Sauro Menchetti Fabrizio Costa Paolo Frasconi", "tokens": [ "sauro", "menchetti", "fabrizio", "costa", "paolo", "frasconi" ], "ranked": [ [ 374 ], [ 476 ], [ 651 ], [ 661 ], [ 662 ], [ 708 ] ] }
+{ "authors": "Sayantan Sur Hyun-wook Jin Dhabaleswar K. Panda", "tokens": [ "sayantan", "sur", "hyun", "wook", "jin", "dhabaleswar", "k", "panda" ], "ranked": [ [ 142 ], [ 253 ], [ 412 ], [ 477 ], [ 530 ], [ 605 ], [ 753 ], [ 812 ] ] }
+{ "authors": "Sayantan Sur Lei Chai Hyun-wook Jin Dhabaleswar K. Panda Sun Microsystems", "tokens": [ "sayantan", "sur", "lei", "chai", "hyun", "wook", "jin", "dhabaleswar", "k", "panda", "sun", "microsystems" ], "ranked": [ [  ], [ 93 ], [ 142 ], [ 253 ], [ 330 ], [ 412 ], [ 477 ], [ 530 ], [ 605 ], [ 753 ], [ 792 ], [ 812 ] ] }
+{ "authors": "Sean Luke Keith Sullivan", "tokens": [ "sean", "luke", "keith", "sullivan" ], "ranked": [ [ 345 ], [ 481 ], [ 527 ], [ 690 ] ] }
 { "authors": "Senjian An Wanquan Liu Svetha Venkatesh", "tokens": [ "senjian", "an", "wanquan", "liu", "svetha", "venkatesh" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [ 571 ] ] }
-{ "authors": "Seung-jean Kim Alessandro Magnani Stephen Boyd", "tokens": [ "seung", "jean", "kim", "alessandro", "magnani", "stephen", "boyd" ], "ranked": [ [ 71 ], [ 489 ], [ 351 ], [ 679 ], [ 692 ], [ 631 ], [ 791 ] ] }
+{ "authors": "Seung-jean Kim Alessandro Magnani Stephen Boyd", "tokens": [ "seung", "jean", "kim", "alessandro", "magnani", "stephen", "boyd" ], "ranked": [ [ 71 ], [ 351 ], [ 489 ], [ 631 ], [ 679 ], [ 692 ], [ 791 ] ] }
 { "authors": "Shibin Qiu Terran Lane", "tokens": [ "shibin", "qiu", "terran", "lane" ], "ranked": [ [  ], [  ], [  ], [  ] ] }
 { "authors": "Shiliang Sun Changshui Zhang", "tokens": [ "shiliang", "sun", "changshui", "zhang" ], "ranked": [ [ 496 ], [ 648 ], [ 792 ], [ 815 ] ] }
 { "authors": "Shotaro Akaho", "tokens": [ "shotaro", "akaho" ], "ranked": [ [  ], [  ] ] }
-{ "authors": "Si Wu Shun-ichi Amari", "tokens": [ "si", "wu", "shun", "ichi", "amari" ], "ranked": [ [ 255 ], [ 17 ], [ 499 ], [ 501 ], [ 728 ] ] }
+{ "authors": "Si Wu Shun-ichi Amari", "tokens": [ "si", "wu", "shun", "ichi", "amari" ], "ranked": [ [ 17 ], [ 255 ], [ 499 ], [ 501 ], [ 728 ] ] }
 { "authors": "Songcan Chen Daoqiang Zhang", "tokens": [ "songcan", "chen", "daoqiang", "zhang" ], "ranked": [ [ 130 ], [ 771 ], [ 810 ], [ 815 ] ] }
 { "authors": "Songcan Chen Daoqiang Zhang Zhi-hua Zhou", "tokens": [ "songcan", "chen", "daoqiang", "zhang", "zhi", "hua", "zhou" ], "ranked": [ [  ], [ 130 ], [ 673 ], [ 736 ], [ 771 ], [ 810 ], [ 815 ] ] }
 { "authors": "Stephen R. Schach Bo Jin David R. Wright Gillian Z. Heller A. Jefferson Offutt", "tokens": [ "stephen", "r", "schach", "bo", "jin", "david", "r", "wright", "gillian", "z", "heller", "a", "jefferson", "offutt" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [ 652 ], [ 753 ], [ 791 ], [ 816 ], [ 818 ], [ 818 ] ] }
-{ "authors": "Steven C. H. Hoi Rong Jin Jianke Zhu Michael R. Lyu", "tokens": [ "steven", "c", "h", "hoi", "rong", "jin", "jianke", "zhu", "michael", "r", "lyu" ], "ranked": [ [  ], [  ], [ 240 ], [ 349 ], [ 753 ], [ 519 ], [ 768 ], [ 800 ], [ 817 ], [ 818 ], [ 821 ] ] }
+{ "authors": "Steven C. H. Hoi Rong Jin Jianke Zhu Michael R. Lyu", "tokens": [ "steven", "c", "h", "hoi", "rong", "jin", "jianke", "zhu", "michael", "r", "lyu" ], "ranked": [ [  ], [  ], [ 240 ], [ 349 ], [ 519 ], [ 753 ], [ 768 ], [ 800 ], [ 817 ], [ 818 ], [ 821 ] ] }
 { "authors": "Subhransu Maji Alexander C. Berg Jitendra Malik", "tokens": [ "subhransu", "maji", "alexander", "c", "berg", "jitendra", "malik" ], "ranked": [ [ 54 ], [ 278 ], [ 352 ], [ 355 ], [ 523 ], [ 777 ], [ 817 ] ] }
 { "authors": "Swagatam Das Ajith Abraham Amit Konar", "tokens": [ "swagatam", "das", "ajith", "abraham", "amit", "konar" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [  ] ] }
 { "authors": "Tatsuo Nakajima Hideyuki Tokuda", "tokens": [ "tatsuo", "nakajima", "hideyuki", "tokuda" ], "ranked": [ [ 233 ], [ 392 ], [ 539 ], [ 555 ] ] }
 { "authors": "Thierry Blu Philippe Thévenaz Michael Unser", "tokens": [ "thierry", "blu", "philippe", "thévenaz", "michael", "unser" ], "ranked": [ [  ], [  ], [  ], [  ], [ 423 ], [ 821 ] ] }
 { "authors": "Thomas Gärtner", "tokens": [ "thomas", "gärtner" ], "ranked": [ [  ], [ 725 ] ] }
-{ "authors": "Thomas Röblitz Oliver Bühn Frank Mueller", "tokens": [ "thomas", "röblitz", "oliver", "bühn", "frank", "mueller" ], "ranked": [ [ 187 ], [ 84 ], [ 386 ], [ 404 ], [ 464 ], [ 725 ] ] }
+{ "authors": "Thomas Röblitz Oliver Bühn Frank Mueller", "tokens": [ "thomas", "röblitz", "oliver", "bühn", "frank", "mueller" ], "ranked": [ [ 84 ], [ 187 ], [ 386 ], [ 404 ], [ 464 ], [ 725 ] ] }
 { "authors": "Tiffany M. Mintz James P. Davis", "tokens": [ "tiffany", "m", "mintz", "james", "p", "davis" ], "ranked": [ [  ], [  ], [  ], [ 781 ], [ 786 ], [ 820 ] ] }
-{ "authors": "Tony Van Gestel Johan A. K. Suykens Bart Baesens Stijn Viaene Jan Vanthienen Guido Dedene Bart De Moor Joos Vandewalle", "tokens": [ "tony", "van", "gestel", "johan", "a", "k", "suykens", "bart", "baesens", "stijn", "viaene", "jan", "vanthienen", "guido", "dedene", "bart", "de", "moor", "joos", "vandewalle" ], "ranked": [ [  ], [ 136 ], [ 208 ], [ 383 ], [ 665 ], [ 721 ], [ 739 ], [ 739 ], [ 754 ], [ 520 ], [ 566 ], [ 567 ], [ 574 ], [ 635 ], [ 794 ], [ 799 ], [ 801 ], [ 812 ], [ 814 ], [ 816 ] ] }
+{ "authors": "Tony Van Gestel Johan A. K. Suykens Bart Baesens Stijn Viaene Jan Vanthienen Guido Dedene Bart De Moor Joos Vandewalle", "tokens": [ "tony", "van", "gestel", "johan", "a", "k", "suykens", "bart", "baesens", "stijn", "viaene", "jan", "vanthienen", "guido", "dedene", "bart", "de", "moor", "joos", "vandewalle" ], "ranked": [ [  ], [ 136 ], [ 208 ], [ 383 ], [ 520 ], [ 566 ], [ 567 ], [ 574 ], [ 635 ], [ 665 ], [ 721 ], [ 739 ], [ 739 ], [ 754 ], [ 794 ], [ 799 ], [ 801 ], [ 812 ], [ 814 ], [ 816 ] ] }
 { "authors": "Vlad Olaru Walter F. Tichy", "tokens": [ "vlad", "olaru", "walter", "f", "tichy" ], "ranked": [ [  ], [  ], [  ], [  ], [  ] ] }
 { "authors": "Vladimir Vovk", "tokens": [ "vladimir", "vovk" ], "ranked": [ [  ], [ 580 ] ] }
 { "authors": "Vojislav Kecman Te-Ming Huang Michael Vogt", "tokens": [ "vojislav", "kecman", "te", "ming", "huang", "michael", "vogt" ], "ranked": [ [ 294 ], [ 379 ], [ 541 ], [ 581 ], [ 582 ], [ 780 ], [ 821 ] ] }
 { "authors": "Volker Roth Bernd Fischer", "tokens": [ "volker", "roth", "bernd", "fischer" ], "ranked": [ [ 176 ], [ 460 ], [ 583 ], [ 639 ] ] }
 { "authors": "W. Chen", "tokens": [ "w", "chen" ], "ranked": [ [ 809 ], [ 810 ] ] }
-{ "authors": "Wim Van De Velde Johan Opsommer Erik H. D'Hollander", "tokens": [ "wim", "van", "de", "velde", "johan", "opsommer", "erik", "h", "d", "hollander" ], "ranked": [ [ 242 ], [ 408 ], [ 746 ], [ 754 ], [ 569 ], [ 602 ], [ 799 ], [ 800 ], [ 813 ], [ 814 ] ] }
-{ "authors": "Xuanlong Nguyen Martin J. Wainwright Michael I. Jordan", "tokens": [ "xuanlong", "nguyen", "martin", "j", "wainwright", "michael", "i", "jordan" ], "ranked": [ [ 703 ], [ 732 ], [ 761 ], [ 586 ], [ 802 ], [ 805 ], [ 821 ], [ 822 ] ] }
-{ "authors": "Xuanlong Nguyen Xuanlong Martin J. Wainwright Michael I. Jordan", "tokens": [ "xuanlong", "nguyen", "xuanlong", "martin", "j", "wainwright", "michael", "i", "jordan" ], "ranked": [ [ 703 ], [ 732 ], [ 732 ], [ 761 ], [ 586 ], [ 802 ], [ 805 ], [ 821 ], [ 822 ] ] }
+{ "authors": "Wim Van De Velde Johan Opsommer Erik H. D'Hollander", "tokens": [ "wim", "van", "de", "velde", "johan", "opsommer", "erik", "h", "d", "hollander" ], "ranked": [ [ 242 ], [ 408 ], [ 569 ], [ 602 ], [ 746 ], [ 754 ], [ 799 ], [ 800 ], [ 813 ], [ 814 ] ] }
+{ "authors": "Xuanlong Nguyen Martin J. Wainwright Michael I. Jordan", "tokens": [ "xuanlong", "nguyen", "martin", "j", "wainwright", "michael", "i", "jordan" ], "ranked": [ [ 586 ], [ 703 ], [ 732 ], [ 761 ], [ 802 ], [ 805 ], [ 821 ], [ 822 ] ] }
+{ "authors": "Xuanlong Nguyen Xuanlong Martin J. Wainwright Michael I. Jordan", "tokens": [ "xuanlong", "nguyen", "xuanlong", "martin", "j", "wainwright", "michael", "i", "jordan" ], "ranked": [ [ 586 ], [ 703 ], [ 732 ], [ 732 ], [ 761 ], [ 802 ], [ 805 ], [ 821 ], [ 822 ] ] }
 { "authors": "Y. Jeon I.H. Sloan E. P. Stephan J. Elschner", "tokens": [ "y", "jeon", "i", "h", "sloan", "e", "p", "stephan", "j", "elschner" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [ 659 ], [ 786 ], [ 800 ], [ 805 ], [ 822 ] ] }
 { "authors": "Yaniv Gurwicz Boaz Lerner", "tokens": [ "yaniv", "gurwicz", "boaz", "lerner" ], "ranked": [ [  ], [  ], [  ], [  ] ] }
 { "authors": "Yongmin Li Shaogang Gong Heather Liddell", "tokens": [ "yongmin", "li", "shaogang", "gong", "heather", "liddell" ], "ranked": [ [  ], [  ], [  ], [  ], [  ], [ 759 ] ] }
-{ "authors": "Yoshisato Yanagisawa Shigeru Chiba Kenichi Kourai", "tokens": [ "yoshisato", "yanagisawa", "shigeru", "chiba", "kenichi", "kourai" ], "ranked": [ [ 99 ], [ 495 ], [ 297 ], [ 311 ], [ 611 ], [ 618 ] ] }
-{ "authors": "Zhang Dao-qiang Chen Song-can", "tokens": [ "zhang", "dao", "qiang", "chen", "song", "can" ], "ranked": [ [ 129 ], [ 86 ], [ 510 ], [ 767 ], [ 810 ], [ 815 ] ] }
+{ "authors": "Yoshisato Yanagisawa Shigeru Chiba Kenichi Kourai", "tokens": [ "yoshisato", "yanagisawa", "shigeru", "chiba", "kenichi", "kourai" ], "ranked": [ [ 99 ], [ 297 ], [ 311 ], [ 495 ], [ 611 ], [ 618 ] ] }
+{ "authors": "Zhang Dao-qiang Chen Song-can", "tokens": [ "zhang", "dao", "qiang", "chen", "song", "can" ], "ranked": [ [ 86 ], [ 129 ], [ 510 ], [ 767 ], [ 810 ], [ 815 ] ] }
 { "authors": "Zhe Wang Songcan Chen", "tokens": [ "zhe", "wang", "songcan", "chen" ], "ranked": [ [ 626 ], [ 771 ], [ 808 ], [ 810 ] ] }
 { "authors": "Zheng Rong Yang", "tokens": [ "zheng", "rong", "yang" ], "ranked": [ [ 735 ], [ 768 ], [ 797 ] ] }
-{ "authors": "Zhiwei Gu Tao Mei Jinhui Tang Xiuqing Wu Xian-sheng Hua", "tokens": [ "zhiwei", "gu", "tao", "mei", "jinhui", "tang", "xiuqing", "wu", "xian", "sheng", "hua" ], "ranked": [ [  ], [  ], [ 207 ], [ 493 ], [ 277 ], [ 371 ], [ 673 ], [ 728 ], [ 537 ], [ 607 ], [ 793 ] ] }
+{ "authors": "Zhiwei Gu Tao Mei Jinhui Tang Xiuqing Wu Xian-sheng Hua", "tokens": [ "zhiwei", "gu", "tao", "mei", "jinhui", "tang", "xiuqing", "wu", "xian", "sheng", "hua" ], "ranked": [ [  ], [  ], [ 207 ], [ 277 ], [ 371 ], [ 493 ], [ 537 ], [ 607 ], [ 673 ], [ 728 ], [ 793 ] ] }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/basic-1_2_2/basic-1_2_2.6.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/basic-1_2_2/basic-1_2_2.6.adm
index 26ccd72..adeb5e6 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/basic-1_2_2/basic-1_2_2.6.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/basic-1_2_2/basic-1_2_2.6.adm
@@ -1,120 +1,120 @@
-{ "DBLP": [ "ronald", "minnich", "matthew", "j", "sottile", "sung", "eun", "choi", "erik", "a", "hendriks", "jim", "mckie" ], "CSX": [ "ronald", "g", "minnich", "matthew", "j", "sottile", "sung", "eun", "choi", "erik", "hendriks", "jim", "mckie" ], "sim": 0.85714287 }
-{ "DBLP": [ "bryan", "ford", "mike", "hibler", "jay", "lepreau", "patrick", "tullmann", "godmar", "back", "stephen", "clawson" ], "CSX": [ "bryan", "ford", "mike", "hibler", "jay", "lepreau", "patrick", "tullmann", "godmar", "back", "stephen", "clawson" ], "sim": 1.0 }
-{ "DBLP": [ "christina", "s", "leslie", "eleazar", "eskin", "adiel", "cohen", "jason", "weston", "william", "stafford", "noble" ], "CSX": [ "christina", "s", "leslie", "eleazar", "eskin", "adiel", "cohen", "jason", "weston", "william", "stafford", "noble" ], "sim": 1.0 }
-{ "DBLP": [ "antti", "airola", "sampo", "pyysalo", "jari", "björne", "tapio", "pahikkala", "filip", "ginter", "tapio", "salakoski" ], "CSX": [ "antti", "airola", "sampo", "pyysalo", "jari", "björne", "tapio", "pahikkala", "filip", "ginter", "tapio", "salakoski" ], "sim": 1.0 }
-{ "DBLP": [ "dominique", "chanet", "bjorn", "de", "sutter", "bruno", "de", "bus", "ludo", "van", "put", "koen", "de", "bosschere" ], "CSX": [ "bruno", "de", "bus", "dominique", "chanet", "ludo", "van", "put", "bjorn", "de", "sutter", "koen", "de", "bosschere" ], "sim": 1.0 }
-{ "DBLP": [ "bastian", "blankenburg", "rajdeep", "k", "dash", "sarvapali", "d", "ramchurn", "matthias", "klusch", "nicholas", "r", "jennings" ], "CSX": [ "bastian", "blankenburg", "rajdeep", "k", "dash", "sarvapali", "d", "ramchurn", "matthias", "klusch", "nicholas", "r", "jennings" ], "sim": 1.0 }
-{ "DBLP": [ "rafael", "serrano", "gotarredona", "teresa", "serrano", "gotarredona", "antonio", "acosta", "jimenez", "bernabé", "linares", "barranco" ], "CSX": [ "rafael", "serrano", "gotarredona", "teresa", "serrano", "gotarredona", "antonio", "acosta", "jiménez", "bernabé", "linares", "barranco" ], "sim": 0.84615386 }
-{ "DBLP": [ "jason", "weston", "christina", "s", "leslie", "eugene", "ie", "dengyong", "zhou", "andré", "elisseeff", "william", "stafford", "noble" ], "CSX": [ "jason", "weston", "christina", "leslie", "eugene", "ie", "dengyong", "zhou", "andre", "elisseeff", "william", "stafford", "noble" ], "sim": 0.8 }
-{ "DBLP": [ "bart", "baesens", "stijn", "viaene", "tony", "van", "gestel", "johan", "a", "k", "suykens", "guido", "dedene", "bart", "de", "moor", "jan", "vanthienen" ], "CSX": [ "tony", "van", "gestel", "johan", "a", "k", "suykens", "bart", "baesens", "stijn", "viaene", "jan", "vanthienen", "guido", "dedene", "bart", "de", "moor", "joos", "vandewalle" ], "sim": 0.9 }
-{ "DBLP": [ "tony", "van", "gestel", "bart", "baesens", "johan", "a", "k", "suykens", "dirk", "van", "den", "poel", "dirk", "emma", "baestaens", "marleen", "willekens" ], "CSX": [ "en", "bedrijfskunde", "gent", "tony", "van", "gestel", "bart", "baesens", "johan", "a", "k", "suykens", "dirk", "van", "den", "poel", "dirk", "emma", "baestaens", "marleen", "willekens" ], "sim": 0.85714287 }
-{ "DBLP": [ "karsten", "m", "borgwardt", "cheng", "soon", "ong", "stefan", "schönauer", "s", "v", "n", "vishwanathan", "alexander", "j", "smola", "hans", "peter", "kriegel" ], "CSX": [ "karsten", "m", "borgwardt", "cheng", "soon", "ong", "stefan", "schönauer", "s", "v", "n", "vishwanathan", "alex", "j", "smola", "hans", "peter", "kriegel" ], "sim": 0.8947368 }
-{ "DBLP": [ "w", "chen" ], "CSX": [ "w", "chen" ], "sim": 1.0 }
-{ "DBLP": [ "hujun", "yin" ], "CSX": [ "hujun", "yin" ], "sim": 1.0 }
-{ "DBLP": [ "michel", "gien" ], "CSX": [ "michel", "gien" ], "sim": 1.0 }
-{ "DBLP": [ "roland", "opfer" ], "CSX": [ "roland", "opfer" ], "sim": 1.0 }
-{ "DBLP": [ "carsten", "ditze" ], "CSX": [ "carsten", "ditze" ], "sim": 1.0 }
-{ "DBLP": [ "matthew", "brand" ], "CSX": [ "matthew", "brand" ], "sim": 1.0 }
-{ "DBLP": [ "annegret", "weng" ], "CSX": [ "annegret", "weng" ], "sim": 1.0 }
-{ "DBLP": [ "greg", "kuperberg" ], "CSX": [ "greg", "kuperberg" ], "sim": 1.0 }
-{ "DBLP": [ "ingo", "steinwart" ], "CSX": [ "ingo", "steinwart" ], "sim": 1.0 }
-{ "DBLP": [ "peter", "druschel" ], "CSX": [ "peter", "druschel" ], "sim": 1.0 }
-{ "DBLP": [ "charles", "crowley" ], "CSX": [ "charles", "crowley" ], "sim": 1.0 }
-{ "DBLP": [ "carl", "g", "looney" ], "CSX": [ "carl", "g", "looney" ], "sim": 1.0 }
-{ "DBLP": [ "ding", "xuan", "zhou" ], "CSX": [ "ding", "xuan", "zhou" ], "sim": 1.0 }
-{ "DBLP": [ "francis", "r", "bach" ], "CSX": [ "francis", "r", "bach" ], "sim": 1.0 }
-{ "DBLP": [ "brian", "n", "bershad" ], "CSX": [ "brian", "n", "bershad" ], "sim": 1.0 }
-{ "DBLP": [ "zheng", "rong", "yang" ], "CSX": [ "zheng", "rong", "yang" ], "sim": 1.0 }
-{ "DBLP": [ "mark", "baker", "hong", "ong" ], "CSX": [ "mark", "baker", "hong", "ong" ], "sim": 1.0 }
-{ "DBLP": [ "qun", "dai", "songcan", "chen" ], "CSX": [ "qun", "dai", "songcan", "chen" ], "sim": 1.0 }
-{ "DBLP": [ "zhe", "wang", "songcan", "chen" ], "CSX": [ "zhe", "wang", "songcan", "chen" ], "sim": 1.0 }
-{ "DBLP": [ "majid", "beigi", "andreas", "zell" ], "CSX": [ "majid", "m", "beigi", "andreas", "zell" ], "sim": 0.8 }
-{ "DBLP": [ "keith", "sullivan", "sean", "luke" ], "CSX": [ "sean", "luke", "keith", "sullivan" ], "sim": 1.0 }
-{ "DBLP": [ "keith", "sullivan", "sean", "luke" ], "CSX": [ "keith", "sullivan", "sean", "luke" ], "sim": 1.0 }
-{ "DBLP": [ "moonsang", "kwon", "yookun", "cho" ], "CSX": [ "moonsang", "kwon", "yookun", "cho" ], "sim": 1.0 }
-{ "DBLP": [ "nail", "akar", "khosrow", "sohraby" ], "CSX": [ "nail", "akar", "khosrow", "sohraby" ], "sim": 1.0 }
-{ "DBLP": [ "volker", "roth", "bernd", "fischer" ], "CSX": [ "volker", "roth", "bernd", "fischer" ], "sim": 1.0 }
-{ "DBLP": [ "shun", "ichi", "amari", "si", "wu" ], "CSX": [ "si", "wu", "shun", "ichi", "amari" ], "sim": 1.0 }
-{ "DBLP": [ "michel", "neuhaus", "horst", "bunke" ], "CSX": [ "michel", "neuhaus", "horst", "bunke" ], "sim": 1.0 }
-{ "DBLP": [ "carlos", "soares", "pavel", "brazdil" ], "CSX": [ "pavel", "b", "brazdil", "carlos", "soares" ], "sim": 0.8 }
-{ "DBLP": [ "songcan", "chen", "daoqiang", "zhang" ], "CSX": [ "songcan", "chen", "daoqiang", "zhang" ], "sim": 1.0 }
-{ "DBLP": [ "guang", "dai", "dit", "yan", "yeung" ], "CSX": [ "guang", "dai", "dit", "yan", "yeung" ], "sim": 1.0 }
-{ "DBLP": [ "ingo", "mierswa", "katharina", "morik" ], "CSX": [ "ingo", "mierswa", "katharina", "morik" ], "sim": 1.0 }
-{ "DBLP": [ "shiliang", "sun", "changshui", "zhang" ], "CSX": [ "shiliang", "sun", "changshui", "zhang" ], "sim": 1.0 }
-{ "DBLP": [ "johnny", "mariéthoz", "samy", "bengio" ], "CSX": [ "samy", "bengio", "johnny", "mariéthoz" ], "sim": 1.0 }
-{ "DBLP": [ "huzefa", "rangwala", "george", "karypis" ], "CSX": [ "huzefa", "rangwala", "george", "karypis" ], "sim": 1.0 }
 { "DBLP": [ "alexei", "pozdnoukhov", "samy", "bengio" ], "CSX": [ "alexei", "pozdnoukhov", "samy", "bengio" ], "sim": 1.0 }
-{ "DBLP": [ "michael", "engel", "bernd", "freisleben" ], "CSX": [ "michael", "engel", "bernd", "freisleben" ], "sim": 1.0 }
-{ "DBLP": [ "robert", "jenssen", "torbjørn", "eltoft" ], "CSX": [ "robert", "jenssen", "torbjørn", "eltoft" ], "sim": 1.0 }
-{ "DBLP": [ "tatsuo", "nakajima", "hideyuki", "tokuda" ], "CSX": [ "tatsuo", "nakajima", "hideyuki", "tokuda" ], "sim": 1.0 }
-{ "DBLP": [ "tatsuo", "nakajima", "hideyuki", "tokuda" ], "CSX": [ "hideyuki", "tokuda", "tatsuo", "nakajima" ], "sim": 1.0 }
+{ "DBLP": [ "andreas", "argyriou", "raphael", "hauser", "charles", "a", "micchelli", "massimiliano", "pontil" ], "CSX": [ "andreas", "argyriou", "raphael", "hauser", "charles", "a", "micchelli", "massimiliano", "pontil" ], "sim": 1.0 }
+{ "DBLP": [ "annalisa", "barla", "francesca", "odone", "alessandro", "verri" ], "CSX": [ "francesca", "odone", "annalisa", "barla", "alessandro", "verri" ], "sim": 1.0 }
+{ "DBLP": [ "annegret", "weng" ], "CSX": [ "annegret", "weng" ], "sim": 1.0 }
+{ "DBLP": [ "antti", "airola", "sampo", "pyysalo", "jari", "björne", "tapio", "pahikkala", "filip", "ginter", "tapio", "salakoski" ], "CSX": [ "antti", "airola", "sampo", "pyysalo", "jari", "björne", "tapio", "pahikkala", "filip", "ginter", "tapio", "salakoski" ], "sim": 1.0 }
+{ "DBLP": [ "arindam", "choudhury", "prasanth", "b", "nair", "andy", "j", "keane" ], "CSX": [ "prasanth", "b", "nair", "arindam", "choudhury", "andy", "j", "keane" ], "sim": 1.0 }
+{ "DBLP": [ "arvind", "seshadri", "mark", "luk", "ning", "qu", "adrian", "perrig" ], "CSX": [ "arvind", "seshadri", "mark", "luk", "ning", "qu", "adrian", "perrig" ], "sim": 1.0 }
+{ "DBLP": [ "bart", "baesens", "stijn", "viaene", "tony", "van", "gestel", "johan", "a", "k", "suykens", "guido", "dedene", "bart", "de", "moor", "jan", "vanthienen" ], "CSX": [ "tony", "van", "gestel", "johan", "a", "k", "suykens", "bart", "baesens", "stijn", "viaene", "jan", "vanthienen", "guido", "dedene", "bart", "de", "moor", "joos", "vandewalle" ], "sim": 0.9 }
+{ "DBLP": [ "bastian", "blankenburg", "rajdeep", "k", "dash", "sarvapali", "d", "ramchurn", "matthias", "klusch", "nicholas", "r", "jennings" ], "CSX": [ "bastian", "blankenburg", "rajdeep", "k", "dash", "sarvapali", "d", "ramchurn", "matthias", "klusch", "nicholas", "r", "jennings" ], "sim": 1.0 }
+{ "DBLP": [ "benjamin", "schrauwen", "jan", "m", "van", "campenhout" ], "CSX": [ "benjamin", "schrauwen", "jan", "van", "campenhout" ], "sim": 0.8333333 }
+{ "DBLP": [ "benjamin", "schrauwen", "jan", "van", "campenhout" ], "CSX": [ "benjamin", "schrauwen", "jan", "van", "campenhout" ], "sim": 1.0 }
+{ "DBLP": [ "brett", "d", "fleisch", "mark", "allan", "a", "co" ], "CSX": [ "brett", "fleisch", "mark", "allan", "a", "co" ], "sim": 0.85714287 }
+{ "DBLP": [ "brian", "kulis", "sugato", "basu", "inderjit", "s", "dhillon", "raymond", "j", "mooney" ], "CSX": [ "brian", "kulis", "sugato", "basu", "inderjit", "dhillon", "raymond", "mooney" ], "sim": 0.8 }
+{ "DBLP": [ "brian", "n", "bershad" ], "CSX": [ "brian", "n", "bershad" ], "sim": 1.0 }
+{ "DBLP": [ "bryan", "ford", "mike", "hibler", "jay", "lepreau", "patrick", "tullmann", "godmar", "back", "stephen", "clawson" ], "CSX": [ "bryan", "ford", "mike", "hibler", "jay", "lepreau", "patrick", "tullmann", "godmar", "back", "stephen", "clawson" ], "sim": 1.0 }
+{ "DBLP": [ "carl", "g", "looney" ], "CSX": [ "carl", "g", "looney" ], "sim": 1.0 }
+{ "DBLP": [ "carlos", "soares", "pavel", "brazdil" ], "CSX": [ "pavel", "b", "brazdil", "carlos", "soares" ], "sim": 0.8 }
+{ "DBLP": [ "carsten", "ditze" ], "CSX": [ "carsten", "ditze" ], "sim": 1.0 }
+{ "DBLP": [ "charles", "crowley" ], "CSX": [ "charles", "crowley" ], "sim": 1.0 }
+{ "DBLP": [ "cheng", "soon", "ong", "alexander", "j", "smola", "robert", "c", "williamson" ], "CSX": [ "cheng", "soon", "ong", "alexander", "j", "smola", "robert", "c", "williamson" ], "sim": 1.0 }
+{ "DBLP": [ "cheng", "soon", "ong", "alexander", "j", "smola", "robert", "c", "williamson" ], "CSX": [ "cheng", "soon", "ong", "er", "j", "smola", "robert", "c", "williamson" ], "sim": 0.8 }
+{ "DBLP": [ "cheng", "soon", "ong", "xavier", "mary", "stéphane", "canu", "alexander", "j", "smola" ], "CSX": [ "cheng", "soon", "ong", "stéphane", "canu", "alexander", "j", "smola" ], "sim": 0.8 }
+{ "DBLP": [ "christian", "poellabauer", "karsten", "schwan", "richard", "west" ], "CSX": [ "christian", "poellabauer", "karsten", "schwan", "richard", "west" ], "sim": 1.0 }
+{ "DBLP": [ "christian", "poellabauer", "karsten", "schwan", "richard", "west" ], "CSX": [ "richard", "west", "karsten", "schwan", "christian", "poellabauer" ], "sim": 1.0 }
+{ "DBLP": [ "christina", "s", "leslie", "eleazar", "eskin", "adiel", "cohen", "jason", "weston", "william", "stafford", "noble" ], "CSX": [ "christina", "s", "leslie", "eleazar", "eskin", "adiel", "cohen", "jason", "weston", "william", "stafford", "noble" ], "sim": 1.0 }
 { "DBLP": [ "christoph", "heinz", "bernhard", "seeger" ], "CSX": [ "christoph", "heinz", "bernhard", "seeger" ], "sim": 1.0 }
-{ "DBLP": [ "zhiqian", "wang", "jezekiel", "ben", "arie" ], "CSX": [ "jezekiel", "ben", "arie", "zhiqian", "wang" ], "sim": 1.0 }
-{ "DBLP": [ "zhiqian", "wang", "jezekiel", "ben", "arie" ], "CSX": [ "jezekiel", "ben", "arie", "zhiqian", "wang" ], "sim": 1.0 }
-{ "DBLP": [ "yu", "chieh", "wu", "chia", "hui", "chang" ], "CSX": [ "chia", "hui", "chang", "yu", "chieh", "wu" ], "sim": 1.0 }
+{ "DBLP": [ "christopher", "j", "c", "burges", "david", "j", "crisp" ], "CSX": [ "david", "j", "crisp", "christopher", "j", "c", "burges" ], "sim": 1.0 }
+{ "DBLP": [ "chunhua", "shen", "anton", "van", "den", "hengel", "michael", "j", "brooks" ], "CSX": [ "chunhua", "shen", "anton", "van", "den", "hengel", "anthony", "dick", "michael", "j", "brooks" ], "sim": 0.8181818 }
+{ "DBLP": [ "chunhua", "shen", "anton", "van", "den", "hengel", "michael", "j", "brooks" ], "CSX": [ "chunhua", "shen", "michael", "j", "brooks", "anton", "van", "den", "hengel" ], "sim": 1.0 }
+{ "DBLP": [ "cyril", "allauzen", "mehryar", "mohri", "ameet", "talwalkar" ], "CSX": [ "cyril", "allauzen", "mehryar", "mohri", "ameet", "talwalkar" ], "sim": 1.0 }
 { "DBLP": [ "dao", "qiang", "zhang", "song", "can", "chen" ], "CSX": [ "dao", "qiang", "zhang", "song", "can", "chen" ], "sim": 1.0 }
 { "DBLP": [ "dao", "qiang", "zhang", "song", "can", "chen" ], "CSX": [ "zhang", "dao", "qiang", "chen", "song", "can" ], "sim": 1.0 }
-{ "DBLP": [ "italo", "j", "dejter", "abel", "a", "delgado" ], "CSX": [ "italo", "j", "dejter", "abel", "a", "delgado" ], "sim": 1.0 }
-{ "DBLP": [ "hiren", "d", "patel", "sandeep", "k", "shukla" ], "CSX": [ "hiren", "d", "patel", "sandeep", "k", "shukla" ], "sim": 1.0 }
+{ "DBLP": [ "darrin", "p", "lewis", "tony", "jebara", "william", "stafford", "noble" ], "CSX": [ "darrin", "p", "lewis", "tony", "jebara", "william", "stafford", "noble" ], "sim": 1.0 }
+{ "DBLP": [ "ding", "xuan", "zhou" ], "CSX": [ "ding", "xuan", "zhou" ], "sim": 1.0 }
+{ "DBLP": [ "dit", "yan", "yeung", "hong", "chang", "guang", "dai" ], "CSX": [ "guang", "dai", "dit", "yan", "yeung", "hong", "chang" ], "sim": 1.0 }
+{ "DBLP": [ "dominique", "chanet", "bjorn", "de", "sutter", "bruno", "de", "bus", "ludo", "van", "put", "koen", "de", "bosschere" ], "CSX": [ "bruno", "de", "bus", "dominique", "chanet", "ludo", "van", "put", "bjorn", "de", "sutter", "koen", "de", "bosschere" ], "sim": 1.0 }
+{ "DBLP": [ "erik", "h", "w", "meijering", "karel", "j", "zuiderveld", "max", "a", "viergever" ], "CSX": [ "erik", "h", "w", "meijering", "karel", "j", "zuiderveld", "max", "a", "viergever" ], "sim": 1.0 }
+{ "DBLP": [ "ernest", "artiaga", "albert", "serra", "marisa", "gil" ], "CSX": [ "ernest", "artiaga", "albert", "serra", "marisa", "gil" ], "sim": 1.0 }
+{ "DBLP": [ "faisal", "n", "abu", "khzam", "michael", "a", "langston", "w", "henry", "suters" ], "CSX": [ "faisal", "n", "abu", "khzam", "michael", "a", "langston", "w", "henry", "suters" ], "sim": 1.0 }
+{ "DBLP": [ "florent", "lafarge", "xavier", "descombes", "josiane", "zerubia" ], "CSX": [ "florent", "lafarge", "xavier", "descombes", "josiane", "zerubia" ], "sim": 1.0 }
+{ "DBLP": [ "francis", "r", "bach" ], "CSX": [ "francis", "r", "bach" ], "sim": 1.0 }
+{ "DBLP": [ "francis", "r", "bach", "gert", "r", "g", "lanckriet", "michael", "i", "jordan" ], "CSX": [ "francis", "r", "bach", "gert", "r", "g", "lanckriet", "michael", "i", "jordan" ], "sim": 1.0 }
 { "DBLP": [ "francis", "r", "bach", "michael", "i", "jordan" ], "CSX": [ "francis", "bach", "michael", "i", "jordan" ], "sim": 0.8333333 }
 { "DBLP": [ "francis", "r", "bach", "michael", "i", "jordan" ], "CSX": [ "francis", "r", "bach", "michael", "i", "jordan" ], "sim": 1.0 }
-{ "DBLP": [ "matthew", "burnside", "angelos", "d", "keromytis" ], "CSX": [ "matthew", "burnside", "angelos", "d", "keromytis" ], "sim": 1.0 }
+{ "DBLP": [ "francis", "r", "bach", "romain", "thibaux", "michael", "i", "jordan" ], "CSX": [ "francis", "r", "bach", "romain", "thibaux", "michael", "i", "jordan" ], "sim": 1.0 }
+{ "DBLP": [ "greg", "kuperberg" ], "CSX": [ "greg", "kuperberg" ], "sim": 1.0 }
 { "DBLP": [ "gregory", "d", "benson", "ronald", "a", "olsson" ], "CSX": [ "gregory", "d", "benson", "ronald", "a", "olsson" ], "sim": 1.0 }
-{ "DBLP": [ "benjamin", "schrauwen", "jan", "van", "campenhout" ], "CSX": [ "benjamin", "schrauwen", "jan", "van", "campenhout" ], "sim": 1.0 }
-{ "DBLP": [ "samuel", "g", "steckley", "shane", "g", "henderson" ], "CSX": [ "samuel", "g", "steckley", "shane", "g", "henderson" ], "sim": 1.0 }
 { "DBLP": [ "gregory", "e", "fasshauer", "joseph", "w", "jerome" ], "CSX": [ "gregory", "e", "fasshauer", "joseph", "w", "jerome" ], "sim": 1.0 }
+{ "DBLP": [ "guang", "dai", "dit", "yan", "yeung" ], "CSX": [ "guang", "dai", "dit", "yan", "yeung" ], "sim": 1.0 }
+{ "DBLP": [ "hiren", "d", "patel", "sandeep", "k", "shukla" ], "CSX": [ "hiren", "d", "patel", "sandeep", "k", "shukla" ], "sim": 1.0 }
+{ "DBLP": [ "holger", "fröhlich", "jörg", "k", "wegner", "florian", "sieker", "andreas", "zell" ], "CSX": [ "holger", "fröhlich", "jörg", "k", "wegner", "florian", "sieker", "andreas", "zell" ], "sim": 1.0 }
+{ "DBLP": [ "hujun", "yin" ], "CSX": [ "hujun", "yin" ], "sim": 1.0 }
+{ "DBLP": [ "huzefa", "rangwala", "george", "karypis" ], "CSX": [ "huzefa", "rangwala", "george", "karypis" ], "sim": 1.0 }
+{ "DBLP": [ "hyun", "wook", "jin", "sayantan", "sur", "lei", "chai", "dhabaleswar", "k", "panda" ], "CSX": [ "sayantan", "sur", "hyun", "wook", "jin", "dhabaleswar", "k", "panda" ], "sim": 0.8 }
+{ "DBLP": [ "hyun", "wook", "jin", "sayantan", "sur", "lei", "chai", "dhabaleswar", "k", "panda" ], "CSX": [ "sayantan", "sur", "lei", "chai", "hyun", "wook", "jin", "dhabaleswar", "k", "panda", "sun", "microsystems" ], "sim": 0.8333333 }
+{ "DBLP": [ "ingo", "mierswa", "katharina", "morik" ], "CSX": [ "ingo", "mierswa", "katharina", "morik" ], "sim": 1.0 }
+{ "DBLP": [ "ingo", "steinwart" ], "CSX": [ "ingo", "steinwart" ], "sim": 1.0 }
+{ "DBLP": [ "italo", "j", "dejter", "abel", "a", "delgado" ], "CSX": [ "italo", "j", "dejter", "abel", "a", "delgado" ], "sim": 1.0 }
+{ "DBLP": [ "jason", "weston", "christina", "s", "leslie", "eugene", "ie", "dengyong", "zhou", "andré", "elisseeff", "william", "stafford", "noble" ], "CSX": [ "jason", "weston", "christina", "leslie", "eugene", "ie", "dengyong", "zhou", "andre", "elisseeff", "william", "stafford", "noble" ], "sim": 0.8 }
 { "DBLP": [ "jieping", "ye", "jianhui", "chen", "shuiwang", "ji" ], "CSX": [ "jieping", "ye", "jianhui", "chen", "shuiwang", "ji" ], "sim": 1.0 }
 { "DBLP": [ "jieping", "ye", "shuiwang", "ji", "jianhui", "chen" ], "CSX": [ "jieping", "ye", "jianhui", "chen", "shuiwang", "ji" ], "sim": 1.0 }
-{ "DBLP": [ "brett", "d", "fleisch", "mark", "allan", "a", "co" ], "CSX": [ "brett", "fleisch", "mark", "allan", "a", "co" ], "sim": 0.85714287 }
-{ "DBLP": [ "ernest", "artiaga", "albert", "serra", "marisa", "gil" ], "CSX": [ "ernest", "artiaga", "albert", "serra", "marisa", "gil" ], "sim": 1.0 }
-{ "DBLP": [ "dit", "yan", "yeung", "hong", "chang", "guang", "dai" ], "CSX": [ "guang", "dai", "dit", "yan", "yeung", "hong", "chang" ], "sim": 1.0 }
-{ "DBLP": [ "benjamin", "schrauwen", "jan", "m", "van", "campenhout" ], "CSX": [ "benjamin", "schrauwen", "jan", "van", "campenhout" ], "sim": 0.8333333 }
-{ "DBLP": [ "christopher", "j", "c", "burges", "david", "j", "crisp" ], "CSX": [ "david", "j", "crisp", "christopher", "j", "c", "burges" ], "sim": 1.0 }
-{ "DBLP": [ "thomas", "röblitz", "frank", "mueller", "oliver", "bühn" ], "CSX": [ "thomas", "röblitz", "oliver", "bühn", "frank", "mueller" ], "sim": 1.0 }
-{ "DBLP": [ "cyril", "allauzen", "mehryar", "mohri", "ameet", "talwalkar" ], "CSX": [ "cyril", "allauzen", "mehryar", "mohri", "ameet", "talwalkar" ], "sim": 1.0 }
-{ "DBLP": [ "sauro", "menchetti", "fabrizio", "costa", "paolo", "frasconi" ], "CSX": [ "sauro", "menchetti", "fabrizio", "costa", "paolo", "frasconi" ], "sim": 1.0 }
-{ "DBLP": [ "vojislav", "kecman", "michael", "vogt", "te", "ming", "huang" ], "CSX": [ "vojislav", "kecman", "te", "ming", "huang", "michael", "vogt" ], "sim": 1.0 }
+{ "DBLP": [ "johannes", "aßfalg", "karsten", "m", "borgwardt", "hans", "peter", "kriegel" ], "CSX": [ "johannes", "aßfalg", "karsten", "m", "borgwardt", "hans", "peter", "kriegel" ], "sim": 1.0 }
+{ "DBLP": [ "john", "penix", "willem", "visser", "eric", "engstrom", "aaron", "larson", "nicholas", "weininger" ], "CSX": [ "john", "penix", "willem", "visser", "eric", "engstrom", "aaron", "larson", "nicholas", "weininger" ], "sim": 1.0 }
+{ "DBLP": [ "john", "penix", "willem", "visser", "eric", "engstrom", "aaron", "larson", "nicholas", "weininger" ], "CSX": [ "john", "penix", "willem", "visser", "seungjoon", "park", "eric", "engstrom", "aaron", "larson", "nicholas", "weininger" ], "sim": 0.8333333 }
+{ "DBLP": [ "johnny", "mariéthoz", "samy", "bengio" ], "CSX": [ "samy", "bengio", "johnny", "mariéthoz" ], "sim": 1.0 }
 { "DBLP": [ "joseph", "reisinger", "peter", "stone", "risto", "miikkulainen" ], "CSX": [ "joseph", "reisinger", "peter", "stone", "risto", "miikkulainen" ], "sim": 1.0 }
-{ "DBLP": [ "annalisa", "barla", "francesca", "odone", "alessandro", "verri" ], "CSX": [ "francesca", "odone", "annalisa", "barla", "alessandro", "verri" ], "sim": 1.0 }
-{ "DBLP": [ "paul", "e", "mckenney", "jack", "slingwine", "phil", "krueger" ], "CSX": [ "paul", "mckenney", "jack", "slingwine", "phil", "krueger" ], "sim": 0.85714287 }
-{ "DBLP": [ "florent", "lafarge", "xavier", "descombes", "josiane", "zerubia" ], "CSX": [ "florent", "lafarge", "xavier", "descombes", "josiane", "zerubia" ], "sim": 1.0 }
+{ "DBLP": [ "karsten", "m", "borgwardt", "cheng", "soon", "ong", "stefan", "schönauer", "s", "v", "n", "vishwanathan", "alexander", "j", "smola", "hans", "peter", "kriegel" ], "CSX": [ "karsten", "m", "borgwardt", "cheng", "soon", "ong", "stefan", "schönauer", "s", "v", "n", "vishwanathan", "alex", "j", "smola", "hans", "peter", "kriegel" ], "sim": 0.8947368 }
+{ "DBLP": [ "keith", "sullivan", "sean", "luke" ], "CSX": [ "keith", "sullivan", "sean", "luke" ], "sim": 1.0 }
+{ "DBLP": [ "keith", "sullivan", "sean", "luke" ], "CSX": [ "sean", "luke", "keith", "sullivan" ], "sim": 1.0 }
+{ "DBLP": [ "kenji", "hisazumi", "tsuneo", "nakanishi", "teruaki", "kitasuka", "akira", "fukuda" ], "CSX": [ "kenji", "hisazumi", "teruaki", "kitasuka", "tsuneo", "nakanishi", "akira", "fukuda" ], "sim": 1.0 }
+{ "DBLP": [ "khawar", "m", "zuberi", "padmanabhan", "pillai", "kang", "g", "shin" ], "CSX": [ "khawar", "m", "zuberi", "y", "padmanabhan", "pillai", "kang", "g", "shin" ], "sim": 0.8888889 }
+{ "DBLP": [ "majid", "beigi", "andreas", "zell" ], "CSX": [ "majid", "m", "beigi", "andreas", "zell" ], "sim": 0.8 }
+{ "DBLP": [ "maria", "florina", "balcan", "avrim", "blum", "santosh", "vempala" ], "CSX": [ "maria", "florina", "balcan", "avrim", "blum", "santosh", "vempala" ], "sim": 1.0 }
+{ "DBLP": [ "mark", "baker", "hong", "ong" ], "CSX": [ "mark", "baker", "hong", "ong" ], "sim": 1.0 }
+{ "DBLP": [ "matthew", "brand" ], "CSX": [ "matthew", "brand" ], "sim": 1.0 }
+{ "DBLP": [ "matthew", "burnside", "angelos", "d", "keromytis" ], "CSX": [ "matthew", "burnside", "angelos", "d", "keromytis" ], "sim": 1.0 }
 { "DBLP": [ "matthias", "daum", "jan", "dörrenbächer", "sebastian", "bogan" ], "CSX": [ "matthias", "daum", "jan", "dörrenbächer", "sebastian", "bogan" ], "sim": 1.0 }
-{ "DBLP": [ "yoshisato", "yanagisawa", "kenichi", "kourai", "shigeru", "chiba" ], "CSX": [ "yoshisato", "yanagisawa", "shigeru", "chiba", "kenichi", "kourai" ], "sim": 1.0 }
-{ "DBLP": [ "christian", "poellabauer", "karsten", "schwan", "richard", "west" ], "CSX": [ "richard", "west", "karsten", "schwan", "christian", "poellabauer" ], "sim": 1.0 }
-{ "DBLP": [ "christian", "poellabauer", "karsten", "schwan", "richard", "west" ], "CSX": [ "christian", "poellabauer", "karsten", "schwan", "richard", "west" ], "sim": 1.0 }
+{ "DBLP": [ "michael", "engel", "bernd", "freisleben" ], "CSX": [ "michael", "engel", "bernd", "freisleben" ], "sim": 1.0 }
 { "DBLP": [ "michael", "hohmuth", "hendrik", "tews", "shane", "g", "stephens" ], "CSX": [ "michael", "hohmuth", "hendrik", "tews", "shane", "g", "stephens" ], "sim": 1.0 }
+{ "DBLP": [ "michel", "gien" ], "CSX": [ "michel", "gien" ], "sim": 1.0 }
+{ "DBLP": [ "michel", "neuhaus", "horst", "bunke" ], "CSX": [ "michel", "neuhaus", "horst", "bunke" ], "sim": 1.0 }
+{ "DBLP": [ "min", "xu", "xuxian", "jiang", "ravi", "s", "sandhu", "xinwen", "zhang" ], "CSX": [ "min", "xu", "ravi", "sandhu", "xuxian", "jiang", "xinwen", "zhang" ], "sim": 0.8888889 }
+{ "DBLP": [ "moonsang", "kwon", "yookun", "cho" ], "CSX": [ "moonsang", "kwon", "yookun", "cho" ], "sim": 1.0 }
+{ "DBLP": [ "nail", "akar", "khosrow", "sohraby" ], "CSX": [ "nail", "akar", "khosrow", "sohraby" ], "sim": 1.0 }
+{ "DBLP": [ "paul", "e", "mckenney", "jack", "slingwine", "phil", "krueger" ], "CSX": [ "paul", "mckenney", "jack", "slingwine", "phil", "krueger" ], "sim": 0.85714287 }
+{ "DBLP": [ "pavel", "p", "kuksa", "pai", "hsi", "huang", "vladimir", "pavlovic" ], "CSX": [ "pavel", "p", "kuksa", "pai", "hsi", "huang", "vladimir", "pavlovic" ], "sim": 1.0 }
+{ "DBLP": [ "peter", "druschel" ], "CSX": [ "peter", "druschel" ], "sim": 1.0 }
+{ "DBLP": [ "qun", "dai", "songcan", "chen" ], "CSX": [ "qun", "dai", "songcan", "chen" ], "sim": 1.0 }
+{ "DBLP": [ "r", "venkatesh", "babu", "patrick", "pérez", "patrick", "bouthemy" ], "CSX": [ "r", "venkatesh", "babu", "patrick", "pérez", "patrick", "bouthemy" ], "sim": 1.0 }
+{ "DBLP": [ "rafael", "serrano", "gotarredona", "teresa", "serrano", "gotarredona", "antonio", "acosta", "jimenez", "bernabé", "linares", "barranco" ], "CSX": [ "rafael", "serrano", "gotarredona", "teresa", "serrano", "gotarredona", "antonio", "acosta", "jiménez", "bernabé", "linares", "barranco" ], "sim": 0.84615386 }
+{ "DBLP": [ "robert", "jenssen", "torbjørn", "eltoft" ], "CSX": [ "robert", "jenssen", "torbjørn", "eltoft" ], "sim": 1.0 }
+{ "DBLP": [ "roland", "opfer" ], "CSX": [ "roland", "opfer" ], "sim": 1.0 }
+{ "DBLP": [ "ronald", "minnich", "matthew", "j", "sottile", "sung", "eun", "choi", "erik", "a", "hendriks", "jim", "mckie" ], "CSX": [ "ronald", "g", "minnich", "matthew", "j", "sottile", "sung", "eun", "choi", "erik", "hendriks", "jim", "mckie" ], "sim": 0.85714287 }
+{ "DBLP": [ "samuel", "g", "steckley", "shane", "g", "henderson" ], "CSX": [ "samuel", "g", "steckley", "shane", "g", "henderson" ], "sim": 1.0 }
+{ "DBLP": [ "sauro", "menchetti", "fabrizio", "costa", "paolo", "frasconi" ], "CSX": [ "sauro", "menchetti", "fabrizio", "costa", "paolo", "frasconi" ], "sim": 1.0 }
+{ "DBLP": [ "seung", "jean", "kim", "alessandro", "magnani", "stephen", "p", "boyd" ], "CSX": [ "seung", "jean", "kim", "alessandro", "magnani", "stephen", "boyd" ], "sim": 0.875 }
+{ "DBLP": [ "shiliang", "sun", "changshui", "zhang" ], "CSX": [ "shiliang", "sun", "changshui", "zhang" ], "sim": 1.0 }
+{ "DBLP": [ "shun", "ichi", "amari", "si", "wu" ], "CSX": [ "si", "wu", "shun", "ichi", "amari" ], "sim": 1.0 }
+{ "DBLP": [ "songcan", "chen", "daoqiang", "zhang" ], "CSX": [ "songcan", "chen", "daoqiang", "zhang" ], "sim": 1.0 }
 { "DBLP": [ "steven", "c", "h", "hoi", "rong", "jin", "michael", "r", "lyu" ], "CSX": [ "steven", "c", "h", "hoi", "rong", "jin", "jianke", "zhu", "michael", "r", "lyu" ], "sim": 0.8181818 }
 { "DBLP": [ "subhransu", "maji", "alexander", "c", "berg", "jitendra", "malik" ], "CSX": [ "subhransu", "maji", "alexander", "c", "berg", "jitendra", "malik" ], "sim": 1.0 }
-{ "DBLP": [ "maria", "florina", "balcan", "avrim", "blum", "santosh", "vempala" ], "CSX": [ "maria", "florina", "balcan", "avrim", "blum", "santosh", "vempala" ], "sim": 1.0 }
-{ "DBLP": [ "r", "venkatesh", "babu", "patrick", "pérez", "patrick", "bouthemy" ], "CSX": [ "r", "venkatesh", "babu", "patrick", "pérez", "patrick", "bouthemy" ], "sim": 1.0 }
-{ "DBLP": [ "pavel", "p", "kuksa", "pai", "hsi", "huang", "vladimir", "pavlovic" ], "CSX": [ "pavel", "p", "kuksa", "pai", "hsi", "huang", "vladimir", "pavlovic" ], "sim": 1.0 }
+{ "DBLP": [ "tatsuo", "nakajima", "hideyuki", "tokuda" ], "CSX": [ "hideyuki", "tokuda", "tatsuo", "nakajima" ], "sim": 1.0 }
+{ "DBLP": [ "tatsuo", "nakajima", "hideyuki", "tokuda" ], "CSX": [ "tatsuo", "nakajima", "hideyuki", "tokuda" ], "sim": 1.0 }
+{ "DBLP": [ "thomas", "röblitz", "frank", "mueller", "oliver", "bühn" ], "CSX": [ "thomas", "röblitz", "oliver", "bühn", "frank", "mueller" ], "sim": 1.0 }
+{ "DBLP": [ "tony", "van", "gestel", "bart", "baesens", "johan", "a", "k", "suykens", "dirk", "van", "den", "poel", "dirk", "emma", "baestaens", "marleen", "willekens" ], "CSX": [ "en", "bedrijfskunde", "gent", "tony", "van", "gestel", "bart", "baesens", "johan", "a", "k", "suykens", "dirk", "van", "den", "poel", "dirk", "emma", "baestaens", "marleen", "willekens" ], "sim": 0.85714287 }
 { "DBLP": [ "vikas", "sindhwani", "s", "sathiya", "keerthi", "olivier", "chapelle" ], "CSX": [ "olivier", "chapelle", "s", "sathiya", "keerthi", "vikas", "sindhwani" ], "sim": 1.0 }
-{ "DBLP": [ "khawar", "m", "zuberi", "padmanabhan", "pillai", "kang", "g", "shin" ], "CSX": [ "khawar", "m", "zuberi", "y", "padmanabhan", "pillai", "kang", "g", "shin" ], "sim": 0.8888889 }
-{ "DBLP": [ "arvind", "seshadri", "mark", "luk", "ning", "qu", "adrian", "perrig" ], "CSX": [ "arvind", "seshadri", "mark", "luk", "ning", "qu", "adrian", "perrig" ], "sim": 1.0 }
-{ "DBLP": [ "francis", "r", "bach", "romain", "thibaux", "michael", "i", "jordan" ], "CSX": [ "francis", "r", "bach", "romain", "thibaux", "michael", "i", "jordan" ], "sim": 1.0 }
-{ "DBLP": [ "arindam", "choudhury", "prasanth", "b", "nair", "andy", "j", "keane" ], "CSX": [ "prasanth", "b", "nair", "arindam", "choudhury", "andy", "j", "keane" ], "sim": 1.0 }
-{ "DBLP": [ "seung", "jean", "kim", "alessandro", "magnani", "stephen", "p", "boyd" ], "CSX": [ "seung", "jean", "kim", "alessandro", "magnani", "stephen", "boyd" ], "sim": 0.875 }
-{ "DBLP": [ "darrin", "p", "lewis", "tony", "jebara", "william", "stafford", "noble" ], "CSX": [ "darrin", "p", "lewis", "tony", "jebara", "william", "stafford", "noble" ], "sim": 1.0 }
-{ "DBLP": [ "min", "xu", "xuxian", "jiang", "ravi", "s", "sandhu", "xinwen", "zhang" ], "CSX": [ "min", "xu", "ravi", "sandhu", "xuxian", "jiang", "xinwen", "zhang" ], "sim": 0.8888889 }
+{ "DBLP": [ "vojislav", "kecman", "michael", "vogt", "te", "ming", "huang" ], "CSX": [ "vojislav", "kecman", "te", "ming", "huang", "michael", "vogt" ], "sim": 1.0 }
+{ "DBLP": [ "volker", "roth", "bernd", "fischer" ], "CSX": [ "volker", "roth", "bernd", "fischer" ], "sim": 1.0 }
+{ "DBLP": [ "w", "chen" ], "CSX": [ "w", "chen" ], "sim": 1.0 }
+{ "DBLP": [ "wim", "van", "de", "velde", "johan", "opsommer", "erik", "h", "d", "hollander" ], "CSX": [ "wim", "van", "de", "velde", "johan", "opsommer", "erik", "h", "d", "hollander" ], "sim": 1.0 }
+{ "DBLP": [ "xuanlong", "nguyen", "martin", "j", "wainwright", "michael", "i", "jordan" ], "CSX": [ "experimental", "design", "xuanlong", "nguyen", "martin", "j", "wainwright", "michael", "i", "jordan" ], "sim": 0.8 }
 { "DBLP": [ "xuanlong", "nguyen", "martin", "j", "wainwright", "michael", "i", "jordan" ], "CSX": [ "xuanlong", "nguyen", "martin", "j", "wainwright", "michael", "i", "jordan" ], "sim": 1.0 }
 { "DBLP": [ "xuanlong", "nguyen", "martin", "j", "wainwright", "michael", "i", "jordan" ], "CSX": [ "xuanlong", "nguyen", "xuanlong", "martin", "j", "wainwright", "michael", "i", "jordan" ], "sim": 0.8888889 }
-{ "DBLP": [ "xuanlong", "nguyen", "martin", "j", "wainwright", "michael", "i", "jordan" ], "CSX": [ "experimental", "design", "xuanlong", "nguyen", "martin", "j", "wainwright", "michael", "i", "jordan" ], "sim": 0.8 }
-{ "DBLP": [ "chunhua", "shen", "anton", "van", "den", "hengel", "michael", "j", "brooks" ], "CSX": [ "chunhua", "shen", "michael", "j", "brooks", "anton", "van", "den", "hengel" ], "sim": 1.0 }
-{ "DBLP": [ "chunhua", "shen", "anton", "van", "den", "hengel", "michael", "j", "brooks" ], "CSX": [ "chunhua", "shen", "anton", "van", "den", "hengel", "anthony", "dick", "michael", "j", "brooks" ], "sim": 0.8181818 }
-{ "DBLP": [ "johannes", "aßfalg", "karsten", "m", "borgwardt", "hans", "peter", "kriegel" ], "CSX": [ "johannes", "aßfalg", "karsten", "m", "borgwardt", "hans", "peter", "kriegel" ], "sim": 1.0 }
-{ "DBLP": [ "cheng", "soon", "ong", "alexander", "j", "smola", "robert", "c", "williamson" ], "CSX": [ "cheng", "soon", "ong", "er", "j", "smola", "robert", "c", "williamson" ], "sim": 0.8 }
-{ "DBLP": [ "cheng", "soon", "ong", "alexander", "j", "smola", "robert", "c", "williamson" ], "CSX": [ "cheng", "soon", "ong", "alexander", "j", "smola", "robert", "c", "williamson" ], "sim": 1.0 }
-{ "DBLP": [ "wim", "van", "de", "velde", "johan", "opsommer", "erik", "h", "d", "hollander" ], "CSX": [ "wim", "van", "de", "velde", "johan", "opsommer", "erik", "h", "d", "hollander" ], "sim": 1.0 }
-{ "DBLP": [ "francis", "r", "bach", "gert", "r", "g", "lanckriet", "michael", "i", "jordan" ], "CSX": [ "francis", "r", "bach", "gert", "r", "g", "lanckriet", "michael", "i", "jordan" ], "sim": 1.0 }
-{ "DBLP": [ "faisal", "n", "abu", "khzam", "michael", "a", "langston", "w", "henry", "suters" ], "CSX": [ "faisal", "n", "abu", "khzam", "michael", "a", "langston", "w", "henry", "suters" ], "sim": 1.0 }
-{ "DBLP": [ "kenji", "hisazumi", "tsuneo", "nakanishi", "teruaki", "kitasuka", "akira", "fukuda" ], "CSX": [ "kenji", "hisazumi", "teruaki", "kitasuka", "tsuneo", "nakanishi", "akira", "fukuda" ], "sim": 1.0 }
-{ "DBLP": [ "erik", "h", "w", "meijering", "karel", "j", "zuiderveld", "max", "a", "viergever" ], "CSX": [ "erik", "h", "w", "meijering", "karel", "j", "zuiderveld", "max", "a", "viergever" ], "sim": 1.0 }
 { "DBLP": [ "yoav", "etsion", "dan", "tsafrir", "scott", "kirkpatrick", "dror", "g", "feitelson" ], "CSX": [ "dan", "tsafrir", "yoav", "etsion", "dror", "g", "feitelson", "scott", "kirkpatrick" ], "sim": 1.0 }
-{ "DBLP": [ "holger", "fröhlich", "jörg", "k", "wegner", "florian", "sieker", "andreas", "zell" ], "CSX": [ "holger", "fröhlich", "jörg", "k", "wegner", "florian", "sieker", "andreas", "zell" ], "sim": 1.0 }
-{ "DBLP": [ "hyun", "wook", "jin", "sayantan", "sur", "lei", "chai", "dhabaleswar", "k", "panda" ], "CSX": [ "sayantan", "sur", "lei", "chai", "hyun", "wook", "jin", "dhabaleswar", "k", "panda", "sun", "microsystems" ], "sim": 0.8333333 }
-{ "DBLP": [ "hyun", "wook", "jin", "sayantan", "sur", "lei", "chai", "dhabaleswar", "k", "panda" ], "CSX": [ "sayantan", "sur", "hyun", "wook", "jin", "dhabaleswar", "k", "panda" ], "sim": 0.8 }
-{ "DBLP": [ "cheng", "soon", "ong", "xavier", "mary", "stéphane", "canu", "alexander", "j", "smola" ], "CSX": [ "cheng", "soon", "ong", "stéphane", "canu", "alexander", "j", "smola" ], "sim": 0.8 }
-{ "DBLP": [ "brian", "kulis", "sugato", "basu", "inderjit", "s", "dhillon", "raymond", "j", "mooney" ], "CSX": [ "brian", "kulis", "sugato", "basu", "inderjit", "dhillon", "raymond", "mooney" ], "sim": 0.8 }
-{ "DBLP": [ "andreas", "argyriou", "raphael", "hauser", "charles", "a", "micchelli", "massimiliano", "pontil" ], "CSX": [ "andreas", "argyriou", "raphael", "hauser", "charles", "a", "micchelli", "massimiliano", "pontil" ], "sim": 1.0 }
-{ "DBLP": [ "john", "penix", "willem", "visser", "eric", "engstrom", "aaron", "larson", "nicholas", "weininger" ], "CSX": [ "john", "penix", "willem", "visser", "seungjoon", "park", "eric", "engstrom", "aaron", "larson", "nicholas", "weininger" ], "sim": 0.8333333 }
-{ "DBLP": [ "john", "penix", "willem", "visser", "eric", "engstrom", "aaron", "larson", "nicholas", "weininger" ], "CSX": [ "john", "penix", "willem", "visser", "eric", "engstrom", "aaron", "larson", "nicholas", "weininger" ], "sim": 1.0 }
+{ "DBLP": [ "yoshisato", "yanagisawa", "kenichi", "kourai", "shigeru", "chiba" ], "CSX": [ "yoshisato", "yanagisawa", "shigeru", "chiba", "kenichi", "kourai" ], "sim": 1.0 }
+{ "DBLP": [ "yu", "chieh", "wu", "chia", "hui", "chang" ], "CSX": [ "chia", "hui", "chang", "yu", "chieh", "wu" ], "sim": 1.0 }
+{ "DBLP": [ "zhe", "wang", "songcan", "chen" ], "CSX": [ "zhe", "wang", "songcan", "chen" ], "sim": 1.0 }
+{ "DBLP": [ "zheng", "rong", "yang" ], "CSX": [ "zheng", "rong", "yang" ], "sim": 1.0 }
+{ "DBLP": [ "zhiqian", "wang", "jezekiel", "ben", "arie" ], "CSX": [ "jezekiel", "ben", "arie", "zhiqian", "wang" ], "sim": 1.0 }
+{ "DBLP": [ "zhiqian", "wang", "jezekiel", "ben", "arie" ], "CSX": [ "jezekiel", "ben", "arie", "zhiqian", "wang" ], "sim": 1.0 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/sorting/arrays/arrays.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/sorting/arrays/arrays.3.adm
new file mode 100644
index 0000000..3cb68d9
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/sorting/arrays/arrays.3.adm
@@ -0,0 +1,21 @@
+{ "id": 17, "name": "Jim" }
+{ "id": 19, "name": "Mart" }
+{ "id": 11, "name": "Nicholas", "dept_ids": null }
+{ "id": 15, "name": "Jim", "dept_ids": null }
+{ "id": 4, "name": "Nicholas", "dept_ids": [  ] }
+{ "id": 10, "name": "Bram", "dept_ids": [  ] }
+{ "id": 6, "name": "Willis", "dept_ids": [ 1, 5, 6 ] }
+{ "id": 20, "name": "Mai", "dept_ids": [ 1, 5, 9 ] }
+{ "id": 12, "name": "John", "dept_ids": [ 2 ] }
+{ "id": 1, "name": "Margarita", "dept_ids": [ 3, 2, 8 ] }
+{ "id": 9, "name": "Woodrow", "dept_ids": [ 3, 2, 8 ] }
+{ "id": 21, "name": "Ken", "dept_ids": [ 3, 5, 8 ] }
+{ "id": 5, "name": "Von", "dept_ids": [ 4 ] }
+{ "id": 14, "name": "Jay", "dept_ids": [ 4 ] }
+{ "id": 13, "name": "Steve", "dept_ids": [ 8, 2 ] }
+{ "id": 18, "name": "Kayle", "dept_ids": [ 8, 2, 1, 7, 9 ] }
+{ "id": 7, "name": "Suzanna", "dept_ids": [ 9, 5, 2 ] }
+{ "id": 16, "name": "Wail", "dept_ids": [ 9, 5, 2 ] }
+{ "id": 3, "name": "Emory", "dept_ids": [ 33, 11, 3, 16 ] }
+{ "id": 8, "name": "Nicole", "dept_ids": [ 33, 11, 3, 16 ] }
+{ "id": 2, "name": "Isac", "dept_ids": [ 99, 12, 14, 15, 77 ] }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/sorting/arrays/arrays.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/sorting/arrays/arrays.4.adm
new file mode 100644
index 0000000..3cb68d9
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/sorting/arrays/arrays.4.adm
@@ -0,0 +1,21 @@
+{ "id": 17, "name": "Jim" }
+{ "id": 19, "name": "Mart" }
+{ "id": 11, "name": "Nicholas", "dept_ids": null }
+{ "id": 15, "name": "Jim", "dept_ids": null }
+{ "id": 4, "name": "Nicholas", "dept_ids": [  ] }
+{ "id": 10, "name": "Bram", "dept_ids": [  ] }
+{ "id": 6, "name": "Willis", "dept_ids": [ 1, 5, 6 ] }
+{ "id": 20, "name": "Mai", "dept_ids": [ 1, 5, 9 ] }
+{ "id": 12, "name": "John", "dept_ids": [ 2 ] }
+{ "id": 1, "name": "Margarita", "dept_ids": [ 3, 2, 8 ] }
+{ "id": 9, "name": "Woodrow", "dept_ids": [ 3, 2, 8 ] }
+{ "id": 21, "name": "Ken", "dept_ids": [ 3, 5, 8 ] }
+{ "id": 5, "name": "Von", "dept_ids": [ 4 ] }
+{ "id": 14, "name": "Jay", "dept_ids": [ 4 ] }
+{ "id": 13, "name": "Steve", "dept_ids": [ 8, 2 ] }
+{ "id": 18, "name": "Kayle", "dept_ids": [ 8, 2, 1, 7, 9 ] }
+{ "id": 7, "name": "Suzanna", "dept_ids": [ 9, 5, 2 ] }
+{ "id": 16, "name": "Wail", "dept_ids": [ 9, 5, 2 ] }
+{ "id": 3, "name": "Emory", "dept_ids": [ 33, 11, 3, 16 ] }
+{ "id": 8, "name": "Nicole", "dept_ids": [ 33, 11, 3, 16 ] }
+{ "id": 2, "name": "Isac", "dept_ids": [ 99, 12, 14, 15, 77 ] }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/sorting/arrays/arrays.5.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/sorting/arrays/arrays.5.adm
new file mode 100644
index 0000000..efdea4b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/sorting/arrays/arrays.5.adm
@@ -0,0 +1,21 @@
+{ "id": 2, "name": "Isac", "dept_ids": [ 99, 12, 14, 15, 77 ] }
+{ "id": 3, "name": "Emory", "dept_ids": [ 33, 11, 3, 16 ] }
+{ "id": 8, "name": "Nicole", "dept_ids": [ 33, 11, 3, 16 ] }
+{ "id": 7, "name": "Suzanna", "dept_ids": [ 9, 5, 2 ] }
+{ "id": 16, "name": "Wail", "dept_ids": [ 9, 5, 2 ] }
+{ "id": 18, "name": "Kayle", "dept_ids": [ 8, 2, 1, 7, 9 ] }
+{ "id": 13, "name": "Steve", "dept_ids": [ 8, 2 ] }
+{ "id": 5, "name": "Von", "dept_ids": [ 4 ] }
+{ "id": 14, "name": "Jay", "dept_ids": [ 4 ] }
+{ "id": 21, "name": "Ken", "dept_ids": [ 3, 5, 8 ] }
+{ "id": 1, "name": "Margarita", "dept_ids": [ 3, 2, 8 ] }
+{ "id": 9, "name": "Woodrow", "dept_ids": [ 3, 2, 8 ] }
+{ "id": 12, "name": "John", "dept_ids": [ 2 ] }
+{ "id": 20, "name": "Mai", "dept_ids": [ 1, 5, 9 ] }
+{ "id": 6, "name": "Willis", "dept_ids": [ 1, 5, 6 ] }
+{ "id": 4, "name": "Nicholas", "dept_ids": [  ] }
+{ "id": 10, "name": "Bram", "dept_ids": [  ] }
+{ "id": 11, "name": "Nicholas", "dept_ids": null }
+{ "id": 15, "name": "Jim", "dept_ids": null }
+{ "id": 17, "name": "Jim" }
+{ "id": 19, "name": "Mart" }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/sorting/arrays/arrays.6.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/sorting/arrays/arrays.6.adm
new file mode 100644
index 0000000..efdea4b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/sorting/arrays/arrays.6.adm
@@ -0,0 +1,21 @@
+{ "id": 2, "name": "Isac", "dept_ids": [ 99, 12, 14, 15, 77 ] }
+{ "id": 3, "name": "Emory", "dept_ids": [ 33, 11, 3, 16 ] }
+{ "id": 8, "name": "Nicole", "dept_ids": [ 33, 11, 3, 16 ] }
+{ "id": 7, "name": "Suzanna", "dept_ids": [ 9, 5, 2 ] }
+{ "id": 16, "name": "Wail", "dept_ids": [ 9, 5, 2 ] }
+{ "id": 18, "name": "Kayle", "dept_ids": [ 8, 2, 1, 7, 9 ] }
+{ "id": 13, "name": "Steve", "dept_ids": [ 8, 2 ] }
+{ "id": 5, "name": "Von", "dept_ids": [ 4 ] }
+{ "id": 14, "name": "Jay", "dept_ids": [ 4 ] }
+{ "id": 21, "name": "Ken", "dept_ids": [ 3, 5, 8 ] }
+{ "id": 1, "name": "Margarita", "dept_ids": [ 3, 2, 8 ] }
+{ "id": 9, "name": "Woodrow", "dept_ids": [ 3, 2, 8 ] }
+{ "id": 12, "name": "John", "dept_ids": [ 2 ] }
+{ "id": 20, "name": "Mai", "dept_ids": [ 1, 5, 9 ] }
+{ "id": 6, "name": "Willis", "dept_ids": [ 1, 5, 6 ] }
+{ "id": 4, "name": "Nicholas", "dept_ids": [  ] }
+{ "id": 10, "name": "Bram", "dept_ids": [  ] }
+{ "id": 11, "name": "Nicholas", "dept_ids": null }
+{ "id": 15, "name": "Jim", "dept_ids": null }
+{ "id": 17, "name": "Jim" }
+{ "id": 19, "name": "Mart" }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
index c905e0c..959813b 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
@@ -115,6 +115,13 @@
       </compilation-unit>
     </test-case>
   </test-group>
+  <test-group name="sorting">
+    <test-case FilePath="sorting">
+      <compilation-unit name="arrays">
+        <output-dir compare="Text">arrays</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
   <test-group name="explain">
     <test-case FilePath="explain">
       <compilation-unit name="explain_simple">
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AGenericAscBinaryComparator.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AGenericAscBinaryComparator.java
index 1d20d72..f8c0285 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AGenericAscBinaryComparator.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AGenericAscBinaryComparator.java
@@ -18,302 +18,17 @@
  */
 package org.apache.asterix.dataflow.data.nontagged.comparators;
 
-import java.io.IOException;
-
-import org.apache.asterix.om.types.ATypeTag;
-import org.apache.asterix.om.types.EnumDeserializer;
 import org.apache.asterix.om.types.IAType;
-import org.apache.asterix.om.types.hierachy.ATypeHierarchy;
-import org.apache.asterix.om.types.hierachy.ITypeConvertComputer;
-import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
-import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
-import org.apache.hyracks.data.std.primitive.ByteArrayPointable;
-import org.apache.hyracks.data.std.primitive.BytePointable;
-import org.apache.hyracks.data.std.primitive.DoublePointable;
-import org.apache.hyracks.data.std.primitive.FloatPointable;
-import org.apache.hyracks.data.std.primitive.IntegerPointable;
-import org.apache.hyracks.data.std.primitive.ShortPointable;
-import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
-import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
 
-class AGenericAscBinaryComparator implements IBinaryComparator {
-
-    // BOOLEAN
-    private final IBinaryComparator ascBoolComp = BooleanBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    // TINYINT
-    private final IBinaryComparator ascByteComp =
-            new PointableBinaryComparatorFactory(BytePointable.FACTORY).createBinaryComparator();
-    // SMALLINT
-    private final IBinaryComparator ascShortComp =
-            new PointableBinaryComparatorFactory(ShortPointable.FACTORY).createBinaryComparator();
-    // INTEGER
-    private final IBinaryComparator ascIntComp =
-            new PointableBinaryComparatorFactory(IntegerPointable.FACTORY).createBinaryComparator();
-    // BIGINT
-    private final IBinaryComparator ascLongComp = LongBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    // STRING
-    private final IBinaryComparator ascStrComp =
-            new PointableBinaryComparatorFactory(UTF8StringPointable.FACTORY).createBinaryComparator();
-    // BINARY
-    private final IBinaryComparator ascByteArrayComp =
-            new PointableBinaryComparatorFactory(ByteArrayPointable.FACTORY).createBinaryComparator();
-    // FLOAT
-    private final IBinaryComparator ascFloatComp =
-            new PointableBinaryComparatorFactory(FloatPointable.FACTORY).createBinaryComparator();
-    // DOUBLE
-    private final IBinaryComparator ascDoubleComp =
-            new PointableBinaryComparatorFactory(DoublePointable.FACTORY).createBinaryComparator();
-    // RECTANGLE
-    private final IBinaryComparator ascRectangleComp =
-            ARectanglePartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    // CIRCLE
-    private final IBinaryComparator ascCircleComp =
-            ACirclePartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    // DURATION
-    private final IBinaryComparator ascDurationComp =
-            ADurationPartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    // INTERVAL
-    private final IBinaryComparator ascIntervalComp =
-            AIntervalAscPartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    // LINE
-    private final IBinaryComparator ascLineComp = ALinePartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    // POINT
-    private final IBinaryComparator ascPointComp =
-            APointPartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    // POINT3D
-    private final IBinaryComparator ascPoint3DComp =
-            APoint3DPartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    // POLYGON
-    private final IBinaryComparator ascPolygonComp =
-            APolygonPartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    // UUID
-    private final IBinaryComparator ascUUIDComp = AUUIDPartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-    // RAW
-    private final IBinaryComparator rawComp = RawBinaryComparatorFactory.INSTANCE.createBinaryComparator();
-
-    // a storage to promote a value
-    private final ArrayBackedValueStorage castBuffer;
-    private final IAType leftType;
-    private final IAType rightType;
+class AGenericAscBinaryComparator extends AbstractAGenericBinaryComparator {
 
     AGenericAscBinaryComparator(IAType leftType, IAType rightType) {
-        this.leftType = leftType;
-        this.rightType = rightType;
-        this.castBuffer = new ArrayBackedValueStorage();
+        super(leftType, rightType);
     }
 
     @Override
     public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) throws HyracksDataException {
-        // normally, comparing between MISSING and non-MISSING values should return MISSING as the result.
-        // however, this comparator is used by order-by/group-by/distinct-by.
-        // therefore, inside this method, we return an order between two values even if one value is MISSING.
-        if (b1[s1] == ATypeTag.SERIALIZED_MISSING_TYPE_TAG) {
-            return b2[s2] == ATypeTag.SERIALIZED_MISSING_TYPE_TAG ? 0 : -1;
-        } else {
-            if (b2[s2] == ATypeTag.SERIALIZED_MISSING_TYPE_TAG) {
-                return 1;
-            }
-        }
-
-        // normally, comparing between NULL and non-NULL/MISSING values should return NULL as the result.
-        // however, this comparator is used by order-by/group-by/distinct-by.
-        // therefore, inside this method, we return an order between two values even if one value is NULL.
-        if (b1[s1] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
-            return b2[s2] == ATypeTag.SERIALIZED_NULL_TYPE_TAG ? 0 : -1;
-        } else {
-            if (b2[s2] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
-                return 1;
-            }
-        }
-
-        ATypeTag tag1 = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(b1[s1]);
-        ATypeTag tag2 = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(b2[s2]);
-
-        // if one of tag is null, that means we are dealing with an empty byte array in one side.
-        // and, we don't need to continue. We just compare raw byte by byte.
-        if (tag1 == null || tag2 == null) {
-            return rawComp.compare(b1, s1, l1, b2, s2, l2);
-        }
-
-        // if two type does not match, we identify the source and the target and
-        // promote the source to the target type if they are compatible.
-        ATypeTag sourceTypeTag = null;
-        ATypeTag targetTypeTag = null;
-        boolean areTwoTagsEqual = false;
-        boolean typePromotionApplied = false;
-        boolean leftValueChanged = false;
-
-        if (tag1 != tag2) {
-            // tag1 can be promoted to tag2 (e.g. tag1: SMALLINT, tag2: INTEGER)
-            if (ATypeHierarchy.canPromote(tag1, tag2)) {
-                sourceTypeTag = tag1;
-                targetTypeTag = tag2;
-                typePromotionApplied = true;
-                leftValueChanged = true;
-                // or tag2 can be promoted to tag1 (e.g. tag2: INTEGER, tag1: DOUBLE)
-            } else if (ATypeHierarchy.canPromote(tag2, tag1)) {
-                sourceTypeTag = tag2;
-                targetTypeTag = tag1;
-                typePromotionApplied = true;
-            }
-
-            // we promote the source to the target by using a promoteComputer
-            if (typePromotionApplied) {
-                castBuffer.reset();
-                ITypeConvertComputer promoter = ATypeHierarchy.getTypePromoteComputer(sourceTypeTag, targetTypeTag);
-                if (promoter != null) {
-                    try {
-                        if (leftValueChanged) {
-                            // left side is the source
-                            promoter.convertType(b1, s1 + 1, l1 - 1, castBuffer.getDataOutput());
-                        } else {
-                            // right side is the source
-                            promoter.convertType(b2, s2 + 1, l2 - 1, castBuffer.getDataOutput());
-                        }
-                    } catch (IOException e) {
-                        throw new HyracksDataException("ComparatorFactory - failed to promote the type:" + sourceTypeTag
-                                + " to the type:" + targetTypeTag);
-                    }
-                } else {
-                    // No appropriate typePromoteComputer.
-                    throw new HyracksDataException("No appropriate typePromoteComputer exists for " + sourceTypeTag
-                            + " to the " + targetTypeTag + " type. Please check the code.");
-                }
-            }
-        } else {
-            // tag1 == tag2.
-            sourceTypeTag = tag1;
-            targetTypeTag = tag1;
-            areTwoTagsEqual = true;
-        }
-
-        // if two tags are not compatible, then we compare raw byte by byte, including the type tag.
-        // this is especially useful when we need to generate some order between any two types.
-        if ((!areTwoTagsEqual && !typePromotionApplied)) {
-            return rawComp.compare(b1, s1, l1, b2, s2, l2);
-        }
-
-        // conduct actual compare()
-        switch (targetTypeTag) {
-            case UUID:
-                return ascUUIDComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
-            case BOOLEAN: {
-                return ascBoolComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
-            }
-            case TINYINT: {
-                // No type promotion from another type to the TINYINT can happen
-                return ascByteComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
-            }
-            case SMALLINT: {
-                if (!typePromotionApplied) {
-                    // No type promotion case
-                    return ascShortComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
-                } else if (leftValueChanged) {
-                    // Type promotion happened. Left side was the source
-                    return ascShortComp.compare(castBuffer.getByteArray(), castBuffer.getStartOffset() + 1,
-                            castBuffer.getLength() - 1, b2, s2 + 1, l2 - 1);
-                } else {
-                    // Type promotion happened. Right side was the source
-                    return ascShortComp.compare(b1, s1 + 1, l1 - 1, castBuffer.getByteArray(),
-                            castBuffer.getStartOffset() + 1, castBuffer.getLength() - 1);
-                }
-            }
-            case TIME:
-            case DATE:
-            case YEARMONTHDURATION:
-            case INTEGER: {
-                if (!typePromotionApplied) {
-                    // No type promotion case
-                    return ascIntComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
-                } else if (leftValueChanged) {
-                    // Type promotion happened. Left side was the source
-                    return ascIntComp.compare(castBuffer.getByteArray(), castBuffer.getStartOffset() + 1,
-                            castBuffer.getLength() - 1, b2, s2 + 1, l2 - 1);
-                } else {
-                    // Type promotion happened. Right side was the source
-                    return ascIntComp.compare(b1, s1 + 1, l1 - 1, castBuffer.getByteArray(),
-                            castBuffer.getStartOffset() + 1, castBuffer.getLength() - 1);
-                }
-            }
-            case DATETIME:
-            case DAYTIMEDURATION:
-            case BIGINT: {
-                if (!typePromotionApplied) {
-                    // No type promotion case
-                    return ascLongComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
-                } else if (leftValueChanged) {
-                    // Type promotion happened. Left side was the source
-                    return ascLongComp.compare(castBuffer.getByteArray(), castBuffer.getStartOffset() + 1,
-                            castBuffer.getLength() - 1, b2, s2 + 1, l2 - 1);
-                } else {
-                    // Type promotion happened. Right side was the source
-                    return ascLongComp.compare(b1, s1 + 1, l1 - 1, castBuffer.getByteArray(),
-                            castBuffer.getStartOffset() + 1, castBuffer.getLength() - 1);
-                }
-            }
-            case FLOAT: {
-                if (!typePromotionApplied) {
-                    // No type promotion case
-                    return ascFloatComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
-                } else if (leftValueChanged) {
-                    // Type promotion happened. Left side was the source
-                    return ascFloatComp.compare(castBuffer.getByteArray(), castBuffer.getStartOffset() + 1,
-                            castBuffer.getLength() - 1, b2, s2 + 1, l2 - 1);
-                } else {
-                    // Type promotion happened. Right side was the source
-                    return ascFloatComp.compare(b1, s1 + 1, l1 - 1, castBuffer.getByteArray(),
-                            castBuffer.getStartOffset() + 1, castBuffer.getLength() - 1);
-                }
-            }
-            case DOUBLE: {
-                if (!typePromotionApplied) {
-                    // No type promotion case
-                    return ascDoubleComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
-                } else if (leftValueChanged) {
-                    // Type promotion happened. Left side was the source
-                    return ascDoubleComp.compare(castBuffer.getByteArray(), castBuffer.getStartOffset() + 1,
-                            castBuffer.getLength() - 1, b2, s2 + 1, l2 - 1);
-                } else {
-                    // Type promotion happened. Right side was the source
-                    return ascDoubleComp.compare(b1, s1 + 1, l1 - 1, castBuffer.getByteArray(),
-                            castBuffer.getStartOffset() + 1, castBuffer.getLength() - 1);
-                }
-            }
-            case STRING: {
-                return ascStrComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
-            }
-            case RECTANGLE: {
-                return ascRectangleComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
-            }
-            case CIRCLE: {
-                return ascCircleComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
-            }
-            case POINT: {
-                return ascPointComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
-            }
-            case POINT3D: {
-                return ascPoint3DComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
-            }
-            case LINE: {
-                return ascLineComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
-            }
-            case POLYGON: {
-                return ascPolygonComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
-            }
-            case DURATION: {
-                return ascDurationComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
-            }
-            case INTERVAL: {
-                return ascIntervalComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
-            }
-            case BINARY: {
-                return ascByteArrayComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
-            }
-            default: {
-                // we include typeTag in comparison to compare between two type to enforce some ordering
-                return rawComp.compare(b1, s1, l1, b2, s2, l2);
-            }
-        }
+        return compare(leftType, b1, s1, l1, rightType, b2, s2, l2);
     }
 }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AObjectDescBinaryComparatorFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AGenericAscBinaryComparatorFactory.java
similarity index 77%
copy from asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AObjectDescBinaryComparatorFactory.java
copy to asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AGenericAscBinaryComparatorFactory.java
index 2fc866a..fe80351 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AObjectDescBinaryComparatorFactory.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AGenericAscBinaryComparatorFactory.java
@@ -19,18 +19,24 @@
 package org.apache.asterix.dataflow.data.nontagged.comparators;
 
 import org.apache.asterix.om.types.IAType;
+import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.io.IJsonSerializable;
 import org.apache.hyracks.api.io.IPersistedResourceRegistry;
 
 import com.fasterxml.jackson.databind.JsonNode;
 
-public class AObjectDescBinaryComparatorFactory extends AObjectAscBinaryComparatorFactory {
+public class AGenericAscBinaryComparatorFactory extends AbstractAGenericBinaryComparatorFactory {
 
     private static final long serialVersionUID = 1L;
 
-    public AObjectDescBinaryComparatorFactory(IAType leftType, IAType rightType) {
-        super(leftType, rightType, false);
+    public AGenericAscBinaryComparatorFactory(IAType leftType, IAType rightType) {
+        super(leftType, rightType);
+    }
+
+    @Override
+    public IBinaryComparator createBinaryComparator() {
+        return new AGenericAscBinaryComparator(leftType, rightType);
     }
 
     @Override
@@ -40,6 +46,6 @@
 
     public static IJsonSerializable fromJson(IPersistedResourceRegistry registry, JsonNode json)
             throws HyracksDataException {
-        return convertToObject(registry, json, false);
+        return convertToObject(registry, json, true);
     }
 }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AGenericDescBinaryComparator.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AGenericDescBinaryComparator.java
index afe1349..031c239 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AGenericDescBinaryComparator.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AGenericDescBinaryComparator.java
@@ -18,13 +18,11 @@
  */
 package org.apache.asterix.dataflow.data.nontagged.comparators;
 
-import org.apache.asterix.om.types.ATypeTag;
-import org.apache.asterix.om.types.EnumDeserializer;
 import org.apache.asterix.om.types.IAType;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
-class AGenericDescBinaryComparator extends AGenericAscBinaryComparator {
+class AGenericDescBinaryComparator extends AbstractAGenericBinaryComparator {
 
     // interval asc and desc comparators are not the inverse of each other.
     // thus, we need to specify the interval desc comparator factory for descending comparisons.
@@ -37,11 +35,11 @@
 
     @Override
     public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) throws HyracksDataException {
-        ATypeTag tag1 = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(b1[s1]);
-        ATypeTag tag2 = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(b2[s2]);
-        if (tag1 == ATypeTag.INTERVAL && tag2 == ATypeTag.INTERVAL) {
-            return descIntervalComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
-        }
-        return -super.compare(b1, s1, l1, b2, s2, l2);
+        return -compare(leftType, b1, s1, l1, rightType, b2, s2, l2);
+    }
+
+    @Override
+    protected int compareInterval(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) throws HyracksDataException {
+        return -descIntervalComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
     }
 }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AObjectDescBinaryComparatorFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AGenericDescBinaryComparatorFactory.java
similarity index 78%
rename from asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AObjectDescBinaryComparatorFactory.java
rename to asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AGenericDescBinaryComparatorFactory.java
index 2fc866a..1c81589 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AObjectDescBinaryComparatorFactory.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AGenericDescBinaryComparatorFactory.java
@@ -19,18 +19,24 @@
 package org.apache.asterix.dataflow.data.nontagged.comparators;
 
 import org.apache.asterix.om.types.IAType;
+import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.io.IJsonSerializable;
 import org.apache.hyracks.api.io.IPersistedResourceRegistry;
 
 import com.fasterxml.jackson.databind.JsonNode;
 
-public class AObjectDescBinaryComparatorFactory extends AObjectAscBinaryComparatorFactory {
+public class AGenericDescBinaryComparatorFactory extends AbstractAGenericBinaryComparatorFactory {
 
     private static final long serialVersionUID = 1L;
 
-    public AObjectDescBinaryComparatorFactory(IAType leftType, IAType rightType) {
-        super(leftType, rightType, false);
+    public AGenericDescBinaryComparatorFactory(IAType leftType, IAType rightType) {
+        super(leftType, rightType);
+    }
+
+    @Override
+    public IBinaryComparator createBinaryComparator() {
+        return new AGenericDescBinaryComparator(leftType, rightType);
     }
 
     @Override
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AbstractAGenericBinaryComparator.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AbstractAGenericBinaryComparator.java
new file mode 100644
index 0000000..ce7d31a
--- /dev/null
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AbstractAGenericBinaryComparator.java
@@ -0,0 +1,381 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.dataflow.data.nontagged.comparators;
+
+import java.io.IOException;
+
+import org.apache.asterix.builders.AbvsBuilderFactory;
+import org.apache.asterix.dataflow.data.common.ListAccessorUtil;
+import org.apache.asterix.om.pointables.base.DefaultOpenFieldType;
+import org.apache.asterix.om.typecomputer.impl.TypeComputeUtils;
+import org.apache.asterix.om.types.ATypeTag;
+import org.apache.asterix.om.types.AbstractCollectionType;
+import org.apache.asterix.om.types.EnumDeserializer;
+import org.apache.asterix.om.types.IAType;
+import org.apache.asterix.om.types.hierachy.ATypeHierarchy;
+import org.apache.asterix.om.types.hierachy.ITypeConvertComputer;
+import org.apache.asterix.om.util.container.IObjectFactory;
+import org.apache.asterix.om.util.container.IObjectPool;
+import org.apache.asterix.om.util.container.ListObjectPool;
+import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
+import org.apache.hyracks.data.std.api.IMutableValueStorage;
+import org.apache.hyracks.data.std.api.IPointable;
+import org.apache.hyracks.data.std.primitive.ByteArrayPointable;
+import org.apache.hyracks.data.std.primitive.BytePointable;
+import org.apache.hyracks.data.std.primitive.DoublePointable;
+import org.apache.hyracks.data.std.primitive.FloatPointable;
+import org.apache.hyracks.data.std.primitive.IntegerPointable;
+import org.apache.hyracks.data.std.primitive.ShortPointable;
+import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
+import org.apache.hyracks.data.std.primitive.VoidPointable;
+import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
+
+abstract class AbstractAGenericBinaryComparator implements IBinaryComparator {
+
+    // BOOLEAN
+    private final IBinaryComparator ascBoolComp = BooleanBinaryComparatorFactory.INSTANCE.createBinaryComparator();
+    // TINYINT
+    private final IBinaryComparator ascByteComp =
+            new PointableBinaryComparatorFactory(BytePointable.FACTORY).createBinaryComparator();
+    // SMALLINT
+    private final IBinaryComparator ascShortComp =
+            new PointableBinaryComparatorFactory(ShortPointable.FACTORY).createBinaryComparator();
+    // INTEGER
+    private final IBinaryComparator ascIntComp =
+            new PointableBinaryComparatorFactory(IntegerPointable.FACTORY).createBinaryComparator();
+    // BIGINT
+    private final IBinaryComparator ascLongComp = LongBinaryComparatorFactory.INSTANCE.createBinaryComparator();
+    // STRING
+    private final IBinaryComparator ascStrComp =
+            new PointableBinaryComparatorFactory(UTF8StringPointable.FACTORY).createBinaryComparator();
+    // BINARY
+    private final IBinaryComparator ascByteArrayComp =
+            new PointableBinaryComparatorFactory(ByteArrayPointable.FACTORY).createBinaryComparator();
+    // FLOAT
+    private final IBinaryComparator ascFloatComp =
+            new PointableBinaryComparatorFactory(FloatPointable.FACTORY).createBinaryComparator();
+    // DOUBLE
+    private final IBinaryComparator ascDoubleComp =
+            new PointableBinaryComparatorFactory(DoublePointable.FACTORY).createBinaryComparator();
+    // RECTANGLE
+    private final IBinaryComparator ascRectangleComp =
+            ARectanglePartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
+    // CIRCLE
+    private final IBinaryComparator ascCircleComp =
+            ACirclePartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
+    // DURATION
+    private final IBinaryComparator ascDurationComp =
+            ADurationPartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
+    // INTERVAL
+    private final IBinaryComparator ascIntervalComp =
+            AIntervalAscPartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
+    // LINE
+    private final IBinaryComparator ascLineComp = ALinePartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
+    // POINT
+    private final IBinaryComparator ascPointComp =
+            APointPartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
+    // POINT3D
+    private final IBinaryComparator ascPoint3DComp =
+            APoint3DPartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
+    // POLYGON
+    private final IBinaryComparator ascPolygonComp =
+            APolygonPartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
+    // UUID
+    private final IBinaryComparator ascUUIDComp = AUUIDPartialBinaryComparatorFactory.INSTANCE.createBinaryComparator();
+    // RAW
+    private final IBinaryComparator rawComp = RawBinaryComparatorFactory.INSTANCE.createBinaryComparator();
+
+    // a storage to promote a value
+    private final ArrayBackedValueStorage castBuffer;
+
+    // TODO(ali): extract IObjectFactory factories into a separate unit and share
+    private static final IObjectFactory<IPointable, Void> VOID_FACTORY = (type) -> new VoidPointable();
+    private static final IObjectFactory<IMutableValueStorage, ATypeTag> STORAGE_FACTORY = new AbvsBuilderFactory();
+
+    // these fields can be null
+    protected final IAType leftType;
+    protected final IAType rightType;
+    private final IObjectPool<IMutableValueStorage, ATypeTag> storageAllocator;
+    private final IObjectPool<IPointable, Void> voidPointableAllocator;
+
+    AbstractAGenericBinaryComparator(IAType leftType, IAType rightType) {
+        // factory should have already made sure to get the actual type
+        this.leftType = leftType;
+        this.rightType = rightType;
+        this.castBuffer = new ArrayBackedValueStorage();
+        this.storageAllocator = new ListObjectPool<>(STORAGE_FACTORY);
+        this.voidPointableAllocator = new ListObjectPool<>(VOID_FACTORY);
+    }
+
+    protected int compare(IAType leftType, byte[] b1, int s1, int l1, IAType rightType, byte[] b2, int s2, int l2)
+            throws HyracksDataException {
+        // normally, comparing between MISSING and non-MISSING values should return MISSING as the result.
+        // however, this comparator is used by order-by/group-by/distinct-by.
+        // therefore, inside this method, we return an order between two values even if one value is MISSING.
+        if (b1[s1] == ATypeTag.SERIALIZED_MISSING_TYPE_TAG) {
+            return b2[s2] == ATypeTag.SERIALIZED_MISSING_TYPE_TAG ? 0 : -1;
+        } else {
+            if (b2[s2] == ATypeTag.SERIALIZED_MISSING_TYPE_TAG) {
+                return 1;
+            }
+        }
+
+        // normally, comparing between NULL and non-NULL/MISSING values should return NULL as the result.
+        // however, this comparator is used by order-by/group-by/distinct-by.
+        // therefore, inside this method, we return an order between two values even if one value is NULL.
+        if (b1[s1] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
+            return b2[s2] == ATypeTag.SERIALIZED_NULL_TYPE_TAG ? 0 : -1;
+        } else {
+            if (b2[s2] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
+                return 1;
+            }
+        }
+
+        ATypeTag tag1 = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(b1[s1]);
+        ATypeTag tag2 = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(b2[s2]);
+
+        // if one of tag is null, that means we are dealing with an empty byte array in one side.
+        // and, we don't need to continue. We just compare raw byte by byte.
+        if (tag1 == null || tag2 == null) {
+            return rawComp.compare(b1, s1, l1, b2, s2, l2);
+        }
+
+        // if two type does not match, we identify the source and the target and
+        // promote the source to the target type if they are compatible.
+        ATypeTag sourceTypeTag = null;
+        ATypeTag targetTypeTag = null;
+        boolean areTwoTagsEqual = false;
+        boolean typePromotionApplied = false;
+        boolean leftValueChanged = false;
+
+        if (tag1 != tag2) {
+            // tag1 can be promoted to tag2 (e.g. tag1: SMALLINT, tag2: INTEGER)
+            if (ATypeHierarchy.canPromote(tag1, tag2)) {
+                sourceTypeTag = tag1;
+                targetTypeTag = tag2;
+                typePromotionApplied = true;
+                leftValueChanged = true;
+                // or tag2 can be promoted to tag1 (e.g. tag2: INTEGER, tag1: DOUBLE)
+            } else if (ATypeHierarchy.canPromote(tag2, tag1)) {
+                sourceTypeTag = tag2;
+                targetTypeTag = tag1;
+                typePromotionApplied = true;
+            }
+
+            // we promote the source to the target by using a promoteComputer
+            if (typePromotionApplied) {
+                castBuffer.reset();
+                ITypeConvertComputer promoter = ATypeHierarchy.getTypePromoteComputer(sourceTypeTag, targetTypeTag);
+                if (promoter != null) {
+                    try {
+                        if (leftValueChanged) {
+                            // left side is the source
+                            promoter.convertType(b1, s1 + 1, l1 - 1, castBuffer.getDataOutput());
+                        } else {
+                            // right side is the source
+                            promoter.convertType(b2, s2 + 1, l2 - 1, castBuffer.getDataOutput());
+                        }
+                    } catch (IOException e) {
+                        throw new HyracksDataException("ComparatorFactory - failed to promote the type:" + sourceTypeTag
+                                + " to the type:" + targetTypeTag);
+                    }
+                } else {
+                    // No appropriate typePromoteComputer.
+                    throw new HyracksDataException("No appropriate typePromoteComputer exists for " + sourceTypeTag
+                            + " to the " + targetTypeTag + " type. Please check the code.");
+                }
+            }
+        } else {
+            // tag1 == tag2.
+            sourceTypeTag = tag1;
+            targetTypeTag = tag1;
+            areTwoTagsEqual = true;
+        }
+
+        // if two tags are not compatible, then we compare raw byte by byte, including the type tag.
+        // this is especially useful when we need to generate some order between any two types.
+        if ((!areTwoTagsEqual && !typePromotionApplied)) {
+            return rawComp.compare(b1, s1, l1, b2, s2, l2);
+        }
+
+        // conduct actual compare()
+        switch (targetTypeTag) {
+            case UUID:
+                return ascUUIDComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+            case BOOLEAN:
+                return ascBoolComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+            case TINYINT:
+                // No type promotion from another type to the TINYINT can happen
+                return ascByteComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+            case SMALLINT: {
+                if (!typePromotionApplied) {
+                    // No type promotion case
+                    return ascShortComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+                } else if (leftValueChanged) {
+                    // Type promotion happened. Left side was the source
+                    return ascShortComp.compare(castBuffer.getByteArray(), castBuffer.getStartOffset() + 1,
+                            castBuffer.getLength() - 1, b2, s2 + 1, l2 - 1);
+                } else {
+                    // Type promotion happened. Right side was the source
+                    return ascShortComp.compare(b1, s1 + 1, l1 - 1, castBuffer.getByteArray(),
+                            castBuffer.getStartOffset() + 1, castBuffer.getLength() - 1);
+                }
+            }
+            case TIME:
+            case DATE:
+            case YEARMONTHDURATION:
+            case INTEGER: {
+                if (!typePromotionApplied) {
+                    // No type promotion case
+                    return ascIntComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+                } else if (leftValueChanged) {
+                    // Type promotion happened. Left side was the source
+                    return ascIntComp.compare(castBuffer.getByteArray(), castBuffer.getStartOffset() + 1,
+                            castBuffer.getLength() - 1, b2, s2 + 1, l2 - 1);
+                } else {
+                    // Type promotion happened. Right side was the source
+                    return ascIntComp.compare(b1, s1 + 1, l1 - 1, castBuffer.getByteArray(),
+                            castBuffer.getStartOffset() + 1, castBuffer.getLength() - 1);
+                }
+            }
+            case DATETIME:
+            case DAYTIMEDURATION:
+            case BIGINT: {
+                if (!typePromotionApplied) {
+                    // No type promotion case
+                    return ascLongComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+                } else if (leftValueChanged) {
+                    // Type promotion happened. Left side was the source
+                    return ascLongComp.compare(castBuffer.getByteArray(), castBuffer.getStartOffset() + 1,
+                            castBuffer.getLength() - 1, b2, s2 + 1, l2 - 1);
+                } else {
+                    // Type promotion happened. Right side was the source
+                    return ascLongComp.compare(b1, s1 + 1, l1 - 1, castBuffer.getByteArray(),
+                            castBuffer.getStartOffset() + 1, castBuffer.getLength() - 1);
+                }
+            }
+            case FLOAT: {
+                if (!typePromotionApplied) {
+                    // No type promotion case
+                    return ascFloatComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+                } else if (leftValueChanged) {
+                    // Type promotion happened. Left side was the source
+                    return ascFloatComp.compare(castBuffer.getByteArray(), castBuffer.getStartOffset() + 1,
+                            castBuffer.getLength() - 1, b2, s2 + 1, l2 - 1);
+                } else {
+                    // Type promotion happened. Right side was the source
+                    return ascFloatComp.compare(b1, s1 + 1, l1 - 1, castBuffer.getByteArray(),
+                            castBuffer.getStartOffset() + 1, castBuffer.getLength() - 1);
+                }
+            }
+            case DOUBLE: {
+                if (!typePromotionApplied) {
+                    // No type promotion case
+                    return ascDoubleComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+                } else if (leftValueChanged) {
+                    // Type promotion happened. Left side was the source
+                    return ascDoubleComp.compare(castBuffer.getByteArray(), castBuffer.getStartOffset() + 1,
+                            castBuffer.getLength() - 1, b2, s2 + 1, l2 - 1);
+                } else {
+                    // Type promotion happened. Right side was the source
+                    return ascDoubleComp.compare(b1, s1 + 1, l1 - 1, castBuffer.getByteArray(),
+                            castBuffer.getStartOffset() + 1, castBuffer.getLength() - 1);
+                }
+            }
+            case STRING:
+                return ascStrComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+            case RECTANGLE:
+                return ascRectangleComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+            case CIRCLE:
+                return ascCircleComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+            case POINT:
+                return ascPointComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+            case POINT3D:
+                return ascPoint3DComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+            case LINE:
+                return ascLineComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+            case POLYGON:
+                return ascPolygonComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+            case DURATION:
+                return ascDurationComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+            case INTERVAL:
+                return compareInterval(b1, s1, l1, b2, s2, l2);
+            case BINARY:
+                return ascByteArrayComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+            case ARRAY:
+                return compareArrays(leftType, b1, s1, l1, rightType, b2, s2, l2);
+            default:
+                // we include typeTag in comparison to compare between two type to enforce some ordering
+                return rawComp.compare(b1, s1, l1, b2, s2, l2);
+        }
+    }
+
+    protected int compareInterval(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) throws HyracksDataException {
+        return ascIntervalComp.compare(b1, s1 + 1, l1 - 1, b2, s2 + 1, l2 - 1);
+    }
+
+    private int compareArrays(IAType leftType, byte[] b1, int s1, int l1, IAType rightType, byte[] b2, int s2, int l2)
+            throws HyracksDataException {
+        if (leftType == null || rightType == null) {
+            return rawComp.compare(b1, s1, l1, b2, s2, l2);
+        }
+        int leftNumItems = ListAccessorUtil.numberOfItems(b1, s1);
+        int rightNumItems = ListAccessorUtil.numberOfItems(b2, s2);
+        IAType leftArrayType = TypeComputeUtils.getActualType(leftType);
+        if (leftArrayType.getTypeTag() == ATypeTag.ANY) {
+            leftArrayType = DefaultOpenFieldType.getDefaultOpenFieldType(ATypeTag.ARRAY);
+        }
+        IAType rightArrayType = TypeComputeUtils.getActualType(rightType);
+        if (rightArrayType.getTypeTag() == ATypeTag.ANY) {
+            rightArrayType = DefaultOpenFieldType.getDefaultOpenFieldType(ATypeTag.ARRAY);
+        }
+        IAType leftItemType = ((AbstractCollectionType) leftArrayType).getItemType();
+        IAType rightItemType = ((AbstractCollectionType) rightArrayType).getItemType();
+        ATypeTag leftItemTag = leftItemType.getTypeTag();
+        ATypeTag rightItemTag = rightItemType.getTypeTag();
+        // TODO(ali): could be optimized to not need pointable when changing comparator to be non-tagged & no visitable
+        IPointable leftItem = voidPointableAllocator.allocate(null);
+        IPointable rightItem = voidPointableAllocator.allocate(null);
+        // TODO(ali): optimize to not need this storage, will require optimizing records comparison to not use visitable
+        ArrayBackedValueStorage leftStorage = (ArrayBackedValueStorage) storageAllocator.allocate(null);
+        ArrayBackedValueStorage rightStorage = (ArrayBackedValueStorage) storageAllocator.allocate(null);
+        int result;
+        try {
+            for (int i = 0; i < leftNumItems && i < rightNumItems; i++) {
+                ListAccessorUtil.getItem(b1, s1, i, ATypeTag.ARRAY, leftItemTag, leftItem, leftStorage);
+                ListAccessorUtil.getItem(b2, s2, i, ATypeTag.ARRAY, rightItemTag, rightItem, rightStorage);
+                result = compare(leftItemType, leftItem.getByteArray(), leftItem.getStartOffset(), leftItem.getLength(),
+                        rightItemType, rightItem.getByteArray(), rightItem.getStartOffset(), rightItem.getLength());
+                if (result != 0) {
+                    return result;
+                }
+            }
+            return Integer.compare(leftNumItems, rightNumItems);
+        } catch (IOException e) {
+            throw HyracksDataException.create(e);
+        } finally {
+            storageAllocator.free(rightStorage);
+            storageAllocator.free(leftStorage);
+            voidPointableAllocator.free(rightItem);
+            voidPointableAllocator.free(leftItem);
+        }
+    }
+}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AObjectAscBinaryComparatorFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AbstractAGenericBinaryComparatorFactory.java
similarity index 63%
rename from asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AObjectAscBinaryComparatorFactory.java
rename to asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AbstractAGenericBinaryComparatorFactory.java
index 06bdd2a..140db22 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AObjectAscBinaryComparatorFactory.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AbstractAGenericBinaryComparatorFactory.java
@@ -18,8 +18,8 @@
  */
 package org.apache.asterix.dataflow.data.nontagged.comparators;
 
+import org.apache.asterix.om.typecomputer.impl.TypeComputeUtils;
 import org.apache.asterix.om.types.IAType;
-import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
 import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.io.IJsonSerializable;
@@ -28,33 +28,16 @@
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
-public class AObjectAscBinaryComparatorFactory implements IBinaryComparatorFactory {
+public abstract class AbstractAGenericBinaryComparatorFactory implements IBinaryComparatorFactory {
 
     private static final long serialVersionUID = 1L;
     // these fields can be null
-    private final IAType leftType;
-    private final IAType rightType;
-    private final boolean ascending;
+    protected final IAType leftType;
+    protected final IAType rightType;
 
-    public AObjectAscBinaryComparatorFactory(IAType leftType, IAType rightType) {
-        this(leftType, rightType, true);
-    }
-
-    protected AObjectAscBinaryComparatorFactory(IAType leftType, IAType rightType, boolean ascending) {
-        this.leftType = leftType;
-        this.rightType = rightType;
-        this.ascending = ascending;
-    }
-
-    @Override
-    public IBinaryComparator createBinaryComparator() {
-        return ascending ? new AGenericAscBinaryComparator(leftType, rightType)
-                : new AGenericDescBinaryComparator(leftType, rightType);
-    }
-
-    @Override
-    public JsonNode toJson(IPersistedResourceRegistry registry) throws HyracksDataException {
-        return convertToJson(registry, getClass(), serialVersionUID);
+    AbstractAGenericBinaryComparatorFactory(IAType leftType, IAType rightType) {
+        this.leftType = leftType == null ? null : TypeComputeUtils.getActualType(leftType);
+        this.rightType = rightType == null ? null : TypeComputeUtils.getActualType(rightType);
     }
 
     JsonNode convertToJson(IPersistedResourceRegistry registry, Class<? extends IJsonSerializable> clazz, long version)
@@ -69,18 +52,13 @@
         return jsonNode;
     }
 
-    public static IJsonSerializable fromJson(IPersistedResourceRegistry registry, JsonNode json)
-            throws HyracksDataException {
-        return convertToObject(registry, json, true);
-    }
-
     static IJsonSerializable convertToObject(IPersistedResourceRegistry registry, JsonNode json, boolean asc)
             throws HyracksDataException {
         JsonNode leftNode = json.get("leftType");
         JsonNode rightNode = json.get("rightType");
         IAType leftType = leftNode == null || leftNode.isNull() ? null : (IAType) registry.deserialize(leftNode);
         IAType rightType = rightNode == null || rightNode.isNull() ? null : (IAType) registry.deserialize(rightNode);
-        return asc ? new AObjectAscBinaryComparatorFactory(leftType, rightType)
-                : new AObjectDescBinaryComparatorFactory(leftType, rightType);
+        return asc ? new AGenericAscBinaryComparatorFactory(leftType, rightType)
+                : new AGenericDescBinaryComparatorFactory(leftType, rightType);
     }
 }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/BinaryComparatorFactoryProvider.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/BinaryComparatorFactoryProvider.java
index 22cb6ee..d42a1d3 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/BinaryComparatorFactoryProvider.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/BinaryComparatorFactoryProvider.java
@@ -25,8 +25,8 @@
 import org.apache.asterix.dataflow.data.nontagged.comparators.AIntervalAscPartialBinaryComparatorFactory;
 import org.apache.asterix.dataflow.data.nontagged.comparators.AIntervalDescPartialBinaryComparatorFactory;
 import org.apache.asterix.dataflow.data.nontagged.comparators.ALinePartialBinaryComparatorFactory;
-import org.apache.asterix.dataflow.data.nontagged.comparators.AObjectAscBinaryComparatorFactory;
-import org.apache.asterix.dataflow.data.nontagged.comparators.AObjectDescBinaryComparatorFactory;
+import org.apache.asterix.dataflow.data.nontagged.comparators.AGenericAscBinaryComparatorFactory;
+import org.apache.asterix.dataflow.data.nontagged.comparators.AGenericDescBinaryComparatorFactory;
 import org.apache.asterix.dataflow.data.nontagged.comparators.APoint3DPartialBinaryComparatorFactory;
 import org.apache.asterix.dataflow.data.nontagged.comparators.APointPartialBinaryComparatorFactory;
 import org.apache.asterix.dataflow.data.nontagged.comparators.APolygonPartialBinaryComparatorFactory;
@@ -111,7 +111,7 @@
     @Override
     public IBinaryComparatorFactory getBinaryComparatorFactory(Object leftType, Object rightType, boolean ascending) {
         // During a comparison, since proper type promotion among several numeric types are required,
-        // we will use AObjectAscBinaryComparatorFactory, instead of using a specific comparator
+        // we will use AGenericAscBinaryComparatorFactory, instead of using a specific comparator
         return createGenericBinaryComparatorFactory((IAType) leftType, (IAType) rightType, ascending);
     }
 
@@ -177,9 +177,9 @@
     private IBinaryComparatorFactory createGenericBinaryComparatorFactory(IAType leftType, IAType rightType,
             boolean ascending) {
         if (ascending) {
-            return new AObjectAscBinaryComparatorFactory(leftType, rightType);
+            return new AGenericAscBinaryComparatorFactory(leftType, rightType);
         } else {
-            return new AObjectDescBinaryComparatorFactory(leftType, rightType);
+            return new AGenericDescBinaryComparatorFactory(leftType, rightType);
         }
     }
 

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/3233
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ib369a4dd22f32bfca4bd2c0cbf987529c0bafa6d
Gerrit-PatchSet: 4
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Ali Alsuliman <al...@gmail.com>
Gerrit-Reviewer: Anon. E. Moose #1000171
Gerrit-Reviewer: Dmitry Lychagin <dm...@couchbase.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Murtadha Hubail <mh...@apache.org>
Gerrit-Reviewer: Taewoo Kim <wa...@gmail.com>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>