[[查询时提升]] === 查询时提升
在 <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 要高.
==================================================