[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 <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Till Westmann <tillw@apache.org>
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);
}
}