0
0
Fork 0

fix bad math in multi search, and return original reqest in res

related to #164
This commit is contained in:
Marty Schoch 2015-02-18 17:24:22 +05:30
parent c566d34264
commit daeaa2c129
2 changed files with 43 additions and 4 deletions

View File

@ -365,7 +365,7 @@ func (i *indexAliasImpl) Swap(in, out []Index) {
func createChildSearchRequest(req *SearchRequest) *SearchRequest {
rv := SearchRequest{
Query: req.Query,
Size: req.Size,
Size: req.Size + req.From,
From: 0,
Highlight: req.Highlight,
Fields: req.Fields,
@ -457,5 +457,8 @@ func MultiSearch(req *SearchRequest, indexes ...Index) (*SearchResult, error) {
sr.Facets.Fixup(name, fr.Size)
}
// fix up original request
sr.Request = req
return sr, nil
}

View File

@ -532,7 +532,8 @@ func TestIndexAliasMulti(t *testing.T) {
// now a few things that should work
sr := NewSearchRequest(NewTermQuery("test"))
expected := &SearchResult{
Total: 2,
Request: sr,
Total: 2,
Hits: search.DocumentMatchCollection{
&search.DocumentMatch{
ID: "b",
@ -585,8 +586,10 @@ func TestMultiSearchNoError(t *testing.T) {
MaxScore: 2.0,
}}
sr := NewSearchRequest(NewTermQuery("test"))
expected := &SearchResult{
Total: 2,
Request: sr,
Total: 2,
Hits: search.DocumentMatchCollection{
&search.DocumentMatch{
ID: "b",
@ -601,7 +604,6 @@ func TestMultiSearchNoError(t *testing.T) {
MaxScore: 2.0,
}
sr := NewSearchRequest(NewTermQuery("test"))
results, err := MultiSearch(sr, ei1, ei2)
if err != nil {
t.Error(err)
@ -644,6 +646,33 @@ func TestMultiSearchAllError(t *testing.T) {
}
}
func TestMultiSearchSecondPage(t *testing.T) {
checkRequest := func(sr *SearchRequest) error {
if sr.From != 0 {
return fmt.Errorf("child request from should be 0")
}
if sr.Size != 20 {
return fmt.Errorf("child request size should be 20")
}
return nil
}
ei1 := &stubIndex{
searchResult: &SearchResult{},
checkRequest: checkRequest,
}
ei2 := &stubIndex{
searchResult: &SearchResult{},
checkRequest: checkRequest,
}
sr := NewSearchRequestOptions(NewTermQuery("test"), 10, 10, false)
_, err := MultiSearch(sr, ei1, ei2)
if err != nil {
t.Errorf("unexpected error %v", err)
}
}
// stubIndex is an Index impl for which all operations
// return the configured error value, unless the
// corresponding operation result value has been
@ -653,6 +682,7 @@ type stubIndex struct {
searchResult *SearchResult
documentResult *document.Document
docCountResult *uint64
checkRequest func(*SearchRequest) error
}
func (i *stubIndex) Index(id string, data interface{}) error {
@ -682,6 +712,12 @@ func (i *stubIndex) DocCount() (uint64, error) {
}
func (i *stubIndex) Search(req *SearchRequest) (*SearchResult, error) {
if i.checkRequest != nil {
err := i.checkRequest(req)
if err != nil {
return nil, err
}
}
if i.searchResult != nil {
return i.searchResult, nil
}