登录
首页 >  Golang >  Go问答

为什么 searchResult.TotalHits() 与 len(searchResult.Hits.Hits) 不同?

来源:stackoverflow

时间:2024-04-24 10:36:35 154浏览 收藏

学习Golang要努力,但是不要急!今天的这篇文章《为什么 searchResult.TotalHits() 与 len(searchResult.Hits.Hits) 不同?》将会介绍到等等知识点,如果你想深入学习Golang,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助!

问题内容

我使用 golang elastic 5 api 在 elasticsearch 中运行查询。我使用 searchresult.totalhits() 检查命中数,它给了我一个很大的数字(超过 100),但是当我尝试迭代命中时,它只给出 10 个实体。另外,当我检查 len(searchresult.hits.hits) 变量时,我得到 10。

当我选择少于 10 个实体时,我尝试了不同的查询,效果很好。

query = elastic.NewBoolQuery()
ctx := context.Background()

query = query.Must(elastic.NewTermQuery("key0", "term"),
    elastic.NewWildcardQuery("key1", "*term2*"),
    elastic.NewWildcardQuery("key3", "*.*"),
    elastic.NewRangeQuery("timestamp").From(fromTime).To(toTime),
)
searchResult, err = client.Search().Index("index").
    Query(query).Pretty(true).Do(ctx)
fmt.Printf("TotalHits(): %v", searchResult.TotalHits()) //It gives me 482
fmt.Printf("length of the hits array: %v", len(searchResult.Hits.Hits)) //It gives 10
for _, hit := range searchResult.Hits.Hits {
    var tweet Tweet
    _ = json.Unmarshal(*hit.Source, &tweet)
            fmt.Printf("entity: %s", tweet) //It prints 10 entity
}

我做错了什么? searchresult 中是否有批次或者解决方案是什么?


解决方案


您的问题中未指定,因此如果您使用不同的客户端库(例如官方客户端),请发表评论,但您似乎正在使用 github.com/olivere/elastic。基于该假设,您看到的是默认结果集大小 10。 TotalHits 数字是与您的查询匹配的文档总数; Hits 数字是当前结果中返回的数量,您可以使用 SizeSortFrom 进行操作。 Size 记录为:

Size 是要返回的搜索命中数。默认为 10。

今天关于《为什么 searchResult.TotalHits() 与 len(searchResult.Hits.Hits) 不同?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>