問題タブ [ramdirectory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Lucene.Net RAMDirectory をディスクに書き込む方法は?
私は Lucene.Net を使用してしばらく経ちましFSDirectory
たので、使用の基本についてはよく知っています。RAMDirectory
ただし、インデックスの使用を高速化するために、可能であれば 'sを使用していくつかのキー コードを書き直そうとしています。
適切なコンストラクターを使用するだけで、既存の FSDirectory を RAMDirectory にロードするのは簡単です。ただし、ディスクに再度書き込む方法がわかりません。
Java バージョンで静的な Directory.copy() メソッドについての言及を見たことがありますが、これは Lucene.Net には存在しないようです。
これは可能ですか?
更新:この方法をサポートしていない古いバージョンの Lucene.Net を使用していたことが判明しました。Lucene.Net の公式サイトにある「公式バイナリ」は、かなり古くなっているようです。Visual Studio 内でNuGetを使用して最新バージョンの Lucene をダウンロードしてインストールすることを提案してくれた CVertex に感謝します。
unit-testing - モッキングと単体テスト Solr と Lucene インデックス
プロダクション solr インデックスのデータを制御する必要があり、新しい開発と互換性がある必要があります。理想的には、ローカル マシンでインデックスをモックし、solr でクエリを実行し、ユニット テストを記述してクエリを実行し、反復を高速化します。
RamDirectory は別の質問で同様のことを行うために使用されますが、質問は2年前のものです。この例は、まさにそれを行っているように見えます (RamDirectory の代わりに FSDirectory を使用)。これらは、この問題に対する正しいアプローチですか? これを行うためのより良い方法はありますか?
次のようなテストを書きたいと思います:
編集:追加の詳細:
私たちの考えでは、インデックスを作成し、バージョン管理で保持できるローカル データベースを除いて、インデックス作成者やシステムの残りの部分を必要とせずにドキュメントを追加する簡単な方法を用意することでした。以前はインデックスを生成し、非互換性が発生したときにインデックスを再生成していました。
インデックスを再作成すると、多くのオーバーヘッドが追加されます。インデクサーには多くのデータ処理ロジックが含まれているため (データベースから検索可能なフィールドにデータを追加するなど)、インデクサーをモックすることは適切なオプションとは思えません。 . 私たちのインデクサーは外部データベースに接続するので、それもサポートする必要があります。上記のように、オーバーヘッドがほとんどないローカル テスト データベースを使用できます。
テスト データベースを作成したら、インデックスを作成する必要があります。その後、上記の 2 番目のリンクから進むことができます。問題は、たとえばサイズが 1000 のドキュメントについて、テスト用に非常に迅速にインデックスを構築するにはどうすればよいかということです。
これに関する問題は、ローカル データベース スキーマを本番スキーマと同期させておく必要があることです。本番スキーマは頻繁に変更されるため、これが問題になります。これを処理するのに十分な柔軟性を備えたテスト インフラストラクチャを用意したいと考えています。現在のアプローチでは、毎回データベースを再構築するだけですが、これは遅く、他の人を怒らせます。
indexing - RamDirectory 使用時の MergePolicy の効果
前回の実行後に更新されたドキュメントをインデックス化するジョブ (定期的に実行) があります。最初に RamDirectory に書き込み、次にそれをディスク上のインデックスとマージします (indexWriter.addIndexes() を使用)。両方のライターに MergePolicy を設定する必要がありますか? RamDirectory への書き込み中およびディスク上のインデックスとのマージ中
ありがとう
c# - オブジェクトのサイズが 2GB を超える場合に RAMDirectory を使用して OutOfMemoryException を回避する方法
パフォーマンスを向上させるためにインデックス全体をメモリに入れていましたがRAMDirectory
、インデックスがどんどん大きくなるまではうまく機能していました。今私は得てOutOfMemoryException
います。ディスク上のインデックスは 1.24GB ですが、オブジェクトのオブジェクト サイズがRAMDirectory
.NET の 2GB オブジェクト サイズの制限を超えてしまい、例外がスローされたのではないかと考えています。もう 1 つの理由として、仮想アドレス空間が断片化しすぎて、オブジェクトに十分な大きさの穴を見つけられないことが考えられます。
引き続きご利用いただきたいと思いRAMDirectory
ます。を避けながらどうすればそれを行うことができOutOfMemoryException
ますか?
IndexWriter.Optimize
また、インデックスを作成するときに呼び出して、インデックス全体が 1 つの大きなファイルになることにも注意してください。
google-app-engine - indexwriter.closeのnullポインタ例外(Google App Engineでramdirectoryを使用)
私は、GoogleAppEngineでluceneインデックスを機能させることに取り組んでいます。ramdirectoryを使用してインデックスを作成し、それ(ramdirectoryオブジェクト)を永続ストレージ用のmemcacheとblobstoreにシリアル化します。 http://code.google.com/appengine/docs/java/blobstore/overview.html#Writing_Files_to_the_Blobstore 検索の場合は、逆シリアル化して検索に使用します。
インデックスライターを閉じると、nullポインター例外が発生します。
これは、GoogleAppEngineでサポートされているライブラリが次のとおりであるという事実と関係があるのではないかと思います。 http://code.google.com/appengine/docs/java/jrewhitelist.html
lucene3.5.0とAppEngineJavaバージョン1.6.1を使用しています
以下は私が取得したスタックトレースです
コードはローカルマシンで正しく機能します(コードをあまり追加しておらず、サンプルドキュメントをいくつか追加して、indexwriter.close()を実行しました)
誰かが以前にこの問題に直面したことがありますか?もしそうなら、それに対する回避策はありますか?
私が問題を見つけているコードは単純です
最後の行でライターを閉じようとすると、例外がスローされます
java - RAMDirectory Lucene
テキストファイルのインデックスを作成し、RAMDirectoryを使用して高速インデックスを作成しようとしていますが、重複を防ぐために以前のRAMDirectoryをクリアする方法があるかどうか疑問に思っていましたか?
database - db に lucene インデックスを保存する (JDBCDirectory なし、ファイル システムなし)
外部ライブラリなしで db に lucene インデックスを保存する良い方法はありますか?それは接続層 (JDBCDirectory など) に触れ、ファイルシステムを使用せずに (一時的であっても) ありますか? RAMDirectory は、インデックスの特定の部分 (.cfs "ファイル" とセグメント) を取得できれば問題ありません。実行可能かどうかはわかりません。どんな助けにも感謝します。
java - RAMDirectory から FSDIrectory への Lucene の変更 - コンテンツ フィールドがありません
私はただの lucene スターターであり、RAMDIrectory から FSDirectory への変更中に問題が発生しました。
最初に私のコード:
それは私が素晴らしいウェブサイトで見つけたいくつかのコードであり、試してみたかった.... RAMDirectoryを使用するとすべてがうまく機能します。しかし、それを FSDirectory に変更すると、次のような NullpointerException が発生します。
com.org.test.Main.main(Main.java:31) の com.org.test.TextDB.myMethod(TextDB.java:184) でのスレッド「メイン」 java.lang.NullPointerException での例外
ステートメントTerms content = reader.getTermVector(spans.doc(), "content"); 結果が得られないようで、null を返します。だから例外。しかし、なぜ?私の ramDIR では、すべて正常に動作します。
indexWriter または Reader (実際にはわかりません) が、インデックスからフィールド "content" を適切に書き込んでいないか、読み取っていないようです。しかし、なぜそれが RAMDirectory に「書き込まれ」、FSDIrectory には書き込まれないのか、本当にわかりません。
誰でもそれについてのアイデアはありますか?