我将为Solr实现一个searchcomponent来返回文档主要关键字,使用更像这个有趣的术语。通过lucene docID使用mlt.retrieveInterestingTerms的已实现组件的主要部分不适用于所有文档。我的意思是对于一些文档solr interestingterms返回一些有用的术语作为顶级tf-idf术语;但是,实现的方法返回null!但对于其他文档,两个结果(solr MLT有趣的术语和mlt.retrieveInterestingTerms(docId))是相同的! 你能帮我解决这个问题吗?
public List<String> getKeywords(int docId) throws SyntaxError {
String[] fields = new String[keywordSourceFields.size()];
List<String> terms = new ArrayList<String>();
fields = keywordSourceFields.toArray(fields);
mlt.setFieldNames(fields);
mlt.setAnalyzer(indexSearcher.getSchema().getIndexAnalyzer());
mlt.setMinTermFreq(minTermFreq);
mlt.setMinDocFreq(minDocFreq);
mlt.setMinWordLen(minWordLen);
mlt.setMaxQueryTerms(maxNumKeywords);
mlt.setMaxNumTokensParsed(maxTokensParsed);
try {
terms = Arrays.asList(mlt.retrieveInterestingTerms(docId));
} catch (IOException e) {
LOGGER.error(e.getMessage());
throw new RuntimeException();
}
return terms;
}
注意:
我为所有必需的字段定义了termVectors=true
,我将用它来生成有趣的术语(相应方法中的字段数组)