因此, 我们会有想在不同业务场景自定义文本相似性得分的需求, 在Lucene中可以通过自定义Similarity的方式自定义文本相似性得分, 但是如果我们写死一个自定义公式, 会有下列问题:
每次想调整公式...的实现, 而"custom"是我们自己实现的, 支持通过自定义expression动态写公式, 还可以自定义参数....示例中我们通过自定义的方式自己实现了一个和bm25等效的公式.
expression可以写任何公式, 在公式中可以直接引用下列预设变量, 在运行时会替换为实际值:
idf
boost
tf
dl
avgdl..., 所以如果我们不考虑自定义dl的计算方法, 实际上Similarity是完全可以在Query阶段随意修改的....this.params = new HashMap(params);
this.boost = boost;
this.idf = idf;