搜索文档(搜索是ES非常引以为傲的功能,以下示例是相对复杂的查询条件,需将查询结果排序,按页返回)

func Search(criteria *SearchCriteria)(docs []myDocument){
    client ,_:= ESClient()
    defer client.Stop()
    query := elastic.NewBoolQuery()
    query = query.Must(elastic.NewTermQuery("category",criteria.Category))
    query=query.Must(elastic.NewMatchQuery("title",criteria.Title))
    query=query.Must(elastic.NewRangeQuery("update_timestamp").Gte(criteria.UpdateTime))
    esResponse,_ :=client.Search().Index("test").Type("test").
        Query(query).Sort(criteria.Sort,criteria.Order=="ASC"||criteria.Order=="asc").
        From(criteria.Offset).Size(criteria.Limit).Do(context.Background())
    for _,value:= range esResponse.Hits.Hits{
        var doc *myDocument
        json.Unmarshal(*value.Source,&doc)
        docs = append(docs,doc)
    }
    return
}

type SearchCriteria struct{
    Category string `json:"category"`
    Limit int `json:"limit"`
    Offset int `json:"offset"`
    Title string `json:"title"`
    UpdateTime int64 `json:"update_timestamp"`
    Order string `json:"order"`
    Sort string `json:"sort"`
}