elasticsearch,lucene,comparison,morelikethis,Indexing,elasticsearch,Lucene,Comparison,Morelikethis" /> elasticsearch,lucene,comparison,morelikethis,Indexing,elasticsearch,Lucene,Comparison,Morelikethis" />

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;
}