lib/searchkick/index_options.rb in searchkick-4.6.3 vs lib/searchkick/index_options.rb in searchkick-5.0.0

- old
+ new

@@ -5,22 +5,20 @@ def initialize(index) @options = index.options end def index_options - custom_mapping = options[:mappings] || {} - if below70? && custom_mapping.keys.map(&:to_sym).include?(:properties) - # add type - custom_mapping = {index_type => custom_mapping} - end + # mortal symbols are garbage collected in Ruby 2.2+ + custom_settings = (options[:settings] || {}).deep_symbolize_keys + custom_mappings = (options[:mappings] || {}).deep_symbolize_keys if options[:mappings] && !options[:merge_mappings] - settings = options[:settings] || {} - mappings = custom_mapping + settings = custom_settings + mappings = custom_mappings else - settings = generate_settings - mappings = generate_mappings.symbolize_keys.deep_merge(custom_mapping.symbolize_keys) + settings = generate_settings.deep_symbolize_keys.deep_merge(custom_settings) + mappings = generate_mappings.deep_symbolize_keys.deep_merge(custom_mappings) end set_deep_paging(settings) if options[:deep_paging] { @@ -160,35 +158,27 @@ if Searchkick.env == "test" settings[:number_of_shards] = 1 settings[:number_of_replicas] = 0 end - # TODO remove in Searchkick 5 (classic no longer supported) if options[:similarity] settings[:similarity] = {default: {type: options[:similarity]}} end - unless below62? - settings[:index] = { - max_ngram_diff: 49, - max_shingle_diff: 4 - } - end + settings[:index] = { + max_ngram_diff: 49, + max_shingle_diff: 4 + } if options[:case_sensitive] settings[:analysis][:analyzer].each do |_, analyzer| analyzer[:filter].delete("lowercase") end end - # TODO do this last in Searchkick 5 - settings = settings.symbolize_keys.deep_merge((options[:settings] || {}).symbolize_keys) - add_synonyms(settings) add_search_synonyms(settings) - # TODO remove in Searchkick 5 - add_wordnet(settings) if options[:wordnet] if options[:special_characters] == false settings[:analysis][:analyzer].each_value do |analyzer_settings| analyzer_settings[:filter].reject! { |f| f == "asciifolding" } end @@ -221,23 +211,11 @@ }, searchkick_search2: { type: "smartcn" } ) - when "japanese" - settings[:analysis][:analyzer].merge!( - default_analyzer => { - type: "kuromoji" - }, - searchkick_search: { - type: "kuromoji" - }, - searchkick_search2: { - type: "kuromoji" - } - ) - when "japanese2" + when "japanese", "japanese2" analyzer = { type: "custom", tokenizer: "kuromoji_tokenizer", filter: [ "kuromoji_baseform", @@ -377,20 +355,19 @@ count: {type: "integer"} } } end - mapping_options = Hash[ + mapping_options = [:suggest, :word, :text_start, :text_middle, :text_end, :word_start, :word_middle, :word_end, :highlight, :searchable, :filterable] - .map { |type| [type, (options[type] || []).map(&:to_s)] } - ] + .to_h { |type| [type, (options[type] || []).map(&:to_s)] } word = options[:word] != false && (!options[:match] || options[:match] == :word) mapping_options[:searchable].delete("_all") - analyzed_field_options = {type: default_type, index: true, analyzer: default_analyzer} + analyzed_field_options = {type: default_type, index: true, analyzer: default_analyzer.to_s} mapping_options.values.flatten.uniq.each do |field| fields = {} if options.key?(:filterable) && !mapping_options[:filterable].include?(field) @@ -479,14 +456,10 @@ } } ] } - if below70? - mappings = {index_type => mappings} - end - mappings end def add_synonyms(settings) synonyms = options[:synonyms] || [] @@ -531,11 +504,11 @@ synonyms: search_synonyms.select { |s| s.size > 1 }.map { |s| s.is_a?(Array) ? s.join(",") : s }.map(&:downcase) } end settings[:analysis][:filter][:searchkick_synonym_graph] = synonym_graph - if options[:language] == "japanese2" + if ["japanese", "japanese2"].include?(options[:language]) [:searchkick_search, :searchkick_search2].each do |analyzer| settings[:analysis][:analyzer][analyzer][:filter].insert(4, "searchkick_synonym_graph") end else [:searchkick_search2, :searchkick_word_search].each do |analyzer| @@ -547,25 +520,10 @@ end end end end - def add_wordnet(settings) - settings[:analysis][:filter][:searchkick_wordnet] = { - type: "synonym", - format: "wordnet", - synonyms_path: Searchkick.wordnet_path - } - - settings[:analysis][:analyzer][default_analyzer][:filter].insert(4, "searchkick_wordnet") - settings[:analysis][:analyzer][default_analyzer][:filter] << "searchkick_wordnet" - - %w(word_start word_middle word_end).each do |type| - settings[:analysis][:analyzer]["searchkick_#{type}_index".to_sym][:filter].insert(2, "searchkick_wordnet") - end - end - def set_deep_paging(settings) if !settings.dig(:index, :max_result_window) && !settings[:"index.max_result_window"] settings[:index] ||= {} settings[:index][:max_result_window] = 1_000_000_000 end @@ -583,17 +541,9 @@ "text" end def default_analyzer :searchkick_index - end - - def below62? - Searchkick.server_below?("6.2.0") - end - - def below70? - Searchkick.server_below?("7.0.0") end def below73? Searchkick.server_below?("7.3.0") end