Lucene 每个字段使用不同的分析仪

Lucene 每个字段使用不同的分析仪,lucene,lucene.net,Lucene,Lucene.net,如何为我正在使用Lucene编制索引的文档中的每个字段启用不同的分析器?例如: RAMDirectory dir = new RAMDirectory(); IndexWriter iw = new IndexWriter(dir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_CURRENT), true, IndexWriter.MaxFieldLength.UNLIMITED); Do

如何为我正在使用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();
analyzer是IndexWriter的一个参数,但我想在field1中使用StandardAnalyzer,在field2中使用SimpleAnalyzer,我该怎么做?当然,搜索时也是如此。必须为每个字段应用正确的分析器。

就是您要寻找的。在Lucene.net中,与此等效的是。

Map analyzerMap=new HashMap();
analyzerMap.put(fieldone,新IkaAnalyzer4pinyin(false,IkaAnalyzer4pinyin.PINYIN));
analyzerMap.put(fieldtwo,新IkaAnalyzer4pinyin(false,假名解析器4pinyin.PINYIN_-SHOUZIMU));
PerfielDanalyzerRapper包装器=新的PerfielDanalyzerRapper(新的IKAnalyzer4PinYin(假),analyzerMap);
IndexWriterConfig iwConfig=新的IndexWriterConfig(Version.LUCENE_40,包装器);
亡灵巫术。
对于C#:

Lucene.Net.Util.LuceneVersion=Lucene.Net.Util.LuceneVersion.Lucene_48;
字典字段分析器=
新字典(System.StringComparer.OrdinalIgnoreCase);
fieldAnalyzers[“YourFieldName”]=新的Lucene.Net.Analysis.Core.KeywordAnalyzer();
Lucene.Net.Analysis.Miscellaneous.perfielDanalyzerRapper包装=
新Lucene.Net.Analysis.Miscellaneous.perfielDanalyzerRapper(
新的Lucene.Net.Analysis.Core.KeywordAnalyzer(),fieldAnalyzers);
Lucene.Net.Index.IndexWriterConfig writerConfig=新的Lucene.Net.Index.IndexWriterConfig(版本,包装器);
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);
Lucene.Net.Util.LuceneVersion version = Lucene.Net.Util.LuceneVersion.LUCENE_48;

Dictionary<string, Lucene.Net.Analysis.Analyzer> fieldAnalyzers = 
    new Dictionary<string, Lucene.Net.Analysis.Analyzer>(System.StringComparer.OrdinalIgnoreCase);

fieldAnalyzers["YourFieldName"] = new Lucene.Net.Analysis.Core.KeywordAnalyzer();

Lucene.Net.Analysis.Miscellaneous.PerFieldAnalyzerWrapper wrapper = 
    new Lucene.Net.Analysis.Miscellaneous.PerFieldAnalyzerWrapper(
        new Lucene.Net.Analysis.Core.KeywordAnalyzer(), fieldAnalyzers);

Lucene.Net.Index.IndexWriterConfig writerConfig = new Lucene.Net.Index.IndexWriterConfig(version, wrapper);