class EsQueryBuilder::Tokenizer

Constants

OR_CONDITION
QUERY_REGEXP

Private Instance Methods

create_token(full, minus, field, quoted, simple) click to toggle source
# File lib/es-query-builder/tokenizer.rb, line 50
def create_token(full, minus, field, quoted, simple)
  if @filter_fields.include?(field)
    type = :filter
  elsif OR_CONDITION =~ full
    type = :or
  else
    field = nil unless @query_fields.include?(field)
    type = :query
  end

  Token.new(
    full: full,
    minus: minus,
    field: field,
    term: quoted || simple,
    type: type
  )
end

Public

↑ top

Public Class Methods

new(query_fields = [], filter_fields = []) click to toggle source

Construct the tokenizer object.

filter_fields

An Array of Strings for specifing allowed filtering types (default: []).

all_query_fields

The String or Array of Strings for searching usual query terms (default: '_all').

Returns

Returns nothing.

# File lib/es-query-builder/tokenizer.rb, line 25
def initialize(query_fields = [], filter_fields = [])
  @query_fields = query_fields
  @filter_fields = filter_fields
end

Public Instance Methods

tokenize(query_string) click to toggle source

Tokenize the given query string for parsing it later.

query_string

The utf8 encoded String.

Examples

tokenize('hello OR tag:world')
# => [<Token: @full="hello",     @type=:query,  ...>,
#     <Token: @full="OR",        @type=:or,     ...>,
#     <Token: @full="tag:world", @type=:filter, ...>]

Returns

Returns an Array of Tokens.

# File lib/es-query-builder/tokenizer.rb, line 42
def tokenize(query_string)
  query_string.scan(QUERY_REGEXP).map do |match|
    create_token(*match)
  end
end