diff options
author | Joram Wilander <jwawilander@gmail.com> | 2016-10-20 11:30:44 -0400 |
---|---|---|
committer | enahum <nahumhbl@gmail.com> | 2016-10-20 12:30:44 -0300 |
commit | 0a75b277dc7ebc293c3a47939bdb0e8f77e6c24f (patch) | |
tree | 4bc1dca940d4b751a10c663170520577b46742bb | |
parent | 162282d42c1be601c30a5bd8f89cca548a1bf9ba (diff) | |
download | chat-0a75b277dc7ebc293c3a47939bdb0e8f77e6c24f.tar.gz chat-0a75b277dc7ebc293c3a47939bdb0e8f77e6c24f.tar.bz2 chat-0a75b277dc7ebc293c3a47939bdb0e8f77e6c24f.zip |
Fix the multiple column full text search index for Postgres (#4282)
-rw-r--r-- | store/sql_store.go | 16 | ||||
-rw-r--r-- | store/sql_user_store.go | 1 |
2 files changed, 16 insertions, 1 deletions
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 { |