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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a225c93fa93597ae9e657f831c78634f62e9711
|
4
|
+
data.tar.gz: ddb1511db2dfbab4acee9620923122be71cdfd23
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5c40b70ba9228a3bd8ae4b7fcdb6844855b9bf82ff5b5d64ca54af4d5b7a25d244abb915818b15a67ca1a33e0aa0a3c4572ffa24f60b7c0850ede6d43acab1a3
|
7
|
+
data.tar.gz: 083a96e045dc6aa7ca897a7b3bb03e6bdc7fe45f8f22ed08326cd07416bb2f64790067af47613bca271abc4f06be6327c1e0e6d15e6c5c0ec1b4ff24b3f42db3
|
data/CHANGELOG.md
CHANGED
@@ -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.
|
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
|
-
|
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
|
35
|
-
def
|
36
|
-
|
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
|