Class: Qiita::Elasticsearch::Query
- Inherits:
-
Object
- Object
- Qiita::Elasticsearch::Query
- Defined in:
- lib/qiita/elasticsearch/query.rb
Constant Summary collapse
- DEFAULT_SORT =
[{ "created_at" => "desc" }, "_score"]
- SORTS_TABLE =
{ "created-asc" => [{ "created_at" => "asc" }, "_score"], "created-desc" => [{ "created_at" => "desc" }, "_score"], "likes-asc" => [{ "lgtms" => "asc" }, "_score"], "likes-desc" => [{ "lgtms" => "desc" }, "_score"], "related-asc" => ["_score"], "related-desc" => [{ "_score" => "desc" }], "stocks-asc" => [{ "stocks" => "asc" }, "_score"], "stocks-desc" => [{ "stocks" => "desc" }, "_score"], "updated-asc" => [{ "updated_at" => "asc" }, "_score"], "updated-desc" => [{ "updated_at" => "desc" }, "_score"], }
Instance Method Summary collapse
- #append_field_token(field_name: nil, term: nil) ⇒ Qiita::Elasticsearch::Query
- #delete_field_token(field_name: nil, term: nil) ⇒ Qiita::Elasticsearch::Query
- #has_field_token?(field_name: nil, positive: nil, term: nil) ⇒ Boolean
-
#initialize(tokens, query_builder_options = nil) ⇒ Query
constructor
A new instance of Query.
-
#query ⇒ Hash
Query property for request body for Elasticsearch.
-
#sort ⇒ Array
Sort property for request body for Elasticsearch.
- #sort_term ⇒ Object
-
#to_hash ⇒ Hash
Request body for Elasticsearch.
-
#to_s ⇒ String
Query string generated from its tokens.
-
#type ⇒ String?
Last positive type name in query string.
- #update_field_token(field_name: nil, term: nil) ⇒ Qiita::Elasticsearch::Query
Constructor Details
#initialize(tokens, query_builder_options = nil) ⇒ Query
Returns a new instance of Query.
26 27 28 29 |
# File 'lib/qiita/elasticsearch/query.rb', line 26 def initialize(tokens, = nil) @query_builder_options = @tokens = tokens end |
Instance Method Details
#append_field_token(field_name: nil, term: nil) ⇒ Qiita::Elasticsearch::Query
35 36 37 38 39 40 41 |
# 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 |
#delete_field_token(field_name: nil, term: nil) ⇒ Qiita::Elasticsearch::Query
47 48 49 50 51 52 53 |
# 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 |
#has_field_token?(field_name: nil, positive: nil, term: nil) ⇒ Boolean
59 60 61 62 63 64 |
# 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 |
#query ⇒ Hash
Returns query property for request body for Elasticsearch.
67 68 69 |
# File 'lib/qiita/elasticsearch/query.rb', line 67 def query Nodes::OrSeparatableNode.new(@tokens).to_hash end |
#sort ⇒ Array
Returns sort property for request body for Elasticsearch.
72 73 74 |
# File 'lib/qiita/elasticsearch/query.rb', line 72 def sort SORTS_TABLE[sort_term] || DEFAULT_SORT end |
#sort_term ⇒ Object
76 77 78 79 |
# 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 |
#to_hash ⇒ Hash
Returns request body for Elasticsearch.
82 83 84 85 86 87 |
# File 'lib/qiita/elasticsearch/query.rb', line 82 def to_hash { "query" => query, "sort" => sort, } end |
#to_s ⇒ String
Returns query string generated from its tokens.
90 91 92 |
# File 'lib/qiita/elasticsearch/query.rb', line 90 def to_s @tokens.join(" ") end |
#type ⇒ String?
Returns last positive type name in query string.
95 96 97 |
# File 'lib/qiita/elasticsearch/query.rb', line 95 def type @tokens.select(&:type?).select(&:positive?).last.try(:type) end |
#update_field_token(field_name: nil, term: nil) ⇒ Qiita::Elasticsearch::Query
103 104 105 106 107 108 109 |
# 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 |