深入浅出 jackrabbit 三 创建 document
2009-09-17 00:00:00 来源:WEB开发网从这个注释的流程来看,最重要的应该是createFulltextField方法,那么我们再进去看看,我们就会发现创建field的方法:
Java代码
new Field(FieldNames.FULLTEXT, value, stored,
Field.Index.TOKENIZED, Field.TermVector.WITH_OFFSET)
(注意这里的WITH_OFFSET,证明FULLTEXT确实是把term对应的offset放到索引中的。在查询FULLTEXT的时候将会用到这个属性,这样做的目的是避免实时分词,提高高亮的性能)
所以这个方法中创建了一个新的field类型,FieldNames.FULLTEXT
它的值为:_:FULLTEXT,这样我们就得到了第6种field,_:FULLTEXT
接下来,我们看看addBooleanValue方法:
Java代码
Field field = new Field(FieldNames.PROPERTIES,
FieldNames.createNamedValue(fieldName, internalValue),
store ? Field.Store.YES : Field.Store.NO, Field.Index.NO_NORMS,
Field.TermVector.NO);
简单的不能再简单了,这里又多了一种field,它的name是FieldNames.PROPERTIES,他的值是:_:PROPERTIES,这样我们就得到了第7种field:_:PROPERTIES。同样,需要注意的是,这个field可能会被创建多次,如果你的node中有同类型的多个boolean值的话。而且更需要注意的是不只是BOOLEAN,还有DATE,DOUBLE,LONG等等,都是这个 name,lucene将会把这些同名的field的值最后拼接起来,形成一个field。
那么我们再来看看上面提到的第3个方法:
addStringValue
Java代码
protected void addStringValue(Document doc, String fieldName,
Object internalValue, boolean tokenized,
boolean includeInNodeIndex, float boost) {
// simple String
String stringValue = (String) internalValue;
//先把这个stringvalue加到_:PROPERTIES这个field中。
doc.add(createFieldWithoutNorms(fieldName, stringValue, false));
//jcr:uuid这个属性也是string,但是不需要执行下面的if,但是除这个属性之外的其他属性,执行下面的放并创建一个field。
if (tokenized) {
if (stringValue.length() == 0) {
return;
}
// create fulltext index on property
int idx = fieldName.indexOf(':');
//创建fieldname
fieldName = fieldName.substring(0, idx + 1)
+ FieldNames.FULLTEXT_PREFIX + fieldName.substring(idx + 1);
Field f = new Field(fieldName, stringValue,
Field.Store.NO,
Field.Index.TOKENIZED,
Field.TermVector.NO);
//注意这里的Field.TermVector是NO,所以这个property如
//果需要高亮,那么不可避免再次实时分词,这一点在查询的代码里写的很清//楚。
f.setBoost(boost);
doc.add(f);
//这段代码好奇怪哦,为啥对这个string要创建fulltext呢?
if (includeInNodeIndex) {
// also create fulltext index of this value
doc.add(createFulltextField(stringValue));
}
}
}
Tags:深入浅出 jackrabbit 创建
编辑录入:爽爽 [复制链接] [打 印]- ››深入浅出实战攻防恶意PDF文档
- ››创建基于PPTP的站点到站点VPN连接:ISA2006系列之...
- ››创建基于L2TP的站点到站点的VPN连接:ISA2006系列...
- ››创建一个Twisted Reactor TCP服务器
- ››创建Windows Mobile上兼容性好的UI 程序
- ››创建android的Service
- ››创建远古部落环境与原住民角色
- ››创建并扩展Apache Wicket Web应用
- ››创建不在任务条中显示窗口按钮的应用
- ››创建 Android 文件系统(Root file system)
- ››创建 Android 系统步骤简介
- ››创建 Android SD Card 映像的方法
更多精彩
赞助商链接