2013-04-04 60 views
1

我已閱讀如何使用每場分析器包裝,但無法讓它與我的自定義分析器一起工作。我甚至無法讓分析器運行構造函數,這讓我相信我實際上錯誤地調用了每場分析器。Lucene.net PerFieldAnalyzerWrapper

下面是我在做什麼:

創建每場分析:

PerFieldAnalyzerWrapper perFieldAnalyzer = new PerFieldAnalyzerWrapper(srchInfo.GetAnalyzer(true)); 
perFieldAnalyzer.AddAnalyzer("<special field>", dta); 

所有字段添加文件做像往常一樣,包括我們分析不同的特殊領域。

而且使用分析儀這樣的添加文件:

iw.AddDocument(doc, perFieldAnalyzer); 

我在正確的軌道上?

+0

假設你正在使用Lucene 3.x中,看起來沒事,給我。是否拋出異常?究竟是什麼問題? – femtoRgon 2013-04-04 21:13:48

回答

1

的問題是有關我的的CMS(Kentico)的依賴內置的Lucene的輔助類。基本上,使用這些類需要通過CMS在索引級指定自定義分析器,我不希望這樣做。所以我最終直接使用Lucene.net幾乎在任何地方都可以獲得使用任何自定義分析器的靈活性

我還對結構數據做了一些更改,並最終使用經過驗證的KeywordAnalyzer分析文檔標籤。以前我試圖在逗號分隔值上做一些自定義標記化魔術,比如[tag1,tag2,帶有很多部分的標籤],並且不能可靠地使用多部分標籤。我仍然保留該字段,但開始在文檔中添加多個「標籤」字段,每個字段存儲一個標籤。所以現在我有N個「標籤」字段用於「N」標籤,每個標籤都被分析爲一個關鍵字,這意味着每個標籤(一個字或多個標籤)都是一個標籤。

我想我用我最初的方法推翻了它。

這就是我最終的結果。

在索引:

KeywordAnalyzer ka = new KeywordAnalyzer(); 
PerFieldAnalyzerWrapper perFieldAnalyzer = new PerFieldAnalyzerWrapper(srchInfo.GetAnalyzer(true)); 
perFieldAnalyzer.AddAnalyzer("documenttags_t", ka); 

-- Some procedure to compile all documents by reading from DB and putting into Lucene docs 

foreach(var doc in docs) 
{ 
    iw.AddDocument(doc, perFieldAnalyzer); 
} 

在搜索:

KeywordAnalyzer ka = new KeywordAnalyzer(); 
PerFieldAnalyzerWrapper perFieldAnalyzer = new PerFieldAnalyzerWrapper(srchInfo.GetAnalyzer(true)); 
perFieldAnalyzer.AddAnalyzer("documenttags_t", ka); 

string baseQuery = "documenttags_t:\"" + tagName + "\""; 
Query query = _parser.Parse(baseQuery); 
var results = _searcher.Search(query, sortBy)