分散Luceneのインデックスデータ
分散型 Lucene では、インデックスを作成してディレクトリに格納する必要があるドキュメントにインデックスを付けることで、効率的な検索が可能になります。 最初のステップは 初期化します インデックスを格納するディレクトリ。 Lucene.NET とは異なり、 NCacheDirectory
キャッシュ名とインデックス名を指定してディレクトリを開く場合に使用します。
Note
この機能は以下でも利用できます NCache Professional.
Note
インデックス ディレクトリのデフォルト パスは次のとおりです。 C:\ ProgramData \ncache\ lucene-index \ {CACHE_NAME} \ data Windowsの場合、および /ユーザー/共有/ncache/ lucene-index / {CACHE_NAME} / data Linuxの場合
ディレクトリが初期化されると、 IndexWriter
のインスタンスを提供することによって開かれます NCacheDirectory
と IndexWriterConfig. IndexWriter
を使用して、Lucene.NET と同じメカニズムでインデックスにドキュメントを追加し、インデックスを付けます。 AddDocument
方法。
Note
キャッシュサーバー間での文書の配布については、 NCache 自動的に追加します TextField
また、 DocKey
フィールドと、ユーザーが指定していない場合はドキュメントへの自動生成されたGUID値。
インデックスに対して実行される書き込み操作はすべて同期です。 したがって、それらは、上記の操作が完了した場合にのみユーザーに返されます。 これにより、Distributed Lucene にデータの一貫性と整合性が追加されます。
重要
ライターでの書き込み操作では、 Commit
をクリックしてドキュメント ディレクトリに保存します。 commit を呼び出す必要があります。そうしないと書き込み操作が保存されず、追加されたドキュメントの検索操作にも影響を与える可能性があります。
Lucene.NETとは異なり、並列インデックス作成のために同じディレクトリで複数のライターを開くことができます。 文書が書かれるとき、 IndexWriter.Commit
ドキュメントを永続化して検索可能にするために呼び出されます。 一度 IndexWriter
データのインデックス作成に使用されます。 IndexWriter.Dispose
使用中のリソースを解放するために呼び出す必要があります。
先端
を使用して、インスタンスでの書き込み操作の完了に関する情報を取得できます。 NCache 提供 Boolean
財産 IndexWriter.OperationsCompleted
.
前提条件
- すべてを使用するために必要な標準的な前提条件について学習するには NCache クライアント側の機能については、次のページを参照してください。 クライアント側 API の前提条件.
- Luceneキャッシュを作成して開始したことを確認してください。 NCache 管理センター or コマンドラインインターフェイス.
- ていることを確認してください クライアントへの通知 有効になります。
- アプリケーションがネイティブのLuceneDLL/リファレンスを使用していないことを確認してください。
- APIの詳細については、以下を参照してください。 NCacheディレクトリ, アナライザ, ホワイトスペースアナライザー, インデックスライター, IndexWriterConfig, コミット, ドキュメントの追加, ドキュメント.
データのインデックス作成
次の例では、最初に NCacheDirectory
キャッシュ名を Luceneキャッシュ インデックス名は 製品索引。 それからそれは開きます IndexWriter
指定されたディレクトリで ホワイトスペースアナライザー データを分析するため。
警告
インデックス書き込み操作は、 部分クラスター.
// Specify the Distributed-Lucene cache name
string cache = "LuceneCache";
// Specify the index name to create the indexes
string indexName = "ProductIndex";
NCacheDirectory ncacheDirectory = null;
IndexWriter indexWriter = null;
//Initializing
// Create a directory and open it on the cache and the index path
ncacheDirectory = NCacheDirectory.Open(cache, indexName);
// Specify the analyzer used to analyze data
Analyzer analyzer = new WhitespaceAnalyzer(LuceneVersion.LUCENE_48);
// Create an indexWriterConfig which holds all the configurations to create an instance of the writer
IndexWriterConfig config = new IndexWriterConfig(LuceneVersion.
LUCENE_48, analyzer);
// Create an instance of the writer
indexWriter = new IndexWriter(ncacheDirectory, new IndexWriterConfig
(LuceneVersion.LUCENE_48, _analyzer));
// Indexing
// Add the products information that is to be indexed
Product[] products = FetchProductsFromDB();
foreach (var prod in products)
{
// Create a document and add fields to it
Document doc = new Document();
doc.Add(new TextField("ProductID", prod.ProductID.ToString(),
Field.Store.YES));
doc.Add(new TextField("ProductName", prod.ProductName, Field.Store.NO));
doc.Add(new TextField("Category", prod.Category, Field.Store.YES));
doc.Add(new TextField("Description", prod.Description, Field.Store.YES));
// Writer is created previously
indexWriter.AddDocument(doc);
}
// Calling commit on the writer saves all the write operations
indexWriter.Commit();
if(indexWriter.OperationsCompleted)
{
// All writing operations are complete
// Can proceed with other operations such as querying
}
// Dispose the indexWriter after indexing
if (indexWriter != null) indexWriter.Dispose();
// Dispose the ncacheDirectory
if (ncacheDirectory != null) ncacheDirectory.Dispose();
Note
あなたは電話する必要があります Dispose
すべての終わりに writer
たとえば、そうでない場合、メモリ内に存在し、メモリ リークが発生します。
その他のリソース
NCache 分散Luceneのサンプルアプリケーションを提供します GitHubの.
も参照してください
。ネット: Lucene.Net.Index 名前空間