2015-11-03 3 views
0

Мы интегрировали поиск solr с проектом .net, но перед нами стоят некоторые проблемы, связанные с повышением или забиванием документа solr.Solr document Scoring/Boosting работает не так, как ожидалось

Задача: Solr не возвращает оценку в соответствии с частотой в документе.

Например: - Мы создали четыре документа, название которого содержит термин «Link» и Solr вернулся счет, как показано ниже:

1)Link ==> 6.037953 
2)Link Link Link Link Link ==> 5.9249415 
3)Link Link ==> 5.374235 
4)Link Link Link ==> 5.2746024 

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

ответ

1

Расчет очков для 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.

Итак, здесь у вас идеальное сочетание, чтобы понять, что оценка не рассчитывается только с частотой, а также с количеством термина, которое у вас есть в вашей области.

+0

У вас есть идея о том, как получить частоту слова на нескольких словах в solr 5.2.1. например, используя функцию termfreq (Field, 'searchterm), я получаю частоту только для точного соответствия. но не для каждого слова внутри одной кавычки. –

+0

Спасибо за помощь, но моя забота о том, что solr возвращает результат, который сбивает с толку, см. 2) Link Link Link Link Link ==> 5.9249415 оценка, которая должна быть самой низкой по сравнению с другими. У вас есть идея о том, как получить частоту слова на несколько слов в solr 5.2.1. например, используя функцию termfreq (Field, 'searchterm), я получаю частоту только для точного соответствия. но не для каждого слова внутри одной кавычки. –

+0

Как я уже сказал, для «Link Link Link Link Link» у вас есть более низкий 'fieldNorm', но более высокий' tf', поэтому для заказа вам нужно сделать комбинацию между этими двумя коэффициентами! – alexf

Смежные вопросы