Commit e341552c18464e7d113482fcb1a4f0216d779854

Authored by Andrew Kane
1 parent 682b0878

Moved language analyzers to new method

Showing 1 changed file with 48 additions and 57 deletions   Show diff stats
lib/searchkick/index_options.rb
... ... @@ -154,7 +154,53 @@ module Searchkick
154 154 }
155 155  
156 156 stem = options[:stem]
  157 + stem = false if update_language(settings)
157 158  
  159 + if Searchkick.env == "test"
  160 + settings[:number_of_shards] = 1
  161 + settings[:number_of_replicas] = 0
  162 + end
  163 +
  164 + if options[:similarity]
  165 + settings[:similarity] = {default: {type: options[:similarity]}}
  166 + end
  167 +
  168 + unless below62
  169 + settings[:index] = {
  170 + max_ngram_diff: 49,
  171 + max_shingle_diff: 4
  172 + }
  173 + end
  174 +
  175 + if options[:case_sensitive]
  176 + settings[:analysis][:analyzer].each do |_, analyzer|
  177 + analyzer[:filter].delete("lowercase")
  178 + end
  179 + end
  180 +
  181 + if stem == false
  182 + settings[:analysis][:filter].delete(:searchkick_stemmer)
  183 + settings[:analysis][:analyzer].each do |_, analyzer|
  184 + analyzer[:filter].delete("searchkick_stemmer") if analyzer[:filter]
  185 + end
  186 + end
  187 +
  188 + settings = settings.symbolize_keys.deep_merge((options[:settings] || {}).symbolize_keys)
  189 +
  190 + add_synonyms(settings)
  191 + add_search_synonyms(settings)
  192 + add_wordnet(settings) if options[:wordnet]
  193 +
  194 + if options[:special_characters] == false
  195 + settings[:analysis][:analyzer].each_value do |analyzer_settings|
  196 + analyzer_settings[:filter].reject! { |f| f == "asciifolding" }
  197 + end
  198 + end
  199 +
  200 + settings
  201 + end
  202 +
  203 + def update_language(settings)
158 204 case language
159 205 when "chinese"
160 206 settings[:analysis][:analyzer].merge!(
... ... @@ -168,8 +214,6 @@ module Searchkick
168 214 type: "ik_max_word"
169 215 }
170 216 )
171   -
172   - stem = false
173 217 when "chinese2", "smartcn"
174 218 settings[:analysis][:analyzer].merge!(
175 219 default_analyzer => {
... ... @@ -182,8 +226,6 @@ module Searchkick
182 226 type: "smartcn"
183 227 }
184 228 )
185   -
186   - stem = false
187 229 when "japanese"
188 230 settings[:analysis][:analyzer].merge!(
189 231 default_analyzer => {
... ... @@ -196,8 +238,6 @@ module Searchkick
196 238 type: "kuromoji"
197 239 }
198 240 )
199   -
200   - stem = false
201 241 when "korean"
202 242 settings[:analysis][:analyzer].merge!(
203 243 default_analyzer => {
... ... @@ -210,8 +250,6 @@ module Searchkick
210 250 type: "openkoreantext-analyzer"
211 251 }
212 252 )
213   -
214   - stem = false
215 253 when "korean2"
216 254 settings[:analysis][:analyzer].merge!(
217 255 default_analyzer => {
... ... @@ -224,8 +262,6 @@ module Searchkick
224 262 type: "nori"
225 263 }
226 264 )
227   -
228   - stem = false
229 265 when "vietnamese"
230 266 settings[:analysis][:analyzer].merge!(
231 267 default_analyzer => {
... ... @@ -238,8 +274,6 @@ module Searchkick
238 274 type: "vi_analyzer"
239 275 }
240 276 )
241   -
242   - stem = false
243 277 when "polish", "ukrainian"
244 278 settings[:analysis][:analyzer].merge!(
245 279 default_analyzer => {
... ... @@ -252,52 +286,9 @@ module Searchkick
252 286 type: language
253 287 }
254 288 )
255   -
256   - stem = false
257   - end
258   -
259   - if Searchkick.env == "test"
260   - settings[:number_of_shards] = 1
261   - settings[:number_of_replicas] = 0
262   - end
263   -
264   - if options[:similarity]
265   - settings[:similarity] = {default: {type: options[:similarity]}}
266   - end
267   -
268   - unless below62
269   - settings[:index] = {
270   - max_ngram_diff: 49,
271   - max_shingle_diff: 4
272   - }
273   - end
274   -
275   - if options[:case_sensitive]
276   - settings[:analysis][:analyzer].each do |_, analyzer|
277   - analyzer[:filter].delete("lowercase")
278   - end
279   - end
280   -
281   - if stem == false
282   - settings[:analysis][:filter].delete(:searchkick_stemmer)
283   - settings[:analysis][:analyzer].each do |_, analyzer|
284   - analyzer[:filter].delete("searchkick_stemmer") if analyzer[:filter]
285   - end
286   - end
287   -
288   - settings = settings.symbolize_keys.deep_merge((options[:settings] || {}).symbolize_keys)
289   -
290   - add_synonyms(settings)
291   - add_search_synonyms(settings)
292   - add_wordnet(settings) if options[:wordnet]
293   -
294   - if options[:special_characters] == false
295   - settings[:analysis][:analyzer].each_value do |analyzer_settings|
296   - analyzer_settings[:filter].reject! { |f| f == "asciifolding" }
297   - end
  289 + else
  290 + false # not updated
298 291 end
299   -
300   - settings
301 292 end
302 293  
303 294 def generate_mappings
... ...