[[查询时提升]] === 查询时提升
在 <boost
来使得一个查询项比其它的更重要.
例如:
[source,json]
GET /_search { "query": { "bool": { "should": [ { "match": { "title": { "query": "quick brown fox", "boost": 2 <1> } } }, { "match": { <2> "content": "quick brown fox" } } ] } }2>1>
}
<1> 查询项 title
的重要性是查询项 content
的2倍, 因为它被因数 2
提升了.1>
<2> 没有 boost
值的查询项会拥有一个默认因数为 1
的提升.2>
查询时提升 是用于调节相关性的主要工具. 任何类型的查询都接受 boost
参数.
((("boost parameter", "setting value"))) 把 boost
设置为 2
并不会简单的加倍最后的 _score
;
实际使用的 boost 值取决于标准化和一些内置的优化. 然而, 它确实意味着 boost 值为 2
的项的重要性是 boost 值为 1
的项的2倍.
事实上, 对于一个实际的查询项,没有简单的算法来决定 正确'' 的 boost 值,它是边做边看的事.
要记得 `boost` 仅仅是影响相关性分数的因素之一; 它必须与其它因素竞争. 例如, 在之前的例子里,
`title` 字段相较于 `content 字段,可能已经有了一个
自然的'' 提升, 这归功于 ((("field-length norm"))) <
==== 提升一个索引
当在多个索引间搜索时, ((("boosting", "query-time", "boosting an index")))((("indices", "boosting an index"))) 你可以通过 indices_boost
参数提升这些索引中的某一个索引.
((("indices_boost parameter"))) 下面的例子中使用了这种方法, 使得最近的索引文档拥有更高的权重:
[source,json]
GET /docs2014*/_search <1> { "indices_boost": { <2> "docs_2014_10": 3, "docs_2014_09": 2 }, "query": { "match": { "text": "quick brown fox" } }2>1>
}
<1> 该多索引搜索包含了所有以 docs_2014_
开头的索引.1>
<2> 索引 docs_2014_10
中的文档将被因数 3
提升, docs_2014_09
中的文档被因数 2
提升, 其它匹配的索引将被默认的因数 1
提升.2>
==== t.getBoost()
boost 值可以通过 <t.getBoost()
获得.
((("practical scoring function", "t.getBoost() method")))((("boosting", "query-time", "t.getBoost()")))((("t.getBoost() method")))
提升不会被应用在出现查询 DSL 的地方. 而是任何 boost 值都会被合并、传递到单独的 terms 中.
t.getBoost()
方法会返回任意应用到 term本身或更高阶查询链的 boost
值.
[TIP]
事实上, 阅读 <explanation
看到它提到过 boost
值或 t.getBoost()
.
提升是被放入了应用于特殊term的<queryNorm
对于每一个 term 都是相同的, 但是你会发现已提升的term的 queryNorm
要比未提升的term 的 queryNorm
要高.
==================================================