diff --git a/app/models/node.rb b/app/models/node.rb index ac5439e966..fa2f05e975 100644 --- a/app/models/node.rb +++ b/app/models/node.rb @@ -35,15 +35,15 @@ def self.search(query:, order: :default, type: :natural, limit: 25) if ActiveRecord::Base.connection.adapter_name == 'Mysql2' if order == :natural + query = connection.quote(query.to_s) if type == :boolean - query = connection.quote(query.to_s + "*") + # Query is done as a boolean full-text search. More info here: https://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html nids = Revision.select("node_revisions.nid, node_revisions.body, node_revisions.title, MATCH(node_revisions.body, node_revisions.title) AGAINST(#{query} IN BOOLEAN MODE) AS score") .where("MATCH(node_revisions.body, node_revisions.title) AGAINST(#{query} IN BOOLEAN MODE)") .limit(limit) .distinct .collect(&:nid) else - query = connection.quote(query.to_s) nids = Revision.select("node_revisions.nid, node_revisions.body, node_revisions.title, MATCH(node_revisions.body, node_revisions.title) AGAINST(#{query} IN NATURAL LANGUAGE MODE) AS score") .where("MATCH(node_revisions.body, node_revisions.title) AGAINST(#{query} IN NATURAL LANGUAGE MODE)") .limit(limit)