最近需要些一个可配置的索引构建程序,需要在运行时调用Lucene包的如下类及其成员:
引用
Nested Class Summary
static class Field.Index
Specifies whether and how a field should be indexed.
static class Field.Store
Specifies whether and how a field should be stored.
static class Field.TermVector
Specifies whether and how a field should have term vectors.
lucene api中称之为Nested Class,意为嵌套类,而嵌套类内部的File.Index的成员又是静态成员。
引用
Field Summary
static Field.Index ANALYZED
Index the tokens produced by running the field's value through an Analyzer.
static Field.Index ANALYZED_NO_NORMS
Expert: Index the tokens produced by running the field's value through an Analyzer, and also separately disable the storing of norms.
static Field.Index NO
Do not index the field value.
static Field.Index NO_NORMS
Deprecated. This has been renamed to NOT_ANALYZED_NO_NORMS
static Field.Index NOT_ANALYZED
Index the field's value without using an Analyzer, so it can be searched.
static Field.Index NOT_ANALYZED_NO_NORMS
Expert: Index the field's value without an Analyzer, and also disable the storing of norms.
static Field.Index TOKENIZED
Deprecated. this has been renamed to ANALYZED
static Field.Index UN_TOKENIZED
Deprecated. This has been renamed to NOT_ANALYZED
一个棘手的问题,如果获得这些内部静态成员?
最后采用了如下方法:
//运行时调用Filed.Index类型
Java代码
Class<?> cls = org.apache.lucene.document.Field.Index.class;
java.lang.reflect.Field indexDeclareField = cls.getDeclaredField(field.getIndex());
Object indexDeclareFieldType = indexDeclareField.get(cls);
org.apache.lucene.document.Field.Index filedIndex = (org.apache.lucene.document.Field.Index)indexDeclareFieldType;
//运行时调用Field.Store类型
Class<?> clsStore = org.apache.lucene.document.Field.Index.class;
java.lang.reflect.Field storeDeclareField = cls.getDeclaredField(field.getIndex());
Object indexStoreDeclareField = indexDeclareField.get(cls);
org.apache.lucene.document.Field.Store filedStore = (org.apache.lucene.document.Field.Store)indexStoreDeclareField;
|