Mercurial Hosting > luan
diff src/luan/modules/lucene/SupplementingConfig.java @ 1528:3bd4d7963456
use goodjava/lucene/api
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 26 Jul 2020 23:11:53 -0600 |
parents | |
children | e6d808f40bbc |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/luan/modules/lucene/SupplementingConfig.java Sun Jul 26 23:11:53 2020 -0600 @@ -0,0 +1,49 @@ +package luan.modules.lucene; + +import java.util.Map; +import java.util.Collections; +import org.apache.lucene.index.IndexWriterConfig; +import org.apache.lucene.index.SnapshotDeletionPolicy; +import org.apache.lucene.util.Version; +import goodjava.lucene.queryparser.MultiFieldParser; +import goodjava.lucene.api.MultiFieldParserConfig; +import goodjava.lucene.api.MoreFieldInfo; +import luan.LuanFunction; +import luan.LuanTable; +import luan.LuanCloner; +import luan.LuanException; +import luan.LuanRuntimeException; + + +final class SupplementingConfig extends MultiFieldParserConfig { + private final LuanFunction supplementer; + + SupplementingConfig(Version luceneVersion,MultiFieldParser mfp,LuanFunction supplementer) { + super(luceneVersion,mfp); + LuanCloner cloner = new LuanCloner(LuanCloner.Type.COMPLETE); + this.supplementer = (LuanFunction)cloner.get(supplementer); + } + + public IndexWriterConfig newLuceneConfig() { + IndexWriterConfig luceneConfig = super.newLuceneConfig(); + SnapshotDeletionPolicy snapshotDeletionPolicy = new SnapshotDeletionPolicy(luceneConfig.getIndexDeletionPolicy()); + luceneConfig.setIndexDeletionPolicy(snapshotDeletionPolicy); + return luceneConfig; + } + + public MoreFieldInfo getMoreFieldInfo(Map<String,Object> storedFields) { + if( supplementer == null ) + return super.getMoreFieldInfo(storedFields); + try { + LuanTable tbl = LuceneIndex.toTable(supplementer.luan(),storedFields); + tbl = (LuanTable)supplementer.call(tbl); + if( tbl == null ) { + return super.getMoreFieldInfo(storedFields); + } else { + return new MoreFieldInfo(LuceneIndex.toLucene(tbl),Collections.emptyMap()); + } + } catch(LuanException e) { + throw new LuanRuntimeException(e); + } + } +}