【Elasticsearch】track_total_hits
在 Elasticsearch 中,`track_total_hits` 是一个查询参数,用于控制是否精确计算搜索结果的总命中数(`total hits`)。默认情况下,Elasticsearch 在某些情况下可能会对总命中数进行近似计算,以提高性能。`track_total_hits` 参数允许你显式地控制这种行为。
背景
在 Elasticsearch 中,当查询返回大量结果时,精确计算总命中数可能会消耗较多资源。因此,Elasticsearch 在某些情况下会返回一个近似的总命中数。从 Elasticsearch 7.0 开始,`track_total_hits` 参数被引入,以提供更灵活的控制。
参数值
`track_total_hits` 参数可以接受以下几种值:
1. `true`:始终精确计算总命中数,无论结果集大小如何。
2. `false`:始终返回近似的总命中数。
3. `number`(正整数):当返回的文档数量小于或等于这个值时,精确计算总命中数;否则返回近似值。
默认行为
从 Elasticsearch 7.0 开始,默认行为是:
- 如果返回的文档数量小于或等于 10,000,则精确计算总命中数。
- 如果返回的文档数量超过 10,000,则返回近似的总命中数。
使用场景
1. 精确计算总命中数:
如果你需要精确的总命中数,无论结果集大小如何,可以将 `track_total_hits` 设置为 `true`。例如:
```json
GET /your_index/_search
{
"query": {
"match_all": {}
},
"track_total_hits": true
}
```
2. 近似计算总命中数:
如果你对总命中数的精确性要求不高,可以将 `track_total_hits` 设置为 `false`,以提高查询性能。例如:
```json
GET /your_index/_search
{
"query": {
"match_all": {}
},
"track_total_hits": false
}
```
3. 自定义阈值:
如果你希望在返回的文档数量小于某个特定值时精确计算总命中数,可以设置一个正整数。例如,设置为 5000:
```json
GET /your_index/_search
{
"query": {
"match_all": {}
},
"track_total_hits": 5000
}
```
注意事项
- 性能影响:精确计算总命中数可能会消耗更多资源,尤其是在数据量较大的情况下。因此,建议根据实际需求合理设置 `track_total_hits`。
- 版本差异:在 Elasticsearch 7.0 之前,`track_total_hits` 参数的行为可能略有不同。建议查阅对应版本的官方文档以获取准确信息。
通过合理使用 `track_total_hits` 参数,你可以根据实际需求在精确性和性能之间取得平衡。