Indexing 这种弹性搜索(进入整个索引)是如何工作的
因此,首先我们得到一个包含所有标记的术语向量列表,然后我们创建一个Indexing 这种弹性搜索(进入整个索引)是如何工作的,indexing,elasticsearch,lucene,comparison,morelikethis,Indexing,elasticsearch,Lucene,Comparison,Morelikethis,因此,首先我们得到一个包含所有标记的术语向量列表,然后我们创建一个映射。 然后createQueue方法将通过删除、停止单词和出现的单词不够来确定分数,计算idf,然后计算给定标记的idf*doc_频率,该频率等于其标记,然后我们保留25个最佳值,但之后它如何工作?它与整个指数相比如何?我读了,但没有解释,或者我没有抓住要点。它从每个术语中创建一个TermQuery,并将它们全部放入一个简单的BooleanQuery,通过先前计算的tfidf分数提高每个术语(boostFactor*myScor
映射。
然后createQueue方法将通过删除、停止单词和出现的单词不够来确定分数,计算idf,然后计算给定标记的idf*doc_频率,该频率等于其标记,然后我们保留25个最佳值,但之后它如何工作?它与整个指数相比如何?我读了,但没有解释,或者我没有抓住要点。它从每个术语中创建一个
TermQuery
,并将它们全部放入一个简单的BooleanQuery
,通过先前计算的tfidf分数提高每个术语(boostFactor*myScore/bestScore
,其中boostFactor可以由用户设置)
这是:
private Query createQuery(PriorityQueue q){
BooleanQuery=新建BooleanQuery();
评分术语评分术语;
浮动最佳分数=-1;
而((scoreTerm=q.pop())!=null){
TermQuery tq=新的TermQuery(新术语(scoreTerm.topField,scoreTerm.word));
如果(增压){
如果(最佳分数==-1){
bestScore=(scoreTerm.score);
}
float myScore=(scoreTerm.score);
tq.setBoost(boostFactor*myScore/bestScore);
}
试一试{
add(tq,BooleanClause.occurrent.SHOULD);
}
catch(BooleanQuery.Toomanycauses忽略){
打破
}
}
返回查询;
}
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;
}