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