Class: EsQueryBuilder::Tokenizer

Inherits:
Object
  • Object
show all
Defined in:
lib/es-query-builder/tokenizer.rb

Constant Summary collapse

QUERY_REGEXP =
/
  (
    (-)?                  # Minus
    (?:(\w+):)?           # Field
    (?:
      (?:"(.*?)(?<!\\)")  # Quoted query
      |
      ([^\s]+)            # Single query
    )
  )
/x
OR_CONDITION =
/^OR$/i

Instance Method Summary collapse

Constructor Details

#initialize(query_fields = [], filter_fields = []) ⇒ Tokenizer

Public: 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 nothing.



25
26
27
28
# File 'lib/es-query-builder/tokenizer.rb', line 25

def initialize(query_fields = [], filter_fields = [])
  @query_fields = query_fields
  @filter_fields = filter_fields
end

Instance Method Details

#tokenize(query_string) ⇒ Object

Public: 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 an Array of Tokens.



42
43
44
45
46
# 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