Fix locale dependend stemmer for FTS
Fix locale dependend stemmer for FTS to improve search relevance on non English languages.
This commit is contained in:
parent
6221fe2d60
commit
aa7d1c2fbe
|
@ -1,3 +1,5 @@
|
||||||
|
require_dependency 'search'
|
||||||
|
|
||||||
class SearchObserver < ActiveRecord::Observer
|
class SearchObserver < ActiveRecord::Observer
|
||||||
observe :topic, :post, :user, :category
|
observe :topic, :post, :user, :category
|
||||||
|
|
||||||
|
@ -9,11 +11,14 @@ class SearchObserver < ActiveRecord::Observer
|
||||||
table_name = "#{table}_search_data"
|
table_name = "#{table}_search_data"
|
||||||
foreign_key = "#{table}_id"
|
foreign_key = "#{table}_id"
|
||||||
|
|
||||||
|
# for user login and name use "simple" lowercase stemmer
|
||||||
|
stemmer = table == "user" ? "simple" : Search.long_locale
|
||||||
|
|
||||||
# Would be nice to use AR here but not sure how to execut Postgres functions
|
# Would be nice to use AR here but not sure how to execut Postgres functions
|
||||||
# when inserting data like this.
|
# when inserting data like this.
|
||||||
rows = Post.exec_sql_row_count("UPDATE #{table_name} SET search_data = TO_TSVECTOR('english', ?) WHERE #{foreign_key} = ?", search_data, id)
|
rows = Post.exec_sql_row_count("UPDATE #{table_name} SET search_data = TO_TSVECTOR('#{stemmer}', ?) WHERE #{foreign_key} = ?", search_data, id)
|
||||||
if rows == 0
|
if rows == 0
|
||||||
Post.exec_sql("INSERT INTO #{table_name} (#{foreign_key}, search_data) VALUES (?, TO_TSVECTOR('english', ?))", id, search_data)
|
Post.exec_sql("INSERT INTO #{table_name} (#{foreign_key}, search_data) VALUES (?, TO_TSVECTOR('#{stemmer}', ?))", id, search_data)
|
||||||
end
|
end
|
||||||
rescue
|
rescue
|
||||||
# don't allow concurrency to mess up saving a post
|
# don't allow concurrency to mess up saving a post
|
||||||
|
|
Loading…
Reference in New Issue