added include_docs=true, use Mojo::JSON
authorDobrica Pavlinusic <dpavlin@rot13.org>
Tue, 7 Dec 2010 22:41:03 +0000 (23:41 +0100)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Tue, 7 Dec 2010 22:41:03 +0000 (23:41 +0100)
couchdb-external-kinosearch.pl

index 7b95d83..d52f8f5 100755 (executable)
@@ -3,9 +3,11 @@ use warnings;
 use strict;
 
 # http://wiki.apache.org/couchdb/ExternalProcesses
+#
+# curl 'http://localhost:5984/drzb2011/_kinosearch?q=a&include_docs=true'
 
 use KinoSearch::Search::IndexSearcher;
-use JSON;
+use Mojo::JSON;
 use Data::Dump qw(dump);
 
 $|=1;
@@ -14,11 +16,13 @@ my $searcher = KinoSearch::Search::IndexSearcher->new(
        index => '/tmp/index' 
 );
 
+our $json = Mojo::JSON->new;
+
 open(my $log, '>>', '/tmp/couchdb-external-kinosearch.log');
 
 while(<STDIN>) {
        warn "# $_\n";
-       my $request = decode_json($_);
+       my $request = $json->decode($_);
        print $log "<<< $_\n"; 
 
        my $response = {
@@ -33,20 +37,22 @@ while(<STDIN>) {
                $response->{json}->{total_hits} = $hits->total_hits;
 
                while ( my $hit = $hits->next ) {
-                       push @{ $response->{json}->{hits} }, {
+                       my $r = {
                                _id => $hit->{_id},
                                _rev => $hit->{_rev},
                                score => $hit->get_score,
                        };
+                       $r->{doc} = $json->decode( $hit->{doc} ) if exists $request->{query}->{include_docs};
+                       push @{ $response->{json}->{hits} }, $r;
                }
 
        } else {
                $response->{json}->{error} = "no query found";
        }
 
-       my $json = encode_json($response);
-       print $json, $/;
-       print $log ">>> $json\n";
+       my $send = $json->encode($response);
+       print $send, $/;
+       print $log ">>> $send\n";
 }