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:
|
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
|