qiita-elasticsearch 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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