java - lucene 文档字段 setBoost 错误

标签 java lucene

正如 lucene 迁移指南提到的,要设置文档级别提升,我们应该将所有字段提升乘以提升值。这是我的代码:

    StringField nameField = new StringField("name", name, Field.Store.YES) ;
    StringField linkField = new StringField("link", link, Field.Store.YES);
    Field descField;
    TextField reviewsField = new TextField("reviews", reviews_str, Field.Store.YES);
    TextField authorsField = new TextField("authors", authors_str, Field.Store.YES);        
    FloatField scoreField = new FloatField("score", origScore,Field.Store.YES);
    if (desc != null) {
        descField = new TextField("desc", desc, Field.Store.YES);
    } else {
        descField = new TextField("desc", "", Field.Store.YES);
    }


    doc.add(nameField);
    doc.add(linkField);
    doc.add(descField);
    doc.add(reviewsField);
    doc.add(authorsField);
    doc.add(scoreField);


    nameField.setBoost(score);
    linkField.setBoost(score);
    descField.setBoost(score);
    reviewsField.setBoost(score);
    authorsField.setBoost(score);
    scoreField.setBoost(score);

但是我在运行代码时遇到了这个异常:

Exception in thread "main" java.lang.IllegalArgumentException: You cannot set an index-time boost on an unindexed field, or one that omits norms

我用谷歌搜索过。但我没有答案。你能帮我一下吗?

最佳答案

索引时间提升存储在字段的范数中,并且 StringField 和 FloatField 默认情况下都会忽略范数。因此,您需要在设置增强之前将它们打开。

要启用规范,您需要定义自己的字段类型:

//Start with a copy of the standard field type
FieldType myStringType = new FieldType(StringField.TYPE_STORED);
myStringType.setOmitNorms(false);
//StringField doesn't do anything special except have a customized fieldtype, so just use Field.
Field nameField = new Field("name", name, myStringType);

FieldType myFloatType = new FieldType(FloatField.TYPE_STORED);
myFloatType.setOmitNorms(false);
//For FloatField, use the appropriate FloatField ctor, instead of Field (similar for other numerics)
Field scoreField = new FloatField("score", origScore, myFloatType);

关于java - lucene 文档字段 setBoost 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28109237/

相关文章:

java - 在java中对变量应用AND操作

java - Hibernate 不会自动创建表

java - 自动更新嵌套项的 TreeView

sql - 返回统计信息而不是点击的关键字搜索引擎

performance - 索引大小对搜索速度的影响(存储或不存储)

java - 将日期从一个时区转换为本地时区

java - jsp页面报错怎么解决?

java - 在 Hibernate Search 中使用多个关键字进行索引搜索

lucene - ElasticSearch:根据字段长度过滤文档

java - MassIndexer.createIndexer() 在索引多个实体类型时卡住