2010-05-16 21 views
19

Wie kann ich verschiedene Analysatoren für jedes Feld in einem Dokument aktivieren, das ich mit Lucene indexiere? Beispiel:Verschiedene Analysatoren für jedes Feld

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

Der Analysator ist ein Argument für den Indexwriter, aber ich will StandardAnalyzer für field1 und SimpleAnalyzer für field2 verwenden, wie kann ich das tun? Das gilt natürlich auch für die Suche. Der korrekte Analysator muss für jedes Feld angewendet werden.

Antwort

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); 
Verwandte Themen