为了账号安全,请及时绑定邮箱和手机立即绑定

Lucene 4 setBoost 异常

Lucene 4 setBoost 异常

一只甜甜圈 2019-04-19 16:11:26
在构建文档时,给字段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
                            
查看完整回答
反对 回复 2019-04-19
?
SMILET

TA贡献1796条经验 获得超4个赞

总算搞清楚点了,不能在omitNorms的字段上setBoost,而Lucene4.x的StringField,StoredField,IntField等都是omitNorms的,我测试发现只有TextField是非omitNorms的,故可以在TextFields上setBoost。
现在有个新的问题,给其中一个字段设置了boost,但如果条件里没有这个字段,顺序就没任何变化。而4.x的Document上并没有setBoost方法。
刚实践了一个好办法,添加了一个TextField且所有索引记录的这个字段的值都是一个相同的字,然后在这个字段上setBoost,在查询条件上默认的加上这个字段的查询,关系是SHOULD,就能实现按打分+相关度共同排序了。
                            
查看完整回答
反对 回复 2019-04-19
  • 2 回答
  • 0 关注
  • 541 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信