2011-07-14 84 views
0

我目前正在C#中涉及Lucene庫的一個項目,但是我的項目設計中涉及到索引內文檔的索引問題。我的索引中的文檔已經創建了幾個字段,我希望能夠在這兩個字段之間進行過濾,然後在這個子集中搜索術語,但是我仍然熟悉lucene並且不能完全確定這是否可行。我已經學會了如何執行基本查詢,但我認爲我應該使用lucenes過濾器類,但我不完全確定如何。如果有人可以就此提供建議,我將非常感謝用於在Lucene.net中搜索的過濾器索引

我正在完成的項目涉及索引來自各種電子郵件帳戶的電子郵件。在我的索引文件有以下一些領域: 賬戶(如[email protected]) 文件夾(如發送郵件,收件箱...) 數據:(電子郵件的正文)

我希望能夠過濾我的索引,所以我可以有一個只包含來自特定帳戶和文件夾的文檔的子集,然後我希望能夠搜索該子集的數據字段。

+0

提供有關您正在執行的查詢的詳細信息和數據要應用的過濾器上,將有助於在給予你建議 –

+0

這將是有用的知道你的意思是查詢或過濾器。查詢將直接查找數據,但是使用過濾器從查詢中檢索數據的子集。過濾器是必要的還是我們正在談論獨特的個人電話,因此這將是一個查詢? – dnolan

+1

從你的額外輸入你不需要使用過濾器,但結合在一個布爾查詢中的幾個條件,你使用QueryParser或者你使用BooleanQuery類手動構建你的查詢? –

回答

4

正如@Jf Beaulac建議的那樣,您可以使用BooleanQuery進行「篩選」。

private Query CreateFilteredQuery (string account, string folder, Query criteria) 
{ 
    BooleanQuery bq = new BooleanQuery(); 
    bq.Add(new TermQuery (new Lucene.Net.Index.Term ("account", account)), BooleanClause.Occur.MUST); 
    bq.Add(new TermQuery (new Lucene.Net.Index.Term ("folder", folder)), BooleanClause.Occur.MUST); 
    bq.Add(criteria, BooleanClause.Occur.MUST); 
    return bq; 
} 


Query filteredQuery = CreateFilteredQuery ("[email protected]", "inbox", myQueryParser.Parse (criteria)); 
var hits = myIndexSearcher.Search (filteredQuery); 

以下是有關查詢和過濾器之間的差異一個很好的問題:在田間地頭Why do we use Filters while searching