From 0a75b277dc7ebc293c3a47939bdb0e8f77e6c24f Mon Sep 17 00:00:00 2001 From: Joram Wilander Date: Thu, 20 Oct 2016 11:30:44 -0400 Subject: Fix the multiple column full text search index for Postgres (#4282) --- store/sql_store.go | 16 +++++++++++++++- store/sql_user_store.go | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/store/sql_store.go b/store/sql_store.go index 1c0de5932..532ba1fc6 100644 --- a/store/sql_store.go +++ b/store/sql_store.go @@ -483,7 +483,8 @@ func (ss SqlStore) createIndexIfNotExists(indexName string, tableName string, co query := "" if indexType == INDEX_TYPE_FULL_TEXT { - query = "CREATE INDEX " + indexName + " ON " + tableName + " USING gin(to_tsvector('english', " + columnName + "))" + postgresColumnNames := convertMySQLFullTextColumnsToPostgres(columnName) + query = "CREATE INDEX " + indexName + " ON " + tableName + " USING gin(to_tsvector('english', " + postgresColumnNames + "))" } else { query = "CREATE " + uniqueStr + "INDEX " + indexName + " ON " + tableName + " (" + columnName + ")" } @@ -745,6 +746,19 @@ func (me mattermConverter) FromDb(target interface{}) (gorp.CustomScanner, bool) return gorp.CustomScanner{}, false } +func convertMySQLFullTextColumnsToPostgres(columnNames string) string { + columns := strings.Split(columnNames, ", ") + concatenatedColumnNames := "" + for i, c := range columns { + concatenatedColumnNames += c + if i < len(columns)-1 { + concatenatedColumnNames += " || ' ' || " + } + } + + return concatenatedColumnNames +} + func encrypt(key []byte, text string) (string, error) { if text == "" || text == "{}" { diff --git a/store/sql_user_store.go b/store/sql_user_store.go index ca86ef115..8cee9f9d9 100644 --- a/store/sql_user_store.go +++ b/store/sql_user_store.go @@ -1195,6 +1195,7 @@ func (us SqlUserStore) performSearch(searchQuery string, term string, searchType searchQuery = strings.Replace(searchQuery, "SEARCH_CLAUSE", "", 1) } else if utils.Cfg.SqlSettings.DriverName == model.DATABASE_DRIVER_POSTGRES { term = term + ":*" + searchType = convertMySQLFullTextColumnsToPostgres(searchType) searchClause := fmt.Sprintf("AND (%s) @@ to_tsquery(:Term)", searchType) searchQuery = strings.Replace(searchQuery, "SEARCH_CLAUSE", searchClause, 1) } else if utils.Cfg.SqlSettings.DriverName == model.DATABASE_DRIVER_MYSQL { -- cgit v1.2.3-1-g7c22