我的问题是针对" gopkg.in/olivere/elastic.v2"我正在使用的包裹。
我正在尝试返回与我的查询匹配的所有文档:
termQuery := elastic.NewTermQuery("item_id", item_id)
searchResult, err := es.client.Search().
Index(index).
Type(SegmentsType). // search segments type
Query(termQuery). // specify the query
Sort("time", true). // sort by "user" field, ascending
From(0).Size(9).
Pretty(true). // pretty print request and response JSON
Do() // execute
if err != nil {
// Handle error
return timeline, err
}
问题是如果我将大小增加到大的话,我会收到内部服务器错误。如果我删除了声明的行:
From(0).Size(9).
然后使用默认值(10个文档)。我怎么能归还所有文件?
答案 0 :(得分:2)
使用滚动条检索所有结果只是有点不同,为了简洁起见,我不包括您可能需要的大量错误处理。
基本上,您只需稍微将代码从Search
更改为Scroller
,然后循环使用Scroller
调用Do
并处理结果页面。
termQuery := elastic.NewTermQuery("item_id", item_id)
scroller := es.client.Scroller().
Index(index).
Type(SegmentsType).
Query(termQuery).
Sort("time", true).
Size(1)
docs := 0
for {
res, err := scroller.Do(context.TODO())
if err == io.EOF {
// No remaining documents matching the search so break out of the 'forever' loop
break
}
for _, hit := range res.Hits.Hits {
// JSON parse or do whatever with each document retrieved from your index
item := make(map[string]interface{})
err := json.Unmarshal(*hit.Source, &item)
docs++
}
}