drop dataverse fuzzyjoin if exists;

create dataverse fuzzyjoin;

use dataverse fuzzyjoin;

create type DBLPType as open {
  id: int32, 
  dblpid: string,
  title: string,
  authors: string,
  misc: string
}

create type CSXType as open {
  id: int32, 
  csxid: string,
  title: string,
  authors: string,
  misc: string
}

create dataset DBLP(DBLPType) partitioned by key id;
create dataset CSX(CSXType) partitioned by key id;

load dataset DBLP
using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
(("path"="nc1://data/pub-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));

load dataset CSX
using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
(("path"="nc1://data/pub-small/csx-small-id.txt"),("format"="delimited-text"),("delimiter"=":"));

write output to nc1:'rttest/fuzzyjoin_dblp-csx-3_5.3.1.adm';

//
// -- - Stage 3 - --
//
for $ridpair in 
    //
    // -- - Stage 2 - --
    //
    for $paperDBLP in dataset('DBLP')
    let $idDBLP := $paperDBLP.id
    let $tokensUnrankedDBLP := counthashed-word-tokens($paperDBLP.title)
    let $lenDBLP := len($tokensUnrankedDBLP)
    let $tokensDBLP :=
        for $tokenUnranked in $tokensUnrankedDBLP
        for $tokenRanked at $i in
            //
            // -- - Stage 1 - --
            //
            for $paper in dataset('DBLP')
            let $id := $paper.id
            for $token in counthashed-word-tokens($paper.title)
            /*+ hash */
            group by $tokenGrouped := $token with $id
            /*+ inmem 1 302 */
            order by count($id), $tokenGrouped
            return $tokenGrouped
        where $tokenUnranked = /*+ bcast */ $tokenRanked
        order by $i
        return $i
    for $prefixTokenDBLP in subset-collection(
                                $tokensDBLP,
                                0,
                                prefix-len-jaccard(len($tokensDBLP), .5f))

    for $paperCSX in dataset('CSX')
    let $idCSX := $paperCSX.id
    let $tokensUnrankedCSX := counthashed-word-tokens($paperCSX.title)
    let $lenCSX := len($tokensUnrankedCSX)
    let $tokensCSX :=
        for $tokenUnranked in $tokensUnrankedCSX
        for $tokenRanked at $i in
            //
            // -- - Stage 1 - --
            //
            for $paper in dataset('DBLP')
            let $id := $paper.id
            for $token in counthashed-word-tokens($paper.title)
            /*+ hash */
            group by $tokenGrouped := $token with $id
            /*+ inmem 1 302 */
            order by count($id), $tokenGrouped
            return $tokenGrouped
        where $tokenUnranked = /*+ bcast */ $tokenRanked
        order by $i
        return $i
    for $prefixTokenCSX in subset-collection(
                                $tokensCSX,
                                0,
                                prefix-len-jaccard(len($tokensCSX), .5f))

    where $prefixTokenDBLP = $prefixTokenCSX

    let $sim := similarity-jaccard-prefix(
                    $lenDBLP,
                    $tokensDBLP,
                    $lenCSX,
                    $tokensCSX,
                    $prefixTokenDBLP,
                    .5f)
    where $sim >= .5f
    /*+ hash*/ 
    group by $idDBLP := $idDBLP, $idCSX := $idCSX with $sim
    return {'idDBLP': $idDBLP, 'idCSX': $idCSX, 'sim': $sim[0]}

for $paperDBLP in dataset('DBLP')
for $paperCSX in dataset('CSX')
where $ridpair.idDBLP = $paperDBLP.id and $ridpair.idCSX = $paperCSX.id
order by $paperDBLP.id, $paperCSX.id
return {'dblp': $paperDBLP, 'csx': $paperCSX, 'sim': $ridpair.sim}
