2010-05-16 5 views
19

Comment activer différents analyseurs pour chaque champ d'un document que j'indexe avec Lucene? Exemple:Différents analyseurs pour chaque champ

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

L'analyseur est un argument de la IndexWriter, mais je veux utiliser StandardAnalyzer pour field1 et SimpleAnalyzer pour field2, comment puis-je faire? La même chose s'applique lors de la recherche, bien sûr. L'analyseur correct doit être appliqué pour chaque champ.

Répondre

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); 
Questions connexes