CouchDB-Lucene index function doesn't work with external code

263 Views Asked by At

I'm using CouchDB-Lucene for retrieving data from some of my tables in my database. The thing is that I have to parse that data to know which ones I want to put in my lucene index.

So, I thought that I could use a class that I already wrote to process the data. And that I could use CouchApp directives to add this class in my index function.

The result looks like this:

//Index Function
function (doc) {
   var myClass = new MyClass(doc.Data);
   var ret = new Document();

   ret.add(myClass.getResult());

   return ret;
}

//CouchApp directives:
//! vendor/couchapp/MyClass.js

When I look at my design document, it seems that all the code is correctly added, but when I execute a search, lucene says that "MyClass is not defined".

If I try to copy/paste all "MyClass" code manually (and therefore no longer using the CouchApp directive), lucene says that my document has an incorrect ending.

What am I missing?


EDIT: I removed all my real function code which has no point in the issue.

2

There are 2 best solutions below

0
On BEST ANSWER

I found the solution to my issue:

I have to put my external code INSIDE my index function:

//Index Function
function (doc) {
   var myClass = new MyClass(doc.Data);
   var ret = new Document();
   ret.add(myClass.getResult());

   return ret;

   //CouchApp directives:
   //! vendor/couchapp/MyClass.js
}

I don't know why it works without being inside the map function for a couchdb view, but it doesn't for a lucene index function.

Hope it helps! Regards, Mickaël

2
On

Is !vendor inlining your MyClass code into the "index" value?

The error you got when you included your MyClass code directly sounds like a Javascript error of your own. CouchDB-Lucene evaluates the string use Rhino which is a full Javascript engine.

Perhaps if you include the full "index" value it will be more obvious.