Skip to content

Instantly share code, notes, and snippets.

@amcjen
Created August 16, 2011 23:27
Show Gist options
  • Save amcjen/1150437 to your computer and use it in GitHub Desktop.
Save amcjen/1150437 to your computer and use it in GitHub Desktop.
clucene_bindings snippet
try {
TCHAR* searchString = STRDUP_AtoT(*(*baton->search));
Query* q = QueryParser::parse(searchString, _T(""), &analyzer);
Hits* hits = s.search(q);
HandleScope scope;
//_CLDELETE(q);
free(searchString);
// Build the result array
Local<v8::Array> resultArray = v8::Array::New();
for (size_t i=0; i < hits->length(); i++) {
Document& doc(hits->doc(i));
// {"id":"ab34", "score":1.0}
Local<Object> resultObject = Object::New();
// TODO: This dup might be a leak
DocumentFieldEnumeration* fields = doc.getFields();
while (fields->hasMoreElements()) {
Field* nextField = fields->nextElement();
Local<String> fieldName = _T(nextField->name());
Local<String> fieldValue = _T(nextField->stringValue());
resultObject->Set(fieldName, fieldValue);
}
/*
resultObject->Set(String::New("type"), String::New(STRDUP_TtoA(doc.get(_T("_type")))));
if (doc.getField(_T("content")) != NULL) {
resultObject->Set(String::New("content"), String::New(STRDUP_TtoA(doc.get(_T("content")))));
}
*/
resultObject->Set(String::New("score"), Number::New(hits->score(i)));
resultArray->Set(i, resultObject);
}
baton->results = Persistent<v8::Array>::New(resultArray);
} catch (CLuceneError& E) {
baton->error.assign(E.what());
} catch(...) {
baton->error = "Got an unknown exception";
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment