2010-05-16 74 views
19

我如何爲文檔中的每個字段啓用不同的分析儀我使用Lucene進行索引?例如:各個領域的不同分析儀

 RAMDirectory dir = new RAMDirectory(); 
     IndexWriter iw = new IndexWriter(dir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_CURRENT), true, IndexWriter.MaxFieldLength.UNLIMITED); 
     Document doc = new Document(); 
     Field field1 = new Field("field1", someText1, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS); 
     Field field2 = new Field("field2", someText2, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS); 
     doc.Add(field1); 
     doc.Add(field2); 
     iw.AddDocument(doc); 
     iw.Commit(); 

該分析儀的一個參數IndexWriter類,但我想用StandardAnalyzer爲Field 1和SimpleAnalyzer的場2,我該怎麼辦呢?當然,搜索時也是如此。正確的分析儀必須適用於每個領域。

回答

7
Map<String, Analyzer> analyzerMap = new HashMap<String, Analyzer>(); 
analyzerMap.put(fieldone, new IKAnalyzer4PinYin(false, IKAnalyzer4PinYin.PINYIN)); 
analyzerMap.put(fieldtwo, new IKAnalyzer4PinYin(false, KAnalyzer4PinYin.PINYIN_SHOUZIMU)); 
PerFieldAnalyzerWrapper wrapper = new PerFieldAnalyzerWrapper(new IKAnalyzer4PinYin(false), analyzerMap); 

IndexWriterConfig iwConfig = new IndexWriterConfig(Version.LUCENE_40 , wrapper);