qiita-elasticsearch 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2ac89f9676b05d247337d139e417cb55d449152c
4
- data.tar.gz: 44965231890460369545280221bedb008090743a
3
+ metadata.gz: 0a225c93fa93597ae9e657f831c78634f62e9711
4
+ data.tar.gz: ddb1511db2dfbab4acee9620923122be71cdfd23
5
5
  SHA512:
6
- metadata.gz: 0b507ea1cffce78984dd9e59a0d22b61727d1331a602f094b6731fe8784810495c3e65d09ffde4fce3c41dd9f747ed13087af9f400eefb677f8e8a8212eee030
7
- data.tar.gz: 02286a98b45cfaca0f8bd6570d39faf5d3f21f68ca8b5cffa27a1430f00d7ec857ff25cf90032a68da59e6f48adc7c4a1285afa7505dd19e6127ae9b3c8d3119
6
+ metadata.gz: 5c40b70ba9228a3bd8ae4b7fcdb6844855b9bf82ff5b5d64ca54af4d5b7a25d244abb915818b15a67ca1a33e0aa0a3c4572ffa24f60b7c0850ede6d43acab1a3
7
+ data.tar.gz: 083a96e045dc6aa7ca897a7b3bb03e6bdc7fe45f8f22ed08326cd07416bb2f64790067af47613bca271abc4f06be6327c1e0e6d15e6c5c0ec1b4ff24b3f42db3
@@ -1,3 +1,6 @@
1
+ ## 0.6.0
2
+ - Change `Query#to_hash` behavior and support sort option
3
+
1
4
  ## 0.5.0
2
5
  - Change `QueryBuilder#build` to return `Query` object
3
6
 
@@ -31,7 +31,7 @@ module Qiita
31
31
 
32
32
  # @return [Array<Array<Qiita::Elasticsearch::Token>>]
33
33
  def tokens_grouped_by_or_token
34
- @tokens_grouped_by_or_token ||= @tokens.reject(&:ignorable?).each_with_object([[]]) do |token, groups|
34
+ @tokens_grouped_by_or_token ||= @tokens.select(&:query?).each_with_object([[]]) do |token, groups|
35
35
  if token.or?
36
36
  groups << []
37
37
  else
@@ -1,3 +1,4 @@
1
+ require "active_support/core_ext/object/try"
1
2
  require "qiita/elasticsearch/nodes/null_node"
2
3
  require "qiita/elasticsearch/nodes/or_separatable_node"
3
4
  require "qiita/elasticsearch/tokenizer"
@@ -5,6 +6,8 @@ require "qiita/elasticsearch/tokenizer"
5
6
  module Qiita
6
7
  module Elasticsearch
7
8
  class Query
9
+ DEFAULT_SORT = ["_score"]
10
+
8
11
  # @param [Array<Qiita::Elasticsearch::Token>] tokens
9
12
  # @param [Hash] query_builder_options For building new query from this query
10
13
  def initialize(tokens, query_builder_options = nil)
@@ -41,9 +44,8 @@ module Qiita
41
44
  end
42
45
  end
43
46
 
44
- # @return [Hash]
45
- # @example query.to_hash
46
- def to_hash
47
+ # @return [Hash] query property for request body for Elasticsearch
48
+ def query
47
49
  if has_empty_tokens?
48
50
  Nodes::NullNode.new.to_hash
49
51
  else
@@ -51,6 +53,32 @@ module Qiita
51
53
  end
52
54
  end
53
55
 
56
+ # @return [Array] sort property for request body for Elasticsearch
57
+ def sort
58
+ case @tokens.select(&:sort?).last.try(:term)
59
+ when "created-asc"
60
+ [{ "created_at" => "asc" }, "_score"]
61
+ when "created-desc"
62
+ [{ "created_at" => "desc" }, "_score"]
63
+ when "related-asc"
64
+ [{ "_score" => "desc" }]
65
+ when "stocks-asc"
66
+ [{ "stocks" => "asc" }, "_score"]
67
+ when "stocks-desc"
68
+ [{ "stocks" => "desc" }, "_score"]
69
+ else
70
+ DEFAULT_SORT
71
+ end
72
+ end
73
+
74
+ # @return [Hash] request body for Elasticsearch
75
+ def to_hash
76
+ {
77
+ "query" => query,
78
+ "sort" => sort,
79
+ }
80
+ end
81
+
54
82
  # @return [String] query string generated from its tokens
55
83
  def to_s
56
84
  @tokens.join(" ")
@@ -31,9 +31,9 @@ module Qiita
31
31
  !field_name.nil? || negative?
32
32
  end
33
33
 
34
- # @return [true, false] True if this token is ignorable on building query (e.g. "-stocked:foo")
35
- def ignorable?
36
- negative? && !field_name.nil? && has_invalid_term?
34
+ # @return [true, false] True if this token is for query
35
+ def query?
36
+ !sort? && !ignorable?
37
37
  end
38
38
 
39
39
  def must?
@@ -82,6 +82,12 @@ module Qiita
82
82
  !!@quoted
83
83
  end
84
84
 
85
+ # @note Override me
86
+ # @return [true, false] True if this token is for sort order (e.g. "sort:created-asc")
87
+ def sort?
88
+ field_name == "sort"
89
+ end
90
+
85
91
  # @note Override me
86
92
  def to_hash
87
93
  fail NotImplementedError
@@ -100,6 +106,11 @@ module Qiita
100
106
  def has_invalid_term?
101
107
  false
102
108
  end
109
+
110
+ # @return [true, false] True if this token has no meaning
111
+ def ignorable?
112
+ negative? && !field_name.nil? && has_invalid_term?
113
+ end
103
114
  end
104
115
  end
105
116
  end
@@ -1,5 +1,5 @@
1
1
  module Qiita
2
2
  module Elasticsearch
3
- VERSION = "0.5.0"
3
+ VERSION = "0.6.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qiita-elasticsearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryo Nakamura