qiita-elasticsearch 0.14.3 → 0.15.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: 5f9fa6ee033eee2b5e4e95384bbfd34ba7e9311b
4
- data.tar.gz: 06355fdf4dbc5e734b1335d9b716a5dd93fe57cf
3
+ metadata.gz: d55e5e12468e89a3e9b902858d5bb4c50e70604c
4
+ data.tar.gz: 432915c14a639a533c206592df5f1df5ba5dfc9f
5
5
  SHA512:
6
- metadata.gz: 6b15d24f4500f5760c56181eccdc19fed7e60990acdca48e284028c15f6f29e39feb75ed9cc3cfb5f783e711a94e22f15d7c081beeed2638476ba5c9fa22ab92
7
- data.tar.gz: aff8bbea70b132a1e31426f0a9b83d3bc3c4dfc1698d4c37f8ed7a1462c17977998c34b3e9a134597c3b7912bf19e63810ccc207ada872c5859730e0861ce3dd
6
+ metadata.gz: bc55dc75f2de4fa3791796f11c43006975e6be87ed2c30d02dddd3eeb6ff63f3fd63419e231e3315c796df6488f516a63ad77f3ace5a908bdfae31c215b9d733
7
+ data.tar.gz: 5197b2b423fd8447914f3e4e14cd781eae6eb262bc719c1c736b7e70f6d6191ec294382567b52a4327f1e3cc5e7f591622f812721583056e70a9e2bcf8a5ac27
data/.gitignore CHANGED
@@ -5,5 +5,6 @@
5
5
  /coverage/
6
6
  /doc/
7
7
  /pkg/
8
+ /spec/examples.txt
8
9
  /spec/reports/
9
10
  /tmp/
data/README.md CHANGED
@@ -23,11 +23,11 @@ query_builder.build("a OR b")
23
23
  #=> {"bool"=>{"should"=>[{"match"=>{"_all"=>"a"}}, {"match"=>{"_all"=>"b"}}]}}
24
24
  ```
25
25
 
26
- ### matchable_fields
27
- Pass `:matchable_fields` option to tell matchable field names (default: `_all`).
26
+ ### default_fields
27
+ Pass `:default_fields` option to tell default (matchable) field names (default: `_all`).
28
28
 
29
29
  ```rb
30
- query_builder = Qiita::Elasticsearch::QueryBuilder.new(matchable_fields: ["body", "title"])
30
+ query_builder = Qiita::Elasticsearch::QueryBuilder.new(default_fields: ["body", "title"])
31
31
 
32
32
  query_builder.build("a")
33
33
  #=> {"multi_match"=>{"fields"=>["body", "title"], "query"=>"a"}}
@@ -5,7 +5,7 @@ module Qiita
5
5
  class MatchableToken < Token
6
6
  RELATIVE_BEST_FIELDS_QUERY_WEIGHT = 0.5
7
7
 
8
- attr_writer :matchable_fields
8
+ attr_writer :default_fields
9
9
 
10
10
  # @return [Hash]
11
11
  def to_hash
@@ -30,12 +30,22 @@ module Qiita
30
30
  {
31
31
  "multi_match" => {
32
32
  "boost" => boost,
33
- "fields" => @matchable_fields || ["_all"],
33
+ "fields" => matchable_fields,
34
34
  "query" => @term,
35
35
  "type" => type,
36
36
  },
37
37
  }
38
38
  end
39
+
40
+ def matchable_fields
41
+ if field_name
42
+ [field_name]
43
+ elsif @default_fields && !@default_fields.empty?
44
+ @default_fields
45
+ else
46
+ ["_all"]
47
+ end
48
+ end
39
49
  end
40
50
  end
41
51
  end
@@ -5,20 +5,22 @@ require "qiita/elasticsearch/query"
5
5
  module Qiita
6
6
  module Elasticsearch
7
7
  class QueryBuilder
8
+ # @param [Array<String>, nil] all_fields
8
9
  # @param [Array<String>, nil] date_fields
9
10
  # @param [Array<String>, nil] downcased_fields
10
11
  # @param [Array<String>, nil] filterable_fields
11
12
  # @param [Array<String>, nil] hierarchal_fields
12
13
  # @param [Array<String>, nil] int_fields
13
- # @param [Array<String>, nil] matchable_fields
14
+ # @param [Array<String>, nil] default_fields
14
15
  # @param [String, nil] time_zone
15
- def initialize(date_fields: nil, downcased_fields: nil, hierarchal_fields: nil, filterable_fields: nil, int_fields: nil, matchable_fields: nil, time_zone: nil)
16
+ def initialize(all_fields: nil, date_fields: nil, downcased_fields: nil, hierarchal_fields: nil, filterable_fields: nil, int_fields: nil, default_fields: nil, time_zone: nil)
17
+ @all_fields = all_fields
16
18
  @date_fields = date_fields
17
19
  @downcased_fields = downcased_fields
18
20
  @filterable_fields = filterable_fields
19
21
  @hierarchal_fields = hierarchal_fields
20
22
  @int_fields = int_fields
21
- @matchable_fields = matchable_fields
23
+ @default_fields = default_fields
22
24
  @time_zone = time_zone
23
25
  end
24
26
 
@@ -31,7 +33,7 @@ module Qiita
31
33
  filterable_fields: @filterable_fields,
32
34
  hierarchal_fields: @hierarchal_fields,
33
35
  int_fields: @int_fields,
34
- matchable_fields: @matchable_fields,
36
+ default_fields: @default_fields,
35
37
  time_zone: @time_zone,
36
38
  )
37
39
  end
@@ -40,12 +42,13 @@ module Qiita
40
42
 
41
43
  def tokenizer
42
44
  @tokenizer ||= Tokenizer.new(
45
+ all_fields: @all_fields,
43
46
  date_fields: @date_fields,
44
47
  downcased_fields: @downcased_fields,
45
48
  filterable_fields: @filterable_fields,
46
49
  hierarchal_fields: @hierarchal_fields,
47
50
  int_fields: @int_fields,
48
- matchable_fields: @matchable_fields,
51
+ default_fields: @default_fields,
49
52
  time_zone: @time_zone,
50
53
  )
51
54
  end
@@ -15,15 +15,17 @@ module Qiita
15
15
 
16
16
  # @param [true, false] downcased True if given term must be downcased on query representation
17
17
  # @param [String, nil] field_name Field name part
18
- # @param [true, fales] negative True if this term represents negative token (e.g. "-Perl")
19
- # @param [true, false] quoted Given term is quoted or note
18
+ # @param [true, false] negative True if this term represents negative token (e.g. "-Perl")
19
+ # @param [true, false] quoted Given term is quoted or not
20
+ # @param [true, false] filter True if this term should be used as filter
20
21
  # @param [String] term Term part
21
22
  # @param [String] token_string Original entire string
22
- def initialize(downcased: nil, field_name: nil, negative: nil, quoted: nil, term: nil, token_string: nil)
23
+ def initialize(downcased: nil, field_name: nil, negative: nil, quoted: nil, filter: nil, term: nil, token_string: nil)
23
24
  @downcased = downcased
24
25
  @field_name = field_name
25
26
  @negative = negative
26
27
  @quoted = quoted
28
+ @filter = filter
27
29
  @term = term
28
30
  @token_string = token_string
29
31
  end
@@ -38,7 +40,7 @@ module Qiita
38
40
  end
39
41
 
40
42
  def filter?
41
- !field_name.nil? || negative?
43
+ !!@filter || negative?
42
44
  end
43
45
 
44
46
  # @return [true, false] True if this token is for query
@@ -12,6 +12,7 @@ module Qiita
12
12
  DEFAULT_FILTERABLE_FIELDS = []
13
13
  DEFAULT_HIERARCHAL_FIELDS = []
14
14
  DEFAULT_INT_FIELDS = []
15
+ DEFAULT_DEFAULT_FIELDS = []
15
16
  EXTRA_DATE_FIELDS = %w(created updated)
16
17
  EXTRA_FILTERABLE_FIELDS = %w(created is sort updated)
17
18
 
@@ -27,20 +28,22 @@ module Qiita
27
28
  )
28
29
  /x
29
30
 
31
+ # @param [Array<String>, nil] all_fields
30
32
  # @param [Array<String>, nil] date_fields
31
33
  # @param [Array<String>, nil] downcased_fields
32
34
  # @param [Array<String>, nil] filterable_fields
33
35
  # @param [Array<String>, nil] hierarchal_fields
34
36
  # @param [Array<String>, nil] int_fields
35
- # @param [Array<String>, nil] matchable_fields
37
+ # @param [Array<String>, nil] default_fields
36
38
  # @param [String, nil] time_zone
37
- def initialize(date_fields: nil, downcased_fields: nil, filterable_fields: nil, hierarchal_fields: nil, int_fields: nil, matchable_fields: nil, time_zone: nil)
38
- @date_fields = date_fields
39
- @downcased_fields = downcased_fields
40
- @filterable_fields = filterable_fields
41
- @hierarchal_fields = hierarchal_fields
42
- @int_fields = int_fields
43
- @matchable_fields = matchable_fields
39
+ def initialize(all_fields: nil, date_fields: nil, downcased_fields: nil, filterable_fields: nil, hierarchal_fields: nil, int_fields: nil, default_fields: nil, time_zone: nil)
40
+ @date_fields = (date_fields || DEFAULT_DATE_FIELDS) | EXTRA_DATE_FIELDS
41
+ @downcased_fields = downcased_fields || DEFAULT_DOWNCASED_FIELDS
42
+ @filterable_fields = (filterable_fields || DEFAULT_FILTERABLE_FIELDS) | EXTRA_FILTERABLE_FIELDS
43
+ @hierarchal_fields = hierarchal_fields || DEFAULT_HIERARCHAL_FIELDS
44
+ @int_fields = int_fields || DEFAULT_INT_FIELDS
45
+ @default_fields = default_fields || DEFAULT_DEFAULT_FIELDS
46
+ @all_fields = aggregate_all_fields(all_fields)
44
47
  @time_zone = time_zone
45
48
  end
46
49
 
@@ -49,19 +52,20 @@ module Qiita
49
52
  def tokenize(query_string)
50
53
  query_string.scan(TOKEN_PATTERN).map do |token_string, minus, field_name, quoted_term, term|
51
54
  term ||= quoted_term
52
- if !field_name.nil? && !filterable_fields.include?(field_name)
55
+ if !field_name.nil? && !@all_fields.include?(field_name)
53
56
  term = "#{field_name}:#{term}"
54
57
  field_name = nil
55
58
  end
56
59
  token = token_class(field_name).new(
57
- downcased: downcased_fields.include?(field_name),
60
+ downcased: @downcased_fields.include?(field_name),
58
61
  field_name: field_name,
59
62
  negative: !minus.nil?,
60
63
  quoted: !quoted_term.nil?,
64
+ filter: @filterable_fields.include?(field_name),
61
65
  term: term,
62
66
  token_string: token_string,
63
67
  )
64
- token.matchable_fields = @matchable_fields if token.is_a?(MatchableToken)
68
+ token.default_fields = @default_fields if token.is_a?(MatchableToken)
65
69
  token.time_zone = @time_zone if token.is_a?(DateToken)
66
70
  token
67
71
  end
@@ -69,35 +73,29 @@ module Qiita
69
73
 
70
74
  private
71
75
 
72
- def date_fields
73
- (@date_fields || DEFAULT_DATE_FIELDS) | EXTRA_DATE_FIELDS
74
- end
75
-
76
- def downcased_fields
77
- @downcased_fields || DEFAULT_DOWNCASED_FIELDS
78
- end
79
-
80
- def filterable_fields
81
- (@filterable_fields || DEFAULT_FILTERABLE_FIELDS) | EXTRA_FILTERABLE_FIELDS
82
- end
83
-
84
- def hierarchal_fields
85
- @hierarchal_fields || DEFAULT_HIERARCHAL_FIELDS
86
- end
76
+ def aggregate_all_fields(base)
77
+ fields = [
78
+ base,
79
+ @date_fields,
80
+ @downcased_fields,
81
+ @filterable_fields,
82
+ @hierarchal_fields,
83
+ @int_fields,
84
+ @default_fields
85
+ ].flatten.compact
87
86
 
88
- def int_fields
89
- @int_fields || DEFAULT_INT_FIELDS
87
+ fields.map { |field| field.sub(/\^\d+\z/, "") }.uniq
90
88
  end
91
89
 
92
90
  def token_class(field_name)
93
91
  case
94
- when date_fields.include?(field_name)
92
+ when @date_fields.include?(field_name)
95
93
  DateToken
96
- when int_fields.include?(field_name)
94
+ when @int_fields.include?(field_name)
97
95
  IntToken
98
- when hierarchal_fields.include?(field_name)
96
+ when @hierarchal_fields.include?(field_name)
99
97
  HierarchalToken
100
- when filterable_fields.include?(field_name)
98
+ when @filterable_fields.include?(field_name)
101
99
  FilterableToken
102
100
  else
103
101
  MatchableToken
@@ -1,5 +1,5 @@
1
1
  module Qiita
2
2
  module Elasticsearch
3
- VERSION = "0.14.3"
3
+ VERSION = "0.15.0"
4
4
  end
5
5
  end
@@ -18,6 +18,6 @@ Gem::Specification.new do |spec|
18
18
  spec.add_development_dependency "bundler", ">= 1.7"
19
19
  spec.add_development_dependency "codeclimate-test-reporter"
20
20
  spec.add_development_dependency "rake", "~> 10.0"
21
- spec.add_development_dependency "rspec", "3.2.0"
21
+ spec.add_development_dependency "rspec", "~> 3.3"
22
22
  spec.add_development_dependency "rubocop", "0.29.1"
23
23
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qiita-elasticsearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.3
4
+ version: 0.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryo Nakamura
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-29 00:00:00.000000000 Z
11
+ date: 2015-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -70,16 +70,16 @@ dependencies:
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '='
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 3.2.0
75
+ version: '3.3'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '='
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 3.2.0
82
+ version: '3.3'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rubocop
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -153,7 +153,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
153
153
  version: '0'
154
154
  requirements: []
155
155
  rubyforge_project:
156
- rubygems_version: 2.4.5
156
+ rubygems_version: 2.4.5.1
157
157
  signing_key:
158
158
  specification_version: 4
159
159
  summary: Elasticsearch client helper for Qiita.