2015-04-22 1 views
9

Voglio sapere come MongoDB sta calcolando il punteggio del testo nella ricerca full-text. Come se cercherò samsung note edge in seguenti:Come viene calcolato il campo textScore nella ricerca full text in mongodb?

Samsung Galaxy Note Edge 
Samsung Galaxy Note 4 
Samsung Galaxy S6 Edge 
Samsung Galaxy Note 4 duos 
Samsung Z 

Testo integrale Cerca nel modo seguente:

db.mobiles.find({ 
    $text : {$search : "samsung note edge"} 
}, { 
    score : {$meta : "textScore" } 
}).sort({ 
    score : {$meta : "textScore" } 
}) 

mi sta dando risultato come segue:

{ 
    name : "Samsung Galaxy Note Edge", 
    score: 1.875000 
}, 
{ 
    name : "Samsung Galaxy Note 4", 
    score: 1.250000 
}, 
{ 
    name : "Samsung Galaxy S6 Edge", 
    score: 1.250000 
}, 
{ 
    name : "Samsung Galaxy Note 4 duos", 
    score: 1.200000 
}, 
{ 
    name : "Samsung Z", 
    score: 0.750000 
} 

I risultati sono diversi, se Cercherò per Samsung edge

+1

passare attraverso https://groups.google .com/forum/#! argomento/mongodb-user/99t5WXmUUAg – Vishwas

risposta

0

inizio con exp = 0 ogni volta che si verifica il termine: se exp = 0, impostare exp = 1, altrimenti impostato exp = 2 * exp incremento della frequenza di 1/exp

Così, infatti, si è giusto che c'è una somma di una serie geometrica qui. Se un termine si verifica k volte, allora la freq del termine (che è più come un punteggio che una frequenza, ma è chiamata freq nella struttura) sarà 1 + 1/2 + ... + (1/2)^(k - 1) = (1 - (1/2)^k)/(1 - 1/2) = 2 (1 - 1/2^k)