【问题标题】:how does More_like_this elasticsearch work (into the whole index)More_like_this elasticsearch如何工作(进入整个索引)
【发布时间】:2015-06-26 10:25:53
【问题描述】:

首先我们得到一个包含所有标记的 termVectors 列表,然后我们创建一个map<token, frequency in the document>. 然后方法 createQueue 将通过删除、stopWords 和出现不足的单词来确定分数,计算 idf,然后是给定令牌的 idf * doc_frequency 等于它的令牌,然后我们保留 25 个最好的,但之后如何这行得通?它与整个指数相比如何?我读了http://cephas.net/blog/2008/03/30/how-morelikethis-works-in-lucene/,但这并没有解释它,或者我没有抓住重点。

【问题讨论】:

    标签: 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-27
      相关资源
      最近更新 更多