eagle_search 0.2.0 → 0.3.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: 3e21ce462612e7c5a124aa8781336ebba2c89edc
4
- data.tar.gz: 48b7434bd94a89894b021d1382c249e27cd5bafc
3
+ metadata.gz: 82100c3686ba2e322eab5ac86fb4a23c873461bf
4
+ data.tar.gz: 88ab75d5c91d735f651f3e60ba862a3e71001ffa
5
5
  SHA512:
6
- metadata.gz: 45a6fc3434a82ae76d15a18b92582c5d56dabd9a3bda886c4fb8d82c8a0080de7a084f278235c3d8a85ce871dad2a061f3d1119f440f0732a943d5891b962b0b
7
- data.tar.gz: 33b30abb5aec2dc362e68a8663eed49dd1b02c2bd5e948aad9f185517ac489a8a61462d19a6f68cae7fa23395a8214798244e1662947f4409c65532ed90cd103
6
+ metadata.gz: 55d7926ec810c5139670e3bc9ea83b11e1fbae69ff42a653b6e0513c5cbeb751f10df6cf47e7bba79c03dad240eaa4118620c68b8b8677481b9998db3ca22020
7
+ data.tar.gz: a78979c0e9f6c4bd2afa383e47e87e6dd978c12cb15252c0a4f3d5f24cb5116406083bd94644127507c030b6b707c273a1c3ae24c26fe0a02c6a85df090a6ec9
@@ -18,12 +18,27 @@ module EagleSearch
18
18
  else
19
19
  mapping[:index] = "analyzed"
20
20
  mapping[:analyzer] = index_settings[:language] || "english"
21
+
21
22
  mapping[:fields] = {
22
23
  shingle: {
23
24
  type: "string",
24
25
  analyzer: "eagle_search_shingle_analyzer"
26
+ },
27
+ autocomplete: {
28
+ type: "string",
29
+ index_analyzer: "eagle_search_autocomplete_analyzer",
30
+ search_analyzer: index_settings[:language] || "english"
25
31
  }
26
32
  }
33
+
34
+ mapping[:fields].merge!(
35
+ {
36
+ synonym: {
37
+ type: "string",
38
+ analyzer: "eagle_search_synonym_analyzer"
39
+ }
40
+ }
41
+ ) if @index.has_synonyms?
27
42
  end
28
43
  end
29
44
  end
@@ -78,6 +78,10 @@ module EagleSearch
78
78
  end
79
79
  end
80
80
 
81
+ def has_synonyms?
82
+ @settings[:synonyms]
83
+ end
84
+
81
85
  private
82
86
  def body
83
87
  body = {
@@ -92,13 +96,18 @@ module EagleSearch
92
96
  end
93
97
 
94
98
  def analysis_settings
95
- {
99
+ default_analysis = {
96
100
  filter: {
97
101
  eagle_search_shingle_filter: {
98
102
  type: "shingle",
99
103
  min_shingle_size: 2,
100
104
  max_shingle_size: 2,
101
105
  output_unigrams: false
106
+ },
107
+ eagle_search_autocomplete_filter: {
108
+ type: "edge_ngram",
109
+ min_gram: 1,
110
+ max_gram: 20
102
111
  }
103
112
  },
104
113
  analyzer: {
@@ -109,9 +118,46 @@ module EagleSearch
109
118
  "lowercase",
110
119
  "eagle_search_shingle_filter"
111
120
  ]
121
+ },
122
+ eagle_search_autocomplete_analyzer: {
123
+ tokenizer: "standard",
124
+ filter: ["lowercase", "eagle_search_autocomplete_filter"]
112
125
  }
113
126
  }
114
127
  }
128
+ merge_synonyms!(default_analysis)
129
+ default_analysis
130
+ end
131
+
132
+ def merge_synonyms!(default_analysis)
133
+ if has_synonyms?
134
+ default_analysis[:filter]["eagle_search_synonym_filter"] = {}
135
+ default_analysis[:analyzer].merge!(
136
+ {
137
+ eagle_search_synonym_analyzer: {
138
+ tokenizer: "standard",
139
+ filter: ["lowercase", "eagle_search_synonym_filter"]
140
+ }
141
+ }
142
+ )
143
+
144
+ default_analysis[:filter]["eagle_search_synonym_filter"].merge!(
145
+ synonym_payload(@settings[:synonyms])
146
+ )
147
+ end
148
+ end
149
+
150
+ def synonym_payload(synonyms)
151
+ if synonyms.is_a?(Array)
152
+ {
153
+ type: "synonym",
154
+ synonyms: synonyms
155
+ }
156
+ else
157
+ {
158
+ type: "synonym"
159
+ }.merge(synonyms)
160
+ end
115
161
  end
116
162
 
117
163
  def klass
@@ -32,9 +32,33 @@ module EagleSearch
32
32
  #size
33
33
  payload.merge!({ size: @options[:per_page] }) if @options[:per_page]
34
34
 
35
+ #highlight
36
+ if @options[:highlight] && @options[:highlight][:fields]
37
+ highlight = {
38
+ fields: {}
39
+ }
40
+ @options[:highlight][:fields].each do |field|
41
+ highlight[:fields][field] = {}
42
+ end
43
+
44
+ if @options[:highlight][:tags]
45
+ highlight[:pre_tags] = @options[:highlight][:tags]
46
+ highlight[:post_tags] = @options[:highlight][:tags].map { |tag| tag.gsub(/</, "</")}
47
+ end
48
+
49
+ payload.merge!(highlight: highlight)
50
+ end
51
+
35
52
  payload
36
53
  end
37
54
 
55
+ {
56
+ highlight: {
57
+ fields: [:a, :b, :c],
58
+ tags: ["<xpto>"]
59
+ }
60
+ }
61
+
38
62
  private
39
63
  def query_payload
40
64
  if @options[:custom_query]
@@ -64,8 +64,32 @@ module EagleSearch
64
64
  match_queries << {
65
65
  match: {
66
66
  "#{ field_name }.shingle" => {
67
+ query: @query
68
+ }
69
+ }
70
+ }
71
+
72
+ match_queries << {
73
+ match: {
74
+ "#{ field_name }.synonym" => {
75
+ query: @query
76
+ }
77
+ }
78
+ } if @index.has_synonyms?
79
+
80
+ match_queries << {
81
+ match: {
82
+ "#{ field_name }.autocomplete" => {
83
+ query: @query
84
+ }
85
+ }
86
+ } if @options[:autocomplete].nil? || @options[:autocomplete]
87
+
88
+ match_queries << {
89
+ match: {
90
+ "#{ field_name }" => {
67
91
  query: @query,
68
- boost: 3
92
+ fuzziness: "AUTO"
69
93
  }
70
94
  }
71
95
  }
@@ -81,7 +105,7 @@ module EagleSearch
81
105
  end
82
106
 
83
107
  def build_term_queries
84
- return unless not_analyzed_properties
108
+ return if not_analyzed_properties.empty?
85
109
 
86
110
  term_queries = []
87
111
  not_analyzed_properties.keys.each do |field_name|
@@ -89,7 +113,7 @@ module EagleSearch
89
113
  term: {
90
114
  field_name => {
91
115
  value: @query,
92
- boost: 5
116
+ boost: 3
93
117
  }
94
118
  }
95
119
  }
@@ -102,7 +126,7 @@ module EagleSearch
102
126
  }
103
127
 
104
128
  if @query_payload[:bool]
105
- @query_payload[:bool][:should][1][:bool][:should] << payload
129
+ @query_payload[:bool][:should] << payload
106
130
  else
107
131
  @query_payload = payload
108
132
  end
@@ -26,6 +26,9 @@ module EagleSearch
26
26
  end
27
27
 
28
28
  def hits
29
+ @response["hits"]["hits"].each_with_index do |h, index|
30
+ @response["hits"]["hits"][index]["highlight"] = Hash[h["highlight"].map { |field, value| [field, value.first] }] if @response["hits"]["hits"][index]["highlight"]
31
+ end if @response["hits"]["hits"]
29
32
  @response["hits"]["hits"]
30
33
  end
31
34
 
@@ -1,3 +1,3 @@
1
1
  module EagleSearch
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eagle_search
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Belo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-11-30 00:00:00.000000000 Z
11
+ date: 2015-12-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: elasticsearch