diff --git a/app/logical/post_query.rb b/app/logical/post_query.rb index d8429f129..eaaf5edd5 100644 --- a/app/logical/post_query.rb +++ b/app/logical/post_query.rb @@ -24,8 +24,17 @@ class PostQuery alias_method :to_s, :to_infix # Return a new PostQuery with aliases replaced. - def self.normalize(...) - PostQuery.new(...).replace_aliases.rewrite_opts.trim + def self.normalize(search, ...) + search = search.to_s.strip + + # Optimize zero tag and single tag searches + if search.blank? + PostQuery.new(AST.all, ...) + elsif search.match?(%r{\A[a-zA-Z0-9][a-zA-Z0-9();/+!?&'._~-]*\z}) && !search.downcase.in?(["and", "or"]) + PostQuery.new(AST.tag(search), ...).replace_aliases + else + PostQuery.new(search, ...).replace_aliases.rewrite_opts.trim + end end # Perform a search and return the resulting posts diff --git a/app/logical/post_query/ast.rb b/app/logical/post_query/ast.rb index 2d3ad020b..0d5d1b0dc 100644 --- a/app/logical/post_query/ast.rb +++ b/app/logical/post_query/ast.rb @@ -64,6 +64,10 @@ class PostQuery concerning :ConstructorMethods do class_methods do + def all + AST.new(:all, []) + end + def tag(name) AST.new(:tag, [name]) end