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