2012-03-16 13 views
0

別個のカテゴリーを見る:Lucene.Net私は次のドキュメントを作成した

var document = new Document(); 
document.Add(new Field("category", "foo", Field.Store.YES, Field.Index.NOT_ANALYZED)); 
... 

私は8つの別個のカテゴリーに属し、約10M文書を持っています。私は、検索クエリを実行することによって、すべての異なるカテゴリ(すべてのドキュメントを取得し、categoryフィールドの値を取得する)を取得したいと考えています。それは実現可能ですか?

インデックスの再構築時にカテゴリのリストを作成し、これらの値をデータベースに書き込む方法もあります。

ご協力いただければ幸いです!

答えて

3

IndexReader.Terms()の方法をご覧ください。

フィールドに空のTermを付けると、そのフィールドのすべての用語を含むTermEnumが返されます。だけに...

を将来の使用のためボーラックのソリューションを拡張するために

TermEnum terms = indexReader.Terms(new Term("category")); 
// enumerate the terms 
+0

問題は、それがのように返すことですインデックスにエントリがあるので、多くのヒット。たとえば、私は150Kの "カテゴリ"に400Kのエントリを持っています。しかし、400Kのエントリが返されます。 –

0

は、ユニークな結果セットを取得するには、次のような条件を反復処理する必要があります。これで

while (null != terms.Term) { 
    If (term.Field.Equals("category")) { 
     // do something with this term 
    } 
    terms.Next(); 
} 
+1

良いですが、実際にはあなたのwhile条件でfieldnameをチェックするか、fieldnameが "category"でなければ中断する必要があります。何も理由なくループしていないので、enumは既にフィールド上に配置されています。 –

+0

私はそれをチェックしなければならないでしょうが、私がテストした限りでは、指定されたフィールドからの1つの用語であり、別のものではなく、最後のものが再び存在することがあります。したがって、私は別のifを実装しました。私が言ったように、私は確信していないので、それを確認する必要があります。 –

関連する問題