feat: add collapse search result function
This commit is contained in:
parent
00431fc79f
commit
09ed23b5e5
15
search.go
15
search.go
|
@ -26,7 +26,7 @@ type SearchRequest struct {
|
|||
sort Sort
|
||||
source Source
|
||||
timeout *time.Duration
|
||||
|
||||
collapse map[string]interface{}
|
||||
}
|
||||
|
||||
// Search creates a new SearchRequest object, to be filled via method chaining.
|
||||
|
@ -76,6 +76,14 @@ func (req *SearchRequest) Sort(name string, order Order) *SearchRequest {
|
|||
return req
|
||||
}
|
||||
|
||||
// Collapse the results
|
||||
func (req *SearchRequest) Collapse(field string) *SearchRequest {
|
||||
req.collapse = map[string]interface{}{
|
||||
"field": field,
|
||||
}
|
||||
return req
|
||||
}
|
||||
|
||||
// SearchAfter retrieve the sorted result
|
||||
func (req *SearchRequest) SearchAfter(s ...interface{}) *SearchRequest {
|
||||
req.searchAfter = append(req.searchAfter, s...)
|
||||
|
@ -113,8 +121,6 @@ func (req *SearchRequest) Highlight(highlight Mappable) *SearchRequest {
|
|||
return req
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Map implements the Mappable interface. It converts the request to into a
|
||||
// nested map[string]interface{}, as expected by the go-elasticsearch library.
|
||||
func (req *SearchRequest) Map() map[string]interface{} {
|
||||
|
@ -155,6 +161,9 @@ func (req *SearchRequest) Map() map[string]interface{} {
|
|||
m["search_after"] = req.searchAfter
|
||||
}
|
||||
|
||||
if req.collapse != nil {
|
||||
m["collapse"] = req.collapse
|
||||
}
|
||||
|
||||
source := req.source.Map()
|
||||
if len(source) > 0 {
|
||||
|
|
|
@ -14,6 +14,16 @@ func TestSearchMaps(t *testing.T) {
|
|||
"search_after": []string{"_id", "name"},
|
||||
},
|
||||
},
|
||||
{
|
||||
"a simple query with collapse",
|
||||
Search().Query(Term("user.id", "Tony")).Collapse("user.id"),
|
||||
map[string]interface{}{
|
||||
"query": Term("user.id", "Tony").Map(),
|
||||
"collapse": map[string]interface{}{
|
||||
"field": "user.id",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
"a simple match_all query with a size and no aggs",
|
||||
Search().Query(MatchAll()).Size(20),
|
||||
|
|
Loading…
Reference in New Issue