2010-05-16 18 views
19

Lucene ile indekslediğim bir belgedeki her alan için farklı analizörleri nasıl etkinleştirebilirim? Örnek:Her alan için farklı analiz araçları

 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(); 

bunu yapabilirim, nasıl analizörü IndexWriter bir argüman, ama alan2 için alan1 ve SimpleAnalyzer için StandardAnalyzer kullanmak istiyor? Aynı şey arama yaparken de geçerlidir. Her alan için doğru analizör uygulanmalıdır.

cevap

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); 
İlgili konular