class Qiita::Elasticsearch::Query
Constants
- DEFAULT_SORT
- SORTS_TABLE
Public Class Methods
@param [Array<Qiita::Elasticsearch::Token>] tokens @param [Hash] query_builder_options
For building new query from this query
# File lib/qiita/elasticsearch/query.rb, line 26 def initialize(tokens, query_builder_options = nil) @query_builder_options = query_builder_options @tokens = tokens end
Public Instance Methods
@param [String] field_name @param [String] term @return [Qiita::Elasticsearch::Query] @example query.append_field_token(field_name: “tag”, term: “Ruby”)
# File lib/qiita/elasticsearch/query.rb, line 35 def append_field_token(field_name: nil, term: nil) if has_field_token?(field_name: field_name, term: term) self else build_query([*@tokens, "#{field_name}:#{term}"].join(" ")) end end
@param [String] field_name @param [String] term @return [Qiita::Elasticsearch::Query] @example query.delete_field_token(field_name: “tag”, term: “Ruby”)
# File lib/qiita/elasticsearch/query.rb, line 47 def delete_field_token(field_name: nil, term: nil) build_query( @tokens.reject do |token| (field_name.nil? || token.field_name == field_name) && (term.nil? || token.term == term) end.join(" ") ) end
@param [String] field_name @param [false, nil, true] positive @param [String] term @example query.has_field_token?(field_name: “tag”, term: “Ruby”)
# File lib/qiita/elasticsearch/query.rb, line 59 def has_field_token?(field_name: nil, positive: nil, term: nil) @tokens.any? do |token| (field_name.nil? || token.field_name == field_name) && (term.nil? || token.term == term) && (positive.nil? || positive && token.positive? || !positive && token.negative?) end end
@return [Hash] query property for request body for Elasticsearch
# File lib/qiita/elasticsearch/query.rb, line 67 def query Nodes::OrSeparatableNode.new(@tokens).to_hash end
@return [Array] sort property for request body for Elasticsearch
# File lib/qiita/elasticsearch/query.rb, line 72 def sort SORTS_TABLE[sort_term] || DEFAULT_SORT end
# File lib/qiita/elasticsearch/query.rb, line 76 def sort_term term = @tokens.select(&:sort?).last.try(:term) term if SORTS_TABLE.key?(term) end
@return [Hash] request body for Elasticsearch
# File lib/qiita/elasticsearch/query.rb, line 82 def to_hash { "query" => query, "sort" => sort, } end
@return [String] query string generated from its tokens
# File lib/qiita/elasticsearch/query.rb, line 90 def to_s @tokens.join(" ") end
@return [String, nil] last positive type name in query string
# File lib/qiita/elasticsearch/query.rb, line 95 def type @tokens.select(&:type?).select(&:positive?).last.try(:type) end
@param [String] field_name @param [String] term @return [Qiita::Elasticsearch::Query] @example query.update_field_token(field_name: “tag”, term: “Ruby”)
# File lib/qiita/elasticsearch/query.rb, line 103 def update_field_token(field_name: nil, term: nil) build_query( @tokens.reject do |token| token.field_name == field_name end.map(&:to_s).push("#{field_name}:#{term}").join(" ") ) end
Private Instance Methods
Build a new query from query string @param [String] query_string @return [Qiita::Elasticsearch::Query] @example build_query
(“test tag:Ruby”)
# File lib/qiita/elasticsearch/query.rb, line 117 def build_query(query_string) query_builder.build(query_string) end
@return [Qiita::Elasticsearch::QueryBuilder]
# File lib/qiita/elasticsearch/query.rb, line 122 def query_builder QueryBuilder.new(query_builder_options) end
@return [Hash]
# File lib/qiita/elasticsearch/query.rb, line 127 def query_builder_options @query_builder_options || {} end