Sha256: 1ae780b8d571dac9069e9b02bbb8b719d6b3a33a56cf22684cafaa08b8b26831
Contents?: true
Size: 1.76 KB
Versions: 2
Compression:
Stored size: 1.76 KB
Contents
# encoding: utf-8 module XapianDb # Parse a query expression and create a xapian query object # @author Gernot Kogler class QueryParser # The spelling corrected query (if a language is configured) # @return [String] attr_reader :spelling_suggestion # Constructor # @param [XapianDb::Database] database The database to query def initialize(database) @db = database # Set the parser options @query_flags = 0 @query_flags |= Xapian::QueryParser::FLAG_WILDCARD # enable wildcards @query_flags |= Xapian::QueryParser::FLAG_BOOLEAN # enable boolean operators @query_flags |= Xapian::QueryParser::FLAG_BOOLEAN_ANY_CASE # enable case insensitive boolean operators @query_flags |= Xapian::QueryParser::FLAG_SPELLING_CORRECTION # enable spelling corrections end # Parse an expression # @return [Xapian::Query] The query object (see http://xapian.org/docs/apidoc/html/classXapian_1_1Query.html) def parse(expression) parser = Xapian::QueryParser.new parser.database = @db.reader parser.default_op = Xapian::Query::OP_AND # Could be made configurable if XapianDb::Config.stemmer parser.stemmer = XapianDb::Config.stemmer parser.stemming_strategy = Xapian::QueryParser::STEM_SOME parser.stopper = XapianDb::Config.stopper end # Add the searchable prefixes to allow searches by field # (like "name:Kogler") XapianDb::DocumentBlueprint.searchable_prefixes.each{|prefix| parser.add_prefix(prefix.to_s.downcase, "X#{prefix.to_s.upcase}") } query = parser.parse_query(expression, @query_flags) @spelling_suggestion = parser.get_corrected_query_string query end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
xapian_db-0.4.0 | lib/xapian_db/query_parser.rb |
xapian_db-0.3.4 | lib/xapian_db/query_parser.rb |