日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Elasticsearch:如何在搜索时得到精确的总 hits 数

發布時間:2023/12/19 综合教程 33 生活家
生活随笔 收集整理的這篇文章主要介紹了 Elasticsearch:如何在搜索时得到精确的总 hits 数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

從 Elasticsearch 7.0之后,為了提高搜索的性能,在 hits 字段中返回的文檔數有時不是最精確的數值。Elasticsearch 限制了最多的數值為10000。

{

"took" : 1,

"timed_out" : false,

"_shards" : {

"total" : 1,

"successful" : 1,

"skipped" : 0,

"failed" : 0

},

"hits" : {

"total" : {

"value" : 10000,

"relation" : "gte"

},

...

}

當文檔的數值大于10000時,返回的 total 數值為10000,并在 relation 中指出 gte。

我們可以做如下的一個實驗。啟動Kibana:

然后選中“Add data”:

這樣我們就把Sample flight data的數據加載到Elasticsearch中去了。

我們在Dev tools中來查詢我們的文檔個數:

我們可以看到有13059個數值。假如我們使用如下的方式來進行搜索的話:

顯然我們得到的文檔的數目是10000個,但是它并不是我們的實際的滿足條件的所有文檔數。假如我們想得到所有的文檔數,那么我們可以做如下的方式:

我們在請求的參數中加入 track_total_hits,并設置為true,那么我們可以看到在返回的參數中,它正確地顯示了所有滿足條件的文檔個數。

=========================================================================================================================

ElasticSearch Count API 和 track_total_hits 兩者的區別是什么?

我想計算:某個查詢條件(比如exists-query)下文檔的總數,看了下ES官方文檔:count api:

Gets the number of matches for a search query.


返回符合查詢條件的文檔數量,應該能滿足需求。
但是,我又看到了另一個參數:track-total-hits,這里面提到:某個查詢條件下的total hits是不準確的,因為它沒有:visiting all matches。而 track_total_hits 提供了一個下界來保證 符合查詢條件 的文檔數量的準確性。

Generally the total hit count can't be computed accuratelywithout visiting all matches, which is costly for queries that match lots of documents. Thetrack_total_hitsparameter allows you to control how the total number of hits should be tracked.


我的疑問是:
count api 得到的 符合查詢條件的文檔 數量一定是準確的吧?如果是準確的話,那么它應該 visiting all matches了,那是不是說明:count api 是一個很耗時的操作吧?那么 我要計算:符合某個查詢條件下的文檔的準確數量時,使用 count api 好呢?還是 使用 track_total_hits 好呢?有什么坑要注意的么?

參考鏈接:Do not compute hit counts by default=

===========================================================================================================================================

es7.x在查詢時,必須加上track_total_hits,不然就只顯示10000

{
"track_total_hits": true,
"query": {
"range": {
"ts": {
"gte": 0
}
}
}
}

總結

以上是生活随笔為你收集整理的Elasticsearch:如何在搜索时得到精确的总 hits 数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。