2012-01-27 63 views
3

我正在使用Lucene來搜索索引,它工作正常。我唯一的問題是,我只需要一個特定的領域返回什麼。你能指定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());

如果你有興趣在加載領域,這將阻止加載領域,反過來,意味着加載文檔時加快速度。我想你可以通過一些Google搜索找到更詳細的信息。

-2

你是什麼意思「返回某些領域」? Document.get()函數僅返回您請求的字段。

+0

這就是我現在使用的,但我只需要一個字段,所以我只是想知道是否有辦法只返回該字段而不是整個文檔。 – aaronj 2012-01-27 19:35:40

+0

@aaron:我還不確定你的意思是「迴歸」。來自'Document.get'的結果文本只是該字段的文本。如果你的意思是你不想存儲其他字段的值,只需將它們標記爲不存儲。 – Xodarap 2012-01-27 21:57:06

+0

-1但'reader.Document'加載整個文檔,而不僅僅是一個字段 – 2012-01-28 20:06:21

-2

是的,你絕對可以做你正在問的東西。您所要做的就是在document.get()方法中包含字段名稱(區分大小寫)。

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

僅供參考,在您的問題中包含一些代碼通常是一個好主意。它使得更容易提供一個好的答案。

+0

我明白你的意思,這就是我現在做。我試圖限制文檔中包含的字段。 – aaronj 2012-01-27 21:37:52

+0

你沒有問如何限制哪些字段包含在文檔中。您問過如何在結果中返回某個字段。我不知道你是否正確的問題。 – SharpBarb 2012-01-27 22:25:14

+0

@SharpBarb,'你問如何返回結果中的某個字段。我不確定你是否正確的問題'請在閱讀我的答案後再次閱讀這個問題。我想我會有道理,然後 – 2012-01-28 22:06:20