搜索文档(搜索是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"`
}