在 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` 參數,你可以根據實際需求在精確性和性能之間取得平衡。