Изменение подобия Elasticsearch делает fieldLength равным 1 - PullRequest
0 голосов
/ 11 июня 2019

Elasticsearch 6.2.3

У меня есть пользовательская реализация простого сходства (scala), которая возвращает только TF.

/**
  * Phrase frequency similarity
  */
object PFSimilarity extends Similarity {

  val Name = "pf-similarity"

  case class TFWeight(boost: Float) extends SimWeight

  override def computeNorm(state: FieldInvertState): Long = 1L

  override def computeWeight(boost: Float, collectionStats: CollectionStatistics, termStats: TermStatistics*): SimWeight =
    TFWeight(boost)

  override def simScorer(weight: Similarity.SimWeight, context: LeafReaderContext): Similarity.SimScorer = {
    val boost = weight.asInstanceOf[TFWeight].boost
    new Similarity.SimScorer() {
      override def score(doc: Int, freq: Float): Float = boost * freq

      override def explain(doc: Int, freq: Explanation): Explanation = {
        val pfExpl = Explanation.`match`(boost * freq.getValue, "query boost * phrase freq")
        Explanation.`match`(pfExpl.getValue, s"score(${PFSimilarity.getClass.getSimpleName}, doc=$doc), computed from:", pfExpl)
      }

      override def computeSlopFactor(distance: Int): Float = 1f

      override def computePayloadFactor(doc: Int, start: Int, end: Int, payload: BytesRef): Float = 1f
    }
  }
}

object PfSimilarityProvider extends SimilarityProvider {
  override def name(): String = PFSimilarity.Name
  override def get(): Similarity = PFSimilarity
}

Когда я переключаюсь с одного сходства на другое , закрывиндекс, изменение настроек и повторное открытие , fieldLength может измениться на 1, и поэтому оценка поиска будет искажена.

Я устанавливаю «pf-Similarity» по умолчанию, затем индексирую статью, затем переключаювернуться к сходству по умолчанию (BM25).Оценка BM25 искажена, потому что fieldLength = 1, даже если текст длинный.Когда я индексирую статью, когда установлено сходство BM25, fieldLength имеет правильное значение.

Поврежденная оценка: corrupted score

Правильная оценка: correct score

Не понимаю, почему это произошло.Может кто-нибудь помочь мне объяснить?Мне также интересно, могу ли я исправить эти испорченные статьи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...