2017-02-17 7 views
0

私はLuceneのインスタンスで、次のように文書を格納しています:なぜLuceneインデックスが大きいのですか?

Document doc = new Document(); 
doc.add(new StringField("title", processor.title, Field.Store.YES)); 
doc.add(new StringField("annotation", processor.annotation, Field.Store.YES)); 
doc.add(new TextField("text", processor.text, Field.Store.NO)); 
w.addDocument(doc); 

私はインデックスに格納するフルテキストを必要としない、私は必要な唯一のものは、書類上の検索を実行できるようにすることです。

問題は、元のドキュメントセットのサイズとほぼ同じサイズのインデックスを取得していることです。それは単語の頻度だけを格納する必要があるので、私にとっては非常に奇妙なようです。なぜそれが起こっているのですか?

+1

サンプルドキュメントを追加して、元のドキュメントにいくつのフィールドがあるかなどを追加できますか?また、どのくらいのドキュメント、どのくらいの大きさのフィールド、どのくらいのドキュメントやインデックスがいいですいくつかの数字がいいです。 –

+0

@DominikSandjajaドキュメントには、質問に表示される3つのフィールドがあります。インデックスに格納されていないテキストのサイズは、普通の英語テキストの〜100Kです。 –

+0

IndexWriterとIndexWriterConfigの作成方法を教えてください。 –

答えて

1

アナライザ(トークナイザとフィルタ)は、テキストと一致する必要があります。英語についてはが良いスタートです。

Analyzer analyzer = new StandardAnalyzer(Version.LATEST); 
Directory index = FSDirectory.open(new File("index")); 
IndexWriterConfig config = new IndexWriterConfig(Version.LATEST, analyzer); 
IndexWriter writer = new IndexWriter(index, config); 
2

それは単語の出現頻度のみを格納する必要がありますように、それは私には非常に奇妙に思えます。

あなたは、保存されているものと保存方法が間違っていると思います。インデックスファイル形式のLucene documentationについて詳しく説明しています。概要セクションからの引用:

  • フィールド名:

    各セグメントのインデックスは、次の維持。これには、索引で使用される一連のフィールド名が含まれます。

  • ストアドフィールドの値。これには、各文書について、属性と値のペアのリストが含まれます。属性はフィールド名です。これらは、 のタイトル、URL、またはデータベースにアクセスするための識別子など、文書に関する補助情報を格納するために使用される です。保存された一連のフィールドは、検索時にヒットごとに返されるものです。これは文書番号で と入力します。

  • 用語辞書。すべての文書のすべての索引付きフィールドに使用されているすべての用語を含む辞書。辞書 には、用語を含む文書の数と、用語の頻度および近接データに対するポインタ が含まれています。

  • 用語頻度データ。辞書内の各用語について、その用語を含むすべての文書の番号と、omitTfがfalseの場合は、その文書内の用語 の頻度。

  • 用語近接データ。辞書内の各用語について、その用語が各文書内で生じる位置。すべての文書のすべてのフィールドでomitTfがtrueに設定されている場合は、 が存在しないことに注意してください。

  • 正規化係数。各ドキュメントの各フィールドには、そのフィールドのヒットのスコアに乗算された値が格納されます。

  • 用語ベクタ。各文書の各フィールドについて、用語ベクトル(文書ベクトルと呼ばれることもある)を格納することができる。用語ベクトル は、用語テキストと用語頻度で構成されています。 インデックスにタームベクタを追加するには、フィールドコンストラクタを参照してください。

  • 削除されたドキュメント。削除される文書を示すオプションのファイル。

上記のいくつかはオプションであり、おそらくあなたのインデックスには存在しません。ただし、最小の索引には、「フィールド名」、「格納フィールド値」、「用語辞書」および「用語頻度データ」があります。

これらのデータ構造のいくつかは、コーパス内の別個の単語の数に応じて拡張されます。他のものは、文書の数、または文書ごとのユニークな単語の数に応じてスケールされます。

単一の(比較的)小さなドキュメントでインデックスを作成すると、いくつかのスケーリングファクタがあなたに作用します。

最後に、索引セグメントの物理的表現は、短縮された記憶域に優先して高速検索のために設計され、最適化されます。それは実際に使用される "情報密度"と記憶スペースに影響を与えます。