我使用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中是否有批次?或者是什么解决方案?
答案 0 :(得分:6)
您的问题中未指定,因此如果您使用的是其他客户端库(例如,官方客户端),请发表评论,但是您似乎正在使用github.com/olivere/elastic。基于该假设,您看到的是默认结果集大小10。TotalHits
数字是总共有多少个文件与您的查询匹配。 Hits
数字是您当前结果中返回的数字,您可以使用Size
,Sort
和From
进行操作。 Size
记录为:
大小是要返回的搜索命中数。默认值为10。