从elasticsearch查询返回所有文档

时间:2017-02-23 21:42:56

标签: elasticsearch go

我的问题是针对" 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个文档)。我怎么能归还所有文件?

1 个答案:

答案 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++
    }
}