2012-01-27 29 views
3

私はLuceneを使用してインデックスを検索しています。私の唯一の問題は、返されるものの特定のフィールドが1つだけ必要なことです。ドキュメント全体ではなく、結果に特定のフィールドだけを返すようにLuceneを指定できますか?Luceneから特定のフィールドのみを返します。検索

答えて

9

これは、FieldSelectorクラスが存在する理由です。あなたは小さなフィールドをロードすることに興味があるなら あなたがこの

class MyFieldSelector : FieldSelector 
{ 
    public FieldSelectorResult Accept(string fieldName) 
    { 
     if (fieldName == "field1") return FieldSelectorResult.LOAD_AND_BREAK; 
     return FieldSelectorResult.NO_LOAD; 
    } 
} 

のようなクラスを実装し、indexReader.Document(docid,new MyFieldSelector());

としてそれを使用することができ、これは、順番に大きなフィールドをロードするために防ぐことができます、ドキュメントを読み込む際のスピードアップを意味します。私はあなたがいくつかのグーグルでより詳細な情報を見つけることができると思います。

-2

「特定のフィールドを返す」とはどういう意味ですか? Document.get()関数は、要求したフィールドだけを返します。

+0

これは私が今使っていることですが、1つのフィールドしか必要ないので、ドキュメント全体ではなくそのフィールドだけを返す方法があるのだろうかと思っていました。 – aaronj

+0

@aaron:私はまだあなたが「リターン」を意味するかどうかはわかりません。 'Document.get'から得られるテキストは、その1つのフィールドのテキストに過ぎません。他のフィールドの値を保存したくない場合は、保存されていないフィールドとしてマークするだけです。 – Xodarap

+0

-1しかし 'reader.Document'は単一のフィールドだけでなく、ドキュメント全体を読み込みます –

-2

はい、間違いなくあなたが聞いていることをすることができます。 document.get()メソッドにフィールド名(大文字小文字を区別)を含めるだけです。

string fieldNameText = doc.Get("fieldName"); 

参考までに、通常、質問にいくつかのコードを含めることをお勧めします。それは良い答えを提供することを容易にします。

+0

私はあなたが言っていることを得ています。今やっている。私はどのフィールドがドキュメントに含まれているかを制限しようとしています。 – aaronj

+0

あなたはどのフィールドを文書に含めるかを制限する方法を尋ねませんでした。結果に特定のフィールドを返す方法を尋ねました。あなたは正しい質問をしているとは確信していません。 – SharpBarb

+0

@SharpBarb、 '結果に特定のフィールドを返す方法を尋ねました。あなたは正しい質問をしているかどうかわからない。私の答えを読んだ後、もう一度質問を読んでください。私はその後、私は意味をなさないと思う。 –

関連する問題