Расчет очков для Solr - это нечто очень сложное. Здесь, вы должны начать с the primal equation:
счет (д, д) = Корд (д, д) · queryNorm (д) · Σ (тс (т в д) · IDF (т) 2 · t.getBoost() · норма (т, д))
Вы имеете tf
параметр, который представляет частоту термина и его значение является SquareRoot частоты термина.
У вас также есть norm
(aka fieldNorm
), который используется в расчетах fieldWeight
. Давайте возьмем ваш пример:
Ссылка Ссылка Ссылка Ссылка Ссылка
Ваша оценка будет рассчитать, как (вы можете увидеть это, добавив debugQuery
параметр):
5.9249415 = fieldWeight, product of:
2.236068 = tf(freq=5.0), with freq of:
5.0 = termFreq=5.0
idf (wich will be the same for all your scores)
0.4375 = fieldNorm(doc=177)
ссылка
6.037953= fieldWeight, product of:
1.0 = tf(freq=1.0), with freq of:
1.0 = termFreq=1.0
idf (wich will be the same for all your scores)
1.0 = fieldNorm
Здесь link
имеет лучший результат, потому что fieldWeight
является продуктом tf
, idf
и fieldNorm
. Этот последний выше для документа link
, потому что он содержит только один термин.
Как и выше документации сказал:
lengthNorm - вычисляется, когда документ добавляется к индексу в соответствии с количеством маркеров этого поля в документе, так , что более короткие поля вносят больший вклад в Гол.
Чем больше терминов у вас есть в поле, тем ниже fieldNorm
будет. Будьте осторожны с value of this field.
Итак, здесь у вас идеальное сочетание, чтобы понять, что оценка не рассчитывается только с частотой, а также с количеством термина, которое у вас есть в вашей области.
У вас есть идея о том, как получить частоту слова на нескольких словах в solr 5.2.1. например, используя функцию termfreq (Field, 'searchterm), я получаю частоту только для точного соответствия. но не для каждого слова внутри одной кавычки. –
Спасибо за помощь, но моя забота о том, что solr возвращает результат, который сбивает с толку, см. 2) Link Link Link Link Link ==> 5.9249415 оценка, которая должна быть самой низкой по сравнению с другими. У вас есть идея о том, как получить частоту слова на несколько слов в solr 5.2.1. например, используя функцию termfreq (Field, 'searchterm), я получаю частоту только для точного соответствия. но не для каждого слова внутри одной кавычки. –
Как я уже сказал, для «Link Link Link Link Link» у вас есть более низкий 'fieldNorm', но более высокий' tf', поэтому для заказа вам нужно сделать комбинацию между этими двумя коэффициентами! – alexf