1

データベース内のいくつかのテーブルからデータを取得するために CouchDB-Lucene を使用しています。問題は、そのデータを解析して、どのデータを lucene インデックスに入れたいかを知る必要があるということです。

そこで、データを処理するためにすでに書いたクラスを使用できると考えました。そして、CouchApp ディレクティブを使用して、このクラスをインデックス関数に追加できます。

結果は次のようになります。

//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

自分のデザインドキュメントを見ると、すべてのコードが正しく追加されているように見えますが、検索を実行すると、lucene で「MyClass が定義されていません」と表示されます。

すべての"MyClass"コードを手動でコピーして貼り付けようとすると(そのため、CouchApp ディレクティブを使用しなくなります)、lucene はドキュメントの末尾が正しくないと言います。

私は何が欠けていますか?


編集:問題の意味がない実際の関数コードをすべて削除しました。

4

2 に答える 2

0

ベンダーは MyClass コードを「インデックス」値にインライン化していますか?

MyClass コードを直接インクルードしたときに発生したエラーは、独自の Javascript エラーのように聞こえます。CouchDB-Lucene は、完全な Javascript エンジンである Rhino を使用して文字列を評価します。

おそらく、完全な「インデックス」値を含めると、より明白になります。

于 2013-05-03T12:23:47.047 に答える
0

私の問題の解決策を見つけました:

外部コードをインデックス関数内に配置する必要があります。

//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
}

couchdb ビューの map 関数内になくても機能する理由はわかりませんが、lucene インデックス関数では機能しません。

それが役に立てば幸い!よろしく、ミカエル

于 2013-05-13T08:39:20.023 に答える