diff options
| -rw-r--r-- | app/controllers/application_controller.rb | 23 | ||||
| -rw-r--r-- | vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb | 1 | 
2 files changed, 19 insertions, 5 deletions
| diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 0c8544932..eae27c667 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -385,11 +385,24 @@ class ApplicationController < ActionController::Base              ActsAsXapian.readable_init              old_default_op = ActsAsXapian.query_parser.default_op              ActsAsXapian.query_parser.default_op = Xapian::Query::OP_OR -            user_query =  ActsAsXapian.query_parser.parse_query( -                                       query, -                                       Xapian::QueryParser::FLAG_LOVEHATE | Xapian::QueryParser::FLAG_PARTIAL | -                                       Xapian::QueryParser::FLAG_SPELLING_CORRECTION) -            xapian_requests = ActsAsXapian::Search.new([model], query, options, user_query) +            begin +                user_query =  ActsAsXapian.query_parser.parse_query( +                                           query.strip + '*', +                                           Xapian::QueryParser::FLAG_LOVEHATE | Xapian::QueryParser::FLAG_WILDCARD | +                                           Xapian::QueryParser::FLAG_SPELLING_CORRECTION) +                xapian_requests = ActsAsXapian::Search.new([model], query, options, user_query) +            rescue RuntimeError => e +                if e.message =~ /^QueryParserError: Wildcard/ +                    # Wildcard expands to too many terms +                    logger.info "Wildcard query '#{query.strip + '*'}' caused: #{e.message}" +                     +                    user_query =  ActsAsXapian.query_parser.parse_query( +                                               query, +                                               Xapian::QueryParser::FLAG_LOVEHATE | +                                               Xapian::QueryParser::FLAG_SPELLING_CORRECTION) +                    xapian_requests = ActsAsXapian::Search.new([model], query, options, user_query) +                end +            end              ActsAsXapian.query_parser.default_op = old_default_op          end          return xapian_requests diff --git a/vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb b/vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb index 38bfb7c98..dd033a112 100644 --- a/vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb +++ b/vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb @@ -143,6 +143,7 @@ module ActsAsXapian          @@query_parser.stemming_strategy = Xapian::QueryParser::STEM_SOME          @@query_parser.database = @@db          @@query_parser.default_op = Xapian::Query::OP_AND +        @@query_parser.set_max_wildcard_expansion(1000)          @@stopper = Xapian::SimpleStopper.new          @@stopper.add("and") | 
