Re: Text search score formula

From: Paweł Poręba <smmileey@xxxxxxxxx>
To: mongodb-user <mongodb-user@xxxxxxxxxxxxxxxx>
CC: william.berkeley@xxxxxxxxxxx
Date: Thu, 28 Apr 2016 05:34:05 -0700 (PDT)
Why ads?
I'm not sure if that's the whole thing. Looking at the example from the 
tutorial 
<https://docs.mongodb.org/manual/reference/operator/aggregation/meta/#exp._S_meta>, 
we got two groups of results: one with score of 0.75 (1 occurence) and 
second with scores of 1 (2 occurences). First of all, the searched term 
occurs exactly one in every document. So, following your equation they all 
should get 1 score point. Yet they don't. Seems like they are different 
factors included then. What's more, your equation will never succeed with 
result of 0.7 for any integer k.

W dniu czwartek, 26 czerwca 2014 20:58:35 UTC+2 użytkownik William Berkeley 
napisał:

Looking at the code in the master branch (
https://github.com/mongodb/mongo/blob/master/src/mongo/db/fts/fts_spec.h), 
ScoreHelperStruct is define on line 55. It's a per term struct storing the 
count, freq (which is more like a score than a frequency), and a factor exp 
that will be used to weight the frequencies in calculating the score of the 
string.

This struct is used in _scoreStringV2 at line 174 in fts_spec.cpp (
https://github.com/mongodb/mongo/blob/master/src/mongo/db/fts/fts_spec.cpp), 
where one is created for each text token in the input string. The struct 
stores a count of the number of times the term appears (data.count) and a 
computed value freq. The freq is a weighted count that is weighted by 
data.exp in the following manner:

start with exp = 0
each time the term occurs:
if exp = 0, set exp = 1, else set exp = 2 * exp
increment the frequency by 1/exp

So, in fact, you are right that there is a sum of a geometric series here. 
If a term occurs k times, then the freq of the term (which is more like a 
score than a frequency, but it's called freq in the struct) will be
1 + 1/2 + ... + (1/2)^(k - 1) = (1 - (1/2)^k)/(1 - 1/2) = 2(1 - 1/2^k)

This has the effect of the considering subsequent occurrences of the same 
term in the string as less important, with the maximum freq being 2 as the 
number of occurrences of the term in the string gets large. You can see how 
this affects the score of the entire string at line 228, where the 
contribution of the term to the score of the entire string is weighted by 
the term's freq.
Please follow up if you have any further questions about scoring in full 
text search.

-Will

On Friday, June 13, 2014 8:55:54 PM UTC-4, onego...@xxxxxxxxx wrote:

Could someone shed some light regarding the ScoreHelperStruct from 
fts_spec.cpp? I'm sensing a sum of geometric series, but I don't understand 
how that contributes to the scoring.

On Wednesday, May 28, 2014 5:57:16 PM UTC-7, Asya Kamsky wrote:

I don't think it's documented anywhere, so I guess the remaining 
alternative is to check the source code.  All text search code is here:


https://github.com/mongodb/mongo/tree/466ede2ed20cc5abcae3d48b56d78a0eb6e96966/src/mongo/db/fts

Asya



On Mon, May 26, 2014 at 10:50 AM, Przemysław Kalita <prz...@xxxxxxxxx> 
wrote:

Hello,

Could someone provide me the text search score formula?

Thanks

-- 
You received this message because you are subscribed to the Google 
Groups "mongodb-user"
group.
 
For other MongoDB technical support options, see: 
http://www.mongodb.org/about/support/.
--- 
You received this message because you are subscribed to the Google 
Groups "mongodb-user" group.
To unsubscribe from this group and stop receiving emails from it, send 
an email to mongodb-user...@xxxxxxxxxxxxxxxx.
To post to this group, send email to mongod...@xxxxxxxxxxxxxxxx.
Visit this group at http://groups.google.com/group/mongodb-user.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/mongodb-user/372d07af-39c5-423c-8a2a-68b9221fd0b2%40googlegroups.com ;
<https://groups.google.com/d/msgid/mongodb-user/372d07af-39c5-423c-8a2a-68b9221fd0b2%40googlegroups.com?utm_medium=email&utm_source=footer>
.
For more options, visit https://groups.google.com/d/optout.




-- 
You received this message because you are subscribed to the Google Groups "mongodb-user"
group.

For other MongoDB technical support options, see: https://docs.mongodb.org/manual/support/
--- 
You received this message because you are subscribed to the Google Groups "mongodb-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email to mongodb-user+unsubscribe@xxxxxxxxxxxxxxxx.
To post to this group, send email to mongodb-user@xxxxxxxxxxxxxxxx.
Visit this group at https://groups.google.com/group/mongodb-user.
To view this discussion on the web visit https://groups.google.com/d/msgid/mongodb-user/82f54195-75a9-4290-b5f5-0f20f2dcf719%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Why ads?