From 5b7a87bd8ec4cced5ef5e9a6a7d943cd8594b930 Mon Sep 17 00:00:00 2001 From: JoramWilander Date: Fri, 18 Mar 2016 12:13:32 -0400 Subject: Change searches to AND terms instead of OR --- store/sql_post_store.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'store') diff --git a/store/sql_post_store.go b/store/sql_post_store.go index 3346534ab..68c22f7f6 100644 --- a/store/sql_post_store.go +++ b/store/sql_post_store.go @@ -726,13 +726,20 @@ func (s SqlPostStore) Search(teamId string, userId string, params *model.SearchP terms = wildcard.ReplaceAllLiteralString(terms, ":* ") } - terms = strings.Join(strings.Fields(terms), " | ") + terms = strings.Join(strings.Fields(terms), " & ") searchClause := fmt.Sprintf("AND %s @@ to_tsquery(:Terms)", searchType) searchQuery = strings.Replace(searchQuery, "SEARCH_CLAUSE", searchClause, 1) } else if utils.Cfg.SqlSettings.DriverName == model.DATABASE_DRIVER_MYSQL { searchClause := fmt.Sprintf("AND MATCH (%s) AGAINST (:Terms IN BOOLEAN MODE)", searchType) searchQuery = strings.Replace(searchQuery, "SEARCH_CLAUSE", searchClause, 1) + + splitTerms := strings.Fields(terms) + for i, t := range strings.Fields(terms) { + splitTerms[i] = "+" + t + } + + terms = strings.Join(splitTerms, " ") } queryParams["Terms"] = terms -- cgit v1.2.3-1-g7c22 From 3e11921ac331492fcd0709e840e35d8ac6e73fc0 Mon Sep 17 00:00:00 2001 From: JoramWilander Date: Fri, 18 Mar 2016 12:25:11 -0400 Subject: Update search unit tests --- store/sql_post_store_test.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'store') diff --git a/store/sql_post_store_test.go b/store/sql_post_store_test.go index d69f7906c..62db6efb5 100644 --- a/store/sql_post_store_test.go +++ b/store/sql_post_store_test.go @@ -744,12 +744,17 @@ func TestPostStoreSearch(t *testing.T) { } r9 := (<-store.Post().Search(teamId, userId, &model.SearchParams{Terms: "mattermost jersey", IsHashtag: false})).Data.(*model.PostList) - if len(r9.Order) != 2 { + if len(r9.Order) != 0 { + t.Fatal("returned wrong search result") + } + + r9a := (<-store.Post().Search(teamId, userId, &model.SearchParams{Terms: "corey new york", IsHashtag: false})).Data.(*model.PostList) + if len(r9a.Order) != 1 { t.Fatal("returned wrong search result") } r10 := (<-store.Post().Search(teamId, userId, &model.SearchParams{Terms: "matter* jer*", IsHashtag: false})).Data.(*model.PostList) - if len(r10.Order) != 2 { + if len(r10.Order) != 0 { t.Fatal("returned wrong search result") } -- cgit v1.2.3-1-g7c22