For multiterm queries, Lucene takes the Boolean model, TF/IDF, and the vector space model and combines them in a single efficient package that collects matching documents and scores them as it goes.
A multiterm query like
GET /my_index/doc/_search { "query": { "match": { "text": "quick fox" } } }
As soon as a document matches a query, Lucene calculates its score for that query, combining the scores of each matching term. The formula used for scoring is called the practical scoring function.
score(q,d) =
queryNorm(q)
· coord(q,d)
· ∑ (
tf(t in d)
· idf(t)²
· t.getBoost()
· norm(t,d)
) (t in q)
|
|
|
|
|
|
The sum of the weights for each term |
|
|
|
|
|
|
|
|
You should recognize score
, tf
, and idf
. The queryNorm
, coord
, t.getBoost
, and norm
are new.
We will talk more about query-time boosting later in this chapter, but first let’s get query normalization, coordination, and index-time field-level boosting out of the way.
queryNorm = 1 / √sumOfSquaredWeights
The |
The same query normalization factor is applied to every document, and you have no way of changing it. For all intents and purposes, it can be ignored. (每个文档都有这个因子,说明它没有什么卵用!)
The coordination factor (coord
) is used to reward documents that contain a higher percentage of the query terms. The more query terms that appear in the document, the greater the chances that the document is a good match for the query.
The coordination factor results in the document that contains all three terms being much more relevant than the document that contains just two of them.
本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/bonelee/p/6475880.html,如需转载请自行联系原作者