00001
00002
00003
00004 #include "IndexSearcher.java.h"
00005 #include "JNIGateway.hpp"
00006
00014
00015 using namespace aitools::invertedindex;
00016
00017
00018
00019
00020
00021
00022 JNIEXPORT jint JNICALL Java_de_aitools_aq_invertedindex_core_IndexSearcher_natInstance
00023 (JNIEnv* env, jobject jsearcher, jstring jclazz)
00024 {
00025 try
00026 {
00027 Searcher::SharedPointer searcher;
00028 searcher = JNIGateway::create_searcher(env, jclazz);
00029 return JNIGateway::put_searcher(searcher);
00030 }
00031 catch (const std::exception& error)
00032 {
00033 env->ThrowNew(env->FindClass(JNIGateway::java_exception), error.what());
00034 }
00035 return -1;
00036 }
00037
00038
00039
00040
00041
00042
00043 JNIEXPORT jbyteArray JNICALL Java_de_aitools_aq_invertedindex_core_IndexSearcher_natInit
00044 (JNIEnv* env, jobject jsearcher, jint oid, jbyteArray jconfig)
00045 {
00046 try
00047 {
00048 Configuration config;
00049 Searcher::SharedPointer searcher(JNIGateway::get_searcher(oid));
00050 if (!config.ParseFromArray(env->GetByteArrayElements(jconfig, NULL),
00051 env->GetArrayLength(jconfig)))
00052 {
00053 Exception::throw_invalid_argument("JNI: Cannot parse config");
00054 }
00055 searcher->init(config);
00056 ByteBuffer cheader(searcher->header().ByteSize());
00057 if (!searcher->header().SerializeToArray(cheader.data(), cheader.size()))
00058 {
00059 Exception::throw_invalid_argument("JNI: Cannot serialize header");
00060 }
00061 jbyteArray jheader(env->NewByteArray(cheader.size()));
00062 env->SetByteArrayRegion(jheader, 0, cheader.size(), (jbyte*)cheader.data());
00063 return jheader;
00064 }
00065 catch (const std::exception& error)
00066 {
00067 env->ThrowNew(env->FindClass(JNIGateway::java_exception), error.what());
00068 }
00069 return NULL;
00070 }
00071
00072
00073
00074
00075
00076
00077 JNIEXPORT jintArray JNICALL Java_de_aitools_aq_invertedindex_core_IndexSearcher_natGetQuantile
00078 (JNIEnv* env, jobject jsearcher, jint oid, jstring jkey)
00079 {
00080 try
00081 {
00082 std::string ckey;
00083 JNIGateway::copy_string(env, jkey, ckey);
00084 jsize size(Quantile::COUNT);
00085 jintArray jquantile(env->NewIntArray(size));
00086 const Quantile& cquantile(JNIGateway::get_searcher(oid)->quantile(ckey));
00087 env->SetIntArrayRegion(jquantile, 0, size, (jint*)cquantile.values());
00088 return jquantile;
00089 }
00090 catch (const std::exception& error)
00091 {
00092 env->ThrowNew(env->FindClass(JNIGateway::java_exception), error.what());
00093 }
00094 return NULL;
00095 }
00096
00097
00098
00099
00100
00101
00102 JNIEXPORT jlong JNICALL Java_de_aitools_aq_invertedindex_core_IndexSearcher_natGetFrequency
00103 (JNIEnv* env, jobject jsearcher, jint oid, jstring jkey)
00104 {
00105 try
00106 {
00107 std::string ckey;
00108 JNIGateway::copy_string(env, jkey, ckey);
00109 const Vocabulary& vocab(JNIGateway::get_searcher(oid)->vocabulary());
00110 Vocabulary::const_iterator it(vocab.find(ckey));
00111 return it == vocab.end() ? 0 : it->second;
00112 }
00113 catch (const std::exception& error)
00114 {
00115 env->ThrowNew(env->FindClass(JNIGateway::java_exception), error.what());
00116 }
00117 return 0;
00118 }
00119
00120
00121
00122
00123
00124
00125 JNIEXPORT jint JNICALL Java_de_aitools_aq_invertedindex_core_IndexSearcher_natSearchL
00126 (JNIEnv* env, jobject jsearcher, jint oid, jstring jkey, jint length)
00127 {
00128 try
00129 {
00130 std::string ckey;
00131 JNIGateway::copy_string(env, jkey, ckey);
00132 const Searcher::SharedPointer& searcher(JNIGateway::get_searcher(oid));
00133 return JNIGateway::put_iterator(searcher->generic_search(ckey, length));
00134 }
00135 catch (const std::exception& error)
00136 {
00137 env->ThrowNew(env->FindClass(JNIGateway::java_exception), error.what());
00138 }
00139 return -1;
00140 }
00141
00142
00143
00144
00145
00146
00147 JNIEXPORT jint JNICALL Java_de_aitools_aq_invertedindex_core_IndexSearcher_natSearchO
00148 (JNIEnv* env, jobject jsearcher, jint oid, jstring jkey, jint order)
00149 {
00150 try
00151 {
00152 std::string ckey;
00153 JNIGateway::copy_string(env, jkey, ckey);
00154 Quantile::Order corder(static_cast<Quantile::Order>(order));
00155 const Searcher::SharedPointer& searcher(JNIGateway::get_searcher(oid));
00156 return JNIGateway::put_iterator(searcher->generic_search(ckey, corder));
00157 }
00158 catch (const std::exception& error)
00159 {
00160 env->ThrowNew(env->FindClass(JNIGateway::java_exception), error.what());
00161 }
00162 return -1;
00163 }
00164
00165
00166
00167
00168
00169
00170 JNIEXPORT void JNICALL Java_de_aitools_aq_invertedindex_core_IndexSearcher_natDelete
00171 (JNIEnv* env, jobject jsearcher, jint oid)
00172 {
00173 JNIGateway::delete_searcher(oid);
00174 }