我正在使用 Lucene 实现单词搜索。我想为每个文档添加两个字段:一个标题字段,其中包含文档中的前 100 个字符和一个内容字段,其中包含文档中的其余字符。
ContentHandler handler = new BodyContentHandler();
try {
parser.parse(is, handler, metadata);
} finally {
is.close();
}
Document doc = new Document();
Field titleField = new Field("title",
handler.toString().substring(0, 100),
Field.Store.YES,
Field.Index.ANALYZED_NO_NORMS);
Field contentsField = new Field("contents",
handler.toString().substring(101),
Field.Store.YES,
Field.Index.ANALYZED_NO_NORMS);
我想为每个字段添加提升:我希望标题占 70%,内容占 30%。
我这样做是这样的:
titleField.setBoost(1.70f);
doc.add(titleField);
doc.add(contentsField);
doc.add(new Field("filename", metadata.get(Metadata.RESOURCE_NAME_KEY),
Field.Store.YES, Field.Index.ANALYZED));
但是,我看不到文件的差异。
在计算得分时,字段的长度是否重要?
我也尝试实现一个扩展 DefaultSimilarity 的类,但它没有帮助。
class IsolationSimilarity extends DefaultSimilarity {
public IsolationSimilarity(){
}
@Override
public float idf(int docFreq, int numDocs) {
return(float)1.0;
}
@Override
public float coord(int overlap, int maxOverlap) {
return 1.0f;
}
@Override
public float lengthNorm(String fieldName, int numTokens){
return 1.0f;
}
}