Details
-
New Feature
-
Status: Closed
-
Major
-
Resolution: Won't Fix
-
None
-
None
-
None
-
None
Description
Solr now support dynamic loading (SOLR-7073) of components and it is secured in SOLR-7126
We can extend the same functionality with JS as well
the handler /js is implicitly registered
To make this work
- Solr should be started with -Denable.js.loading=true
- The javascript must be loaded to the .system collection using the blob store API
- Sign the javascript and pass the signature in a param called _sig
The JSRequestHandler is implicitly defined and it can be accessed by hitting /js/<jsname>/<version>
Steps for developing scripts
- start the cluster with the enable.js.loading . If you are starting using our script it would be bin/solr start -e cloud -a "-Denable.js.loading=true" . You would not need security during development , so don't add the private keys to Solr
- create .system collection bin/solr create -c .system
- Write your javascript code . (say test.js )
- post it to .system collection . curl -X POST -H 'Content-Type: application/octet-stream' --data-binary @test.js http://localhost:8983/solr/.system/blob/test
- run your script http://host:8983/solr/gettingstarted/js/test/1
- Edit your script and repeat from step #4 . Keep in mind that the version would be bumped up every time you post a new script . So, the second time the url would be http://host:8983/solr/gettingstarted/js/test/2 . So on and so forth
sample programs
1) writes a val to output
//empty line $.response().add('testkey','Test Val');
2) manipulate the output to add an extra field to each doc
//empty line var l = []; $.query({ q: '*:*', qt: '/select', start:0, }).forEach('response', function(doc) { doc.put('script', 'Added this value'); l.push(doc); }); $.response().add('alldocs', l);
3) stream through all the docs
//empty line $.query({ q: '*:*', qt: '/select', start:0, distrib:'false' }).pipe('response', 'docs', function(doc) { // the pipe function is executed right before the response writer and right after the transformers if('IT'== doc.get('genre_s')) return null; doc.put('script', 'Added this value'); return doc; });
Attachments
Attachments
Issue Links
- duplicates
-
SOLR-5005 JavaScriptRequestHandler
- Open