diff --git a/t/fixtures/query_backend.pl b/t/fixtures/fake_backend.pl
similarity index 80%
rename from t/fixtures/query_backend.pl
rename to t/fixtures/fake_backend.pl
index a1d3908..73b4561 100644
--- a/t/fixtures/query_backend.pl
+++ b/t/fixtures/fake_backend.pl
@@ -6,11 +6,13 @@
 use strict;
 use warnings;
 use Mojo::JWT;
-use Mojo::File;
+use Mojo::File qw/path/;
+use Mojo::Util qw/slugify/;
 
 # This is an API fake server with fixtures
 
 my $secret = 's3cr3t';
+my $fixture_path = path(Mojo::File->new(__FILE__)->dirname);
 
 helper jwt_encode => sub {
   shift;
@@ -29,9 +31,27 @@
 };
 
 
+# Load fixture responses
+helper 'load_response' => sub {
+  my $c = shift;
+  my $q_name = shift;
+  my $file = $fixture_path->child("response_$q_name.json");
+  unless (-f $file) {
+    return {
+      status => 500,
+      json => {
+        errors => [[0, 'Unable to load query response from ' . $file]]
+      }
+    }
+  };
+  my $response = $file->slurp;
+  return decode_json($response);
+};
+
+
 # Base page
 get '/' => sub {
-  shift->render(text => 'Query fake server available');
+  shift->render(text => 'Fake server available');
 };
 
 # Search fixtures
@@ -54,54 +74,28 @@
       });
   };
 
-  if ($v->param('q')) {
-
-    my $q = $v->param('q');
-
-    # Response q=server_fail
-    if ($q eq 'server_fail') {
-      return $c->render(
-        status => 500,
-        inline => 'Oooops'
-      );
-    }
-
-    # Response q=[orth=das
-    if ($q eq '[orth=das') {
-      return $c->render(
-        status => 400,
-        json => {
-          "\@context" => "http://korap.ids-mannheim.de/ns/koral/0.3/context.jsonld",
-          "errors" => [
-            [302,"Parantheses/brackets unbalanced.",0],
-            [302,"Could not parse query >>> [orth=das <<<."]
-          ]
-        }
-      );
-    }
+  if (!$v->param('q')) {
+    return $c->render(%{$c->load_response('no_query')});
   };
 
-  my $response = decode_json(
-    Mojo::File->new(__FILE__)->parent->child('response_baum.jsonld')
-    );
-
+  # Get response based on query parameter
+  my $response = $c->load_response(slugify($v->param('q')));
 
   # Check authentification
   if (my $auth = $c->req->headers->header('Authorization')) {
     if (my $jwt = $c->jwt_decode($auth)) {
-      $response->{meta}->{authorized} = $jwt->{username} if $jwt->{username};
+      $response->{json}->{meta}->{authorized} = $jwt->{username} if $jwt->{username};
     };
   };
 
+  # Set page parameter
   if ($v->param('page')) {
-    $response->{meta}->{startIndex} = $v->param("startIndex");
+    $response->{json}->{meta}->{startIndex} = $v->param("startIndex");
   };
 
 
   # Simple search fixture
-  return $c->render(
-    json => $response
-  );
+  return $c->render(%$response);
 };
 
 
diff --git a/t/fixtures/response_baum.json b/t/fixtures/response_baum.json
new file mode 100644
index 0000000..3ad2ae3
--- /dev/null
+++ b/t/fixtures/response_baum.json
@@ -0,0 +1,76 @@
+{
+  "status" : 200,
+  "json" : {
+    "@context" : "http://korap.ids-mannheim.de/ns/KoralQuery/v0.3/context.jsonld",
+    "meta" :  {
+      "count" : 25,
+      "startIndex" : 0,
+      "authorized" : null,
+      "timeout" : 120000,
+      "context" : {
+        "left" : ["token",40],
+        "right" : ["token",40]
+      },
+      "fields" : ["pubDate","subTitle","author","pubPlace","title","textSigle","UID","ID","layerInfos","corpusSigle","docSigle","corpusID","textClass"],
+      "version" : "0.55.7",
+      "benchmark" : "0.120577834 s",
+      "totalResults" : 51,
+      "serialQuery" : "tokens:s:Baum",
+      "itemsPerPage" : 25
+    },
+    "query" : {
+      "@type" : "koral:token",
+      "wrap" : {
+        "@type" : "koral:term",
+        "layer" : "orth",
+        "key" : "Baum",
+        "match" : "match:eq",
+        "foundry" : "opennlp",
+        "rewrites" : [
+          {
+            "@type" : "koral:rewrite",
+            "src" : "Kustvakt",
+            "operation" : "operation:injection",
+            "scope" : "foundry"
+          }
+        ]
+      }
+    },
+    "matches" : [
+      {
+        "field" : "tokens",
+        "pubPlace" : "München",
+        "textSigle" : "GOE/AGI/00000",
+        "docSigle" : "GOE/AGI",
+        "corpusSigle" : "GOE",
+        "title" : "Italienische Reise",
+        "subTitle" : "Auch ich in Arkadien!",
+        "author" : "Goethe, Johann Wolfgang von",
+        "layerInfos" : "base/s=spans corenlp/c=spans corenlp/p=tokens corenlp/s=spans dereko/s=spans malt/d=rels mdp/d=rels opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans",
+        "startMore" : true,
+        "endMore" : true,
+        "snippet" : "<span class=\"context-left\"><span class=\"more\"></span>sie etwas bedeuten zu wollen und machte mit der Oberlippe eine fatale Miene. ich sprach sehr viel mit ihr durch, sie war überall zu Hause und merkte gut auf die Gegenstände. so fragte sie mich einmal, was das für ein </span><span class=\"match\"><mark>Baum</mark></span><span class=\"context-right\"> sei. es war ein schöner großer Ahorn, der erste, der mir auf der ganzen Reise zu Gesichte kam. den hatte sie doch gleich bemerkt und freute sich, da mehrere nach und nach erschienen, daß sie auch diesen Baum unterscheiden könne<span class=\"more\"></span></span>",
+        "matchID" : "match-GOE/AGI/00000-p2030-2031",
+        "UID" : 0,
+        "pubDate" : "1982"
+      },
+      {
+        "field" : "tokens",
+        "pubPlace" : "München",
+        "textSigle" : "GOE/AGI/00000",
+        "docSigle" : "GOE/AGI",
+        "corpusSigle" : "GOE",
+        "title" : "Italienische Reise",
+        "subTitle" : "Auch ich in Arkadien!",
+        "author" : "Goethe, Johann Wolfgang von",
+        "layerInfos" : "base/s=spans corenlp/c=spans corenlp/p=tokens corenlp/s=spans dereko/s=spans malt/d=rels mdp/d=rels opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans",
+        "startMore" : true,
+        "endMore" : true,
+        "snippet" : "<span class=\"context-left\"><span class=\"more\"></span>für ein Baum sei. es war ein schöner großer Ahorn, der erste, der mir auf der ganzen Reise zu Gesichte kam. den hatte sie doch gleich bemerkt und freute sich, da mehrere nach und nach erschienen, daß sie auch diesen </span><span class=\"match\"><mark>Baum</mark></span><span class=\"context-right\"> unterscheiden könne. sie gehe, sagte sie, nach Bozen auf die Messe, wo ich doch wahrscheinlich auch hinzöge. wenn sie mich dort anträfe, müsse ich ihr einen Jahrmarkt kaufen, welches ich ihr denn auch versprach. dort wollte sie auch ihre neue<span class=\"more\"></span></span>",
+        "matchID" : "match-GOE/AGI/00000-p2068-2069",
+        "UID" : 0,
+        "pubDate" : "1982"
+      }
+    ]
+  }
+}
diff --git a/t/fixtures/response_baum.jsonld b/t/fixtures/response_baum.jsonld
deleted file mode 100644
index e401fd1..0000000
--- a/t/fixtures/response_baum.jsonld
+++ /dev/null
@@ -1,73 +0,0 @@
-{
-  "@context" : "http://korap.ids-mannheim.de/ns/KoralQuery/v0.3/context.jsonld",
-  "meta" :  {
-    "count" : 25,
-    "startIndex" : 0,
-    "authorized" : undef,
-    "timeout" : 120000,
-    "context" : {
-      "left" : ["token",40],
-      "right" : ["token",40]
-    },
-    "fields" : ["pubDate","subTitle","author","pubPlace","title","textSigle","UID","ID","layerInfos","corpusSigle","docSigle","corpusID","textClass"],
-    "version" : "0.55.7",
-    "benchmark" : "0.120577834 s",
-    "totalResults" : 51,
-    "serialQuery" : "tokens:s:Baum",
-    "itemsPerPage" : 25
-    },
-  "query" : {
-    "@type" : "koral:token",
-    "wrap" : {
-      "@type" : "koral:term",
-      "layer" : "orth",
-      "key" : "Baum",
-      "match" : "match:eq",
-      "foundry" : "opennlp",
-      "rewrites" : [
-        {
-          "@type" : "koral:rewrite",
-          "src" : "Kustvakt",
-          "operation" : "operation:injection",
-          "scope" : "foundry"
-        }
-      ]
-      }
-  },
-  "matches" : [
-    {
-      "field" : "tokens",
-        "pubPlace" : "München",
-      "textSigle" : "GOE/AGI/00000",
-      "docSigle" : "GOE/AGI",
-      "corpusSigle" : "GOE",
-      "title" : "Italienische Reise",
-      "subTitle" : "Auch ich in Arkadien!",
-      "author" : "Goethe, Johann Wolfgang von",
-      "layerInfos" : "base/s=spans corenlp/c=spans corenlp/p=tokens corenlp/s=spans dereko/s=spans malt/d=rels mdp/d=rels opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans",
-      "startMore" : true,
-      "endMore" : true,
-      "snippet" : "<span class=\"context-left\"><span class=\"more\"></span>sie etwas bedeuten zu wollen und machte mit der Oberlippe eine fatale Miene. ich sprach sehr viel mit ihr durch, sie war überall zu Hause und merkte gut auf die Gegenstände. so fragte sie mich einmal, was das für ein </span><span class=\"match\"><mark>Baum</mark></span><span class=\"context-right\"> sei. es war ein schöner großer Ahorn, der erste, der mir auf der ganzen Reise zu Gesichte kam. den hatte sie doch gleich bemerkt und freute sich, da mehrere nach und nach erschienen, daß sie auch diesen Baum unterscheiden könne<span class=\"more\"></span></span>",
-      "matchID" : "match-GOE/AGI/00000-p2030-2031",
-      "UID" : 0,
-      "pubDate" : "1982"
-    },
-    {
-      "field" : "tokens",
-      "pubPlace" : "München",
-      "textSigle" : "GOE/AGI/00000",
-      "docSigle" : "GOE/AGI",
-      "corpusSigle" : "GOE",
-      "title" : "Italienische Reise",
-      "subTitle" : "Auch ich in Arkadien!",
-      "author" : "Goethe, Johann Wolfgang von",
-      "layerInfos" : "base/s=spans corenlp/c=spans corenlp/p=tokens corenlp/s=spans dereko/s=spans malt/d=rels mdp/d=rels opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans",
-      "startMore" : true,
-      "endMore" : true,
-      "snippet" : "<span class=\"context-left\"><span class=\"more\"></span>für ein Baum sei. es war ein schöner großer Ahorn, der erste, der mir auf der ganzen Reise zu Gesichte kam. den hatte sie doch gleich bemerkt und freute sich, da mehrere nach und nach erschienen, daß sie auch diesen </span><span class=\"match\"><mark>Baum</mark></span><span class=\"context-right\"> unterscheiden könne. sie gehe, sagte sie, nach Bozen auf die Messe, wo ich doch wahrscheinlich auch hinzöge. wenn sie mich dort anträfe, müsse ich ihr einen Jahrmarkt kaufen, welches ich ihr denn auch versprach. dort wollte sie auch ihre neue<span class=\"more\"></span></span>",
-      "matchID" : "match-GOE/AGI/00000-p2068-2069",
-      "UID" : 0,
-      "pubDate" : "1982"
-    }
-  ]
-}
diff --git a/t/fixtures/response_no_query.json b/t/fixtures/response_no_query.json
new file mode 100644
index 0000000..5f75741
--- /dev/null
+++ b/t/fixtures/response_no_query.json
@@ -0,0 +1,9 @@
+{
+  "status" : 400,
+  "@context" : "http://korap.ids-mannheim.de/ns/koral/0.3/context.jsonld",
+  "errors":[
+    [
+      301,"You did not specify a query!"
+    ]
+  ]
+}
diff --git a/t/fixtures/response_orthdas.json b/t/fixtures/response_orthdas.json
new file mode 100644
index 0000000..b578412
--- /dev/null
+++ b/t/fixtures/response_orthdas.json
@@ -0,0 +1,11 @@
+{
+  "comment" : "q=[orth=das",
+  "status" : 400,
+  "json" : {
+    "@context" : "http://korap.ids-mannheim.de/ns/koral/0.3/context.jsonld",
+    "errors" : [
+      [302,"Parantheses/brackets unbalanced.",0],
+      [302,"Could not parse query >>> [orth=das <<<."]
+    ]
+  }
+}
diff --git a/t/fixtures/response_server_fail.json b/t/fixtures/response_server_fail.json
new file mode 100644
index 0000000..51be2cb
--- /dev/null
+++ b/t/fixtures/response_server_fail.json
@@ -0,0 +1,4 @@
+{
+  "status" : 500,
+  "inline" : "Oooops"
+}
diff --git a/t/fixtures/test_backend.pl b/t/fixtures/test_backend.pl
deleted file mode 100644
index ce8af5f..0000000
--- a/t/fixtures/test_backend.pl
+++ /dev/null
@@ -1,347 +0,0 @@
-#!/usr/bin/env perl
-use Mojolicious::Lite;
-use Mojo::ByteStream 'b';
-use Mojo::Date;
-use Mojo::JSON qw/true false encode_json/;
-use strict;
-use warnings;
-use Mojo::JWT;
-
-# This is an API fake server with fixtures
-
-# TODO: Test the fake server
-
-my $secret = 's3cr3t';
-
-helper jwt_encode => sub {
-  shift;
-  return Mojo::JWT->new(
-    secret => $secret,
-    token_type => 'api_token',
-    expires => time + (3 * 34 * 60 * 60),
-    claims => { @_ }
-  );
-};
-
-helper jwt_decode => sub {
-  my ($c, $auth) = @_;
-  $auth =~ s/\s*api_token\s+//;
-  return Mojo::JWT->new(secret => $secret)->decode($auth);
-};
-
-
-# Base page
-get '/' => sub {
-  shift->render(text => 'Fake server available');
-};
-
-
-# Search fixtures
-get '/search' => sub {
-  my $c = shift;
-  my $v = $c->validation;
-  $v->optional('q');
-  $v->optional('page');
-  $v->optional('ql');
-  $v->optional('count');
-  $v->optional('context');
-
-  # Check for Baum
-  my $response = {
-    "\@context" => "http://korap.ids-mannheim.de/ns/KoralQuery/v0.3/context.jsonld",
-    "meta" => {
-      "count" => 25,
-      "startIndex" => 0,
-      "authorized" => undef,
-      "timeout" => 120000,
-      "context" => {
-        "left" => ["token",40],
-        "right" => ["token",40]
-      },
-      "fields" => ["pubDate","subTitle","author","pubPlace","title","textSigle","UID","ID","layerInfos","corpusSigle","docSigle","corpusID","textClass"],
-      "version" => "0.55.7",
-      "benchmark" => "0.120577834 s",
-      "totalResults" => 51,
-      "serialQuery" => "tokens:s:Baum",
-      "itemsPerPage" => 25
-    },
-    "query" => {
-      "\@type" => "koral:token",
-      "wrap" => {
-        "\@type" => "koral:term",
-        "layer" => "orth",
-        "key" => "Baum",
-        "match" => "match:eq",
-        "foundry" => "opennlp",
-        "rewrites" => [
-          {
-              "\@type" => "koral:rewrite",
-              "src" => "Kustvakt",
-              "operation" => "operation:injection",
-              "scope" => "foundry"
-            }
-        ]
-      }
-    },
-    "matches" => [
-      {
-        "field" => "tokens",
-        "pubPlace" => "München",
-        "textSigle" => "GOE/AGI/00000",
-        "docSigle" => "GOE/AGI",
-        "corpusSigle" => "GOE",
-        "title" => "Italienische Reise",
-        "subTitle" => "Auch ich in Arkadien!",
-        "author" => "Goethe, Johann Wolfgang von",
-        "layerInfos" => "base/s=spans corenlp/c=spans corenlp/p=tokens corenlp/s=spans dereko/s=spans malt/d=rels mdp/d=rels opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans",
-        "startMore" => true,
-        "endMore" => true,
-        "snippet" => "<span class=\"context-left\"><span class=\"more\"></span>sie etwas bedeuten zu wollen und machte mit der Oberlippe eine fatale Miene. ich sprach sehr viel mit ihr durch, sie war überall zu Hause und merkte gut auf die Gegenstände. so fragte sie mich einmal, was das für ein </span><span class=\"match\"><mark>Baum</mark></span><span class=\"context-right\"> sei. es war ein schöner großer Ahorn, der erste, der mir auf der ganzen Reise zu Gesichte kam. den hatte sie doch gleich bemerkt und freute sich, da mehrere nach und nach erschienen, daß sie auch diesen Baum unterscheiden könne<span class=\"more\"></span></span>",
-        "matchID" => "match-GOE/AGI/00000-p2030-2031",
-        "UID" => 0,
-        "pubDate" => "1982"
-      },
-      {
-        "field" => "tokens",
-        "pubPlace" => "München",
-        "textSigle" => "GOE/AGI/00000",
-        "docSigle" => "GOE/AGI",
-        "corpusSigle" => "GOE",
-        "title" => "Italienische Reise",
-        "subTitle" => "Auch ich in Arkadien!",
-        "author" => "Goethe, Johann Wolfgang von",
-        "layerInfos" => "base/s=spans corenlp/c=spans corenlp/p=tokens corenlp/s=spans dereko/s=spans malt/d=rels mdp/d=rels opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans",
-        "startMore" => true,
-        "endMore" => true,
-        "snippet" => "<span class=\"context-left\"><span class=\"more\"></span>für ein Baum sei. es war ein schöner großer Ahorn, der erste, der mir auf der ganzen Reise zu Gesichte kam. den hatte sie doch gleich bemerkt und freute sich, da mehrere nach und nach erschienen, daß sie auch diesen </span><span class=\"match\"><mark>Baum</mark></span><span class=\"context-right\"> unterscheiden könne. sie gehe, sagte sie, nach Bozen auf die Messe, wo ich doch wahrscheinlich auch hinzöge. wenn sie mich dort anträfe, müsse ich ihr einen Jahrmarkt kaufen, welches ich ihr denn auch versprach. dort wollte sie auch ihre neue<span class=\"more\"></span></span>",
-        "matchID" => "match-GOE/AGI/00000-p2068-2069",
-        "UID" => 0,
-        "pubDate" => "1982"
-      }
-    ]
-  };
-
-  # Error responses:
-  if ($v->param('ql') && $v->param('ql') eq 'cosmas3') {
-    return $c->render(json => {
-      errors => [[101,"No entity found for id","test_h"]]
-    });
-  };
-
-  if ($v->param('q')) {
-    if ($v->param('q') eq 'server_fail') {
-      return $c->render(
-        status => 500,
-        inline => 'Oooops'
-      );
-    }
-    elsif ($v->param('q') eq '[orth=das') {
-      return $c->render(
-        status => 400,
-        json => {
-          "meta" => {
-            "count" => 13
-          },
-          "collection" => {
-            '@type' => "koral:docGroup",
-            "operation" => "operation:and",
-            "operands" => [
-              {
-                '@type' => "koral:doc",
-                "match" => "match:eq",
-                "type" => "type:regex",
-                "value" => "CC-BY.*",
-                "key" => "availability"
-              },
-              {
-                "operands" => [
-                  {
-                    '@type' => "koral:doc",
-                    "match" => "match:eq",
-                    "value" => "WPD",
-                    "key" => "corpusSigle"
-                  },
-                  {
-                    '@type' => "koral:doc",
-                    "match" => "match:eq",
-                    "value" => "GOE",
-                    "key" => "corpusSigle"
-                  }
-                ],
-                '@type' => "koral:docGroup",
-                "operation" => "operation:or"
-              }
-            ],
-            "rewrites" => [
-              {
-                '@type' => "koral:rewrite",
-                "src" => "Kustvakt",
-                "operation" => "operation:insertion",
-                "scope" => "availability(FREE)"
-              }
-            ]
-          },
-          '@context' => "http://korap.ids-mannheim.de/ns/koral/0.3/context.jsonld",
-          "errors" => [
-            [302,"Parantheses/brackets unbalanced.",0],
-            [302,"Could not parse query >>> [orth=der <<<."]
-          ]
-        }
-      );
-    }
-  };
-
-  if (my $auth = $c->req->headers->header('Authorization')) {
-    if (my $jwt = $c->jwt_decode($auth)) {
-      $response->{meta}->{authorized} = $jwt->{username} if $jwt->{username};
-    };
-  };
-
-  if ($v->param('page')) {
-    $response->{meta}->{startIndex} = $v->param("startIndex");
-  };
-
-
-  # Simple search fixture
-  return $c->render(
-    json => $response
-  );
-};
-
-
-
-############
-# Auth API #
-############
-
-# Request API token
-get '/auth/logout' => sub {
-  my $c = shift;
-
-  if (my $auth = $c->req->headers->header('Authorization')) {
-    if (my $jwt = $c->jwt_decode($auth)) {
-      my $user = $jwt->{username} if $jwt->{username};
-
-      $c->app->log->debug('Server-Logout: ' . $user);
-      return $c->render(json => { msg => [[0, 'Fine!']]});
-    };
-  };
-
-  return $c->render(status => 400, json => { error => [[0, 'No!']]});
-};
-
-
-# Request API token
-get '/auth/apiToken' => sub {
-  my $c = shift;
-
-  # Get auth header
-  my $auth = $c->req->headers->authorization;
-
-  # Authorization missing or not basic
-  if (!$auth || $auth !~ s/\s*Basic\s+//gi) {
-    return $c->render(
-      json => {
-        error => [[2, 'x']]
-      }
-    );
-  };
-
-  # Decode header
-  my ($username, $pwd) = @{b($auth)->b64_decode->split(':')->to_array};
-
-  # the password is 'pass'
-  if ($pwd) {
-
-    # the password is 'pass'
-    if ($pwd eq 'pass') {
-
-      # Render info with token
-      my $jwt = $c->jwt_encode(username => $username);
-
-      # Render in the Kustvakt fashion:
-      return $c->render(
-        format => 'html',
-        text => encode_json({
-          %{$jwt->claims},
-          expires    => $jwt->expires,
-          token      => $jwt->encode,
-          token_type => 'api_token'
-        })
-      );
-    };
-
-    return $c->render(
-      json => {
-        error => [[2004, undef]]
-      }
-    );
-  };
-
-  return $c->render(
-    json => {
-      error => [[2004, undef]]
-    }
-  );
-};
-
-app->start;
-
-
-__END__
-
-
-  # Temporary:
-  my $collection_query = {
-    '@type' => "koral:docGroup",
-    "operation" => "operation:or",
-    "operands" => [
-      {
-	'@type' => "koral:docGroup",
-	"operation" => "operation:and",
-	"operands" => [
-	  {
-	    '@type' => "koral:doc",
-	    "key" => "title",
-	    "match" => "match:eq",
-	    "value" => "Der Birnbaum",
-	    "type" => "type:string"
-	  },
-	  {
-	    '@type' => "koral:doc",
-	    "key" => "pubPlace",
-	    "match" => "match:eq",
-	    "value" => "Mannheim",
-	    "type" => "type:string"
-	  },
-	  {
-	    '@type' => "koral:docGroup",
-	    "operation" => "operation:or",
-	    "operands" => [
-	      {
-		'@type' => "koral:doc",
-		"key" => "subTitle",
-		"match" => "match:eq",
-		"value" => "Aufzucht oder Pflege",
-		"type" => "type:string"
-	      },
-	      {
-		'@type' => "koral:doc",
-		"key" => "subTitle",
-		"match" => "match:eq",
-		"value" => "Gedichte",
-		"type" => "type:string"
-	      }
-	    ]
-	  }
-	]
-      },
-      {
-	'@type' => "koral:doc",
-	"key" => "pubDate",
-	"match" => "match:geq",
-	"value" => "2015-03-05",
-	"type" => "type:date"
-      }
-    ]
-  };
