【问题标题】:how does More_like_this elasticsearch work (into the whole index)More_like_this elasticsearch如何工作(进入整个索引)
【发布时间】:2015-06-26 10:25:53
【问题描述】:
【问题讨论】:
标签:
indexing
elasticsearch
lucene
comparison
morelikethis
【解决方案1】:
它从这些术语中的每一个中创建一个TermQuery,并将它们全部放入一个简单的BooleanQuery,通过先前计算的 tfidf 分数来提升每个术语(boostFactor * myScore / bestScore,其中 boostFactor 可以由用户设置) .
这里是the source (version 5.0):
private Query createQuery(PriorityQueue<ScoreTerm> q) {
BooleanQuery query = new BooleanQuery();
ScoreTerm scoreTerm;
float bestScore = -1;
while ((scoreTerm = q.pop()) != null) {
TermQuery tq = new TermQuery(new Term(scoreTerm.topField, scoreTerm.word));
if (boost) {
if (bestScore == -1) {
bestScore = (scoreTerm.score);
}
float myScore = (scoreTerm.score);
tq.setBoost(boostFactor * myScore / bestScore);
}
try {
query.add(tq, BooleanClause.Occur.SHOULD);
}
catch (BooleanQuery.TooManyClauses ignore) {
break;
}
}
return query;
}