在构建文档时,给字段setBoost爆异常:java.lang.IllegalArgumentException:Youcannotsetanindex-timeboostonanunindexedfield,oronethatomitsnorms代码为:Documentdoc=newDocument();Fieldf=newFloatField("x",10.0,Field.Store.YES);f.setBoost(10.0);doc.add(f);Lucene版本4.6.0,求指教!
2 回答
烙印99
TA贡献1829条经验 获得超13个赞
FieldTypefieldType=newFieldType(StringField.TYPE_STORED);fieldType.setOmitNorms(false);FieldcountryField=newField("country",country,getNormStringField());countryField.setBoost("China".equals(country)?5f:1f);FloatField是不支持setBoost的。需要创建自定义的FieldType
SMILET
TA贡献1796条经验 获得超4个赞
总算搞清楚点了,不能在omitNorms的字段上setBoost,而Lucene4.x的StringField,StoredField,IntField等都是omitNorms的,我测试发现只有TextField是非omitNorms的,故可以在TextFields上setBoost。现在有个新的问题,给其中一个字段设置了boost,但如果条件里没有这个字段,顺序就没任何变化。而4.x的Document上并没有setBoost方法。刚实践了一个好办法,添加了一个TextField且所有索引记录的这个字段的值都是一个相同的字,然后在这个字段上setBoost,在查询条件上默认的加上这个字段的查询,关系是SHOULD,就能实现按打分+相关度共同排序了。
添加回答
举报
0/150
提交
取消