diff --git a/lib/searchkick/index_options.rb b/lib/searchkick/index_options.rb index 5cc4d6d..9205660 100644 --- a/lib/searchkick/index_options.rb +++ b/lib/searchkick/index_options.rb @@ -109,11 +109,16 @@ module Searchkick tokenizer: "standard", filter: ["lowercase", "asciifolding", "reverse", "searchkick_edge_ngram", "reverse"] }, - searchkick_search_as_you_type: { + searchkick_search_as_you_type_index: { type: "custom", tokenizer: "standard", filter: ["lowercase", "asciifolding"] }, + searchkick_search_as_you_type_search: { + type: "custom", + tokenizer: "standard", + filter: ["lowercase", "asciifolding"] + } }, filter: { searchkick_index_shingle: { @@ -330,7 +335,7 @@ module Searchkick mapping_options[:searchable].delete("_all") analyzed_field_options = {type: default_type, index: true, analyzer: default_analyzer} - search_as_you_type_options = {type: "search_as_you_type", analyzer: "searchkick_search_as_you_type"} + search_as_you_type_options = {type: "search_as_you_type", analyzer: "searchkick_search_as_you_type_index"} mapping_options.values.flatten.uniq.each do |field| fields = {} @@ -483,7 +488,7 @@ module Searchkick end settings[:analysis][:filter][:searchkick_synonym_graph] = synonym_graph - [:searchkick_search2, :searchkick_word_search].each do |analyzer| + [:searchkick_search2, :searchkick_word_search, :searchkick_search_as_you_type_search].each do |analyzer| settings[:analysis][:analyzer][analyzer][:filter].insert(2, "searchkick_synonym_graph") end end diff --git a/lib/searchkick/query.rb b/lib/searchkick/query.rb index 9482f66..fd410ac 100644 --- a/lib/searchkick/query.rb +++ b/lib/searchkick/query.rb @@ -367,9 +367,9 @@ module Searchkick exclude_analyzer = "keyword" elsif field.end_with?(".search_as_you_type") queries_to_add << { - multi_match: shared_options.merge(type: "bool_prefix", fields: [field, "#{field}._2gram", "#{field}._3gram"]) + multi_match: shared_options.merge(type: "bool_prefix", analyzer: "searchkick_search_as_you_type_search", fields: [field, "#{field}._2gram", "#{field}._3gram"]) } - exclude_analyzer = "searchkick_search_as_you_type" + exclude_analyzer = "searchkick_search_as_you_type_search" else analyzer = field =~ /\.word_(start|middle|end)\z/ ? "searchkick_word_search" : "searchkick_autocomplete_search" qs << shared_options.merge(analyzer: analyzer) diff --git a/test/models/item.rb b/test/models/item.rb index b18ebcb..46689fc 100644 --- a/test/models/item.rb +++ b/test/models/item.rb @@ -1,3 +1,5 @@ class Item - searchkick search_as_you_type: true + searchkick \ + search_as_you_type: true, + search_synonyms: [["greeting", "hello"]] end diff --git a/test/search_as_you_type_test.rb b/test/search_as_you_type_test.rb index 42c5be7..83f9a18 100644 --- a/test/search_as_you_type_test.rb +++ b/test/search_as_you_type_test.rb @@ -31,6 +31,12 @@ class SearchAsYouTypeTest < Minitest::Test assert_order "one two three", expected end + # search time synonyms do not match partial words + def test_search_synonyms + store_names ["Hello", "Goodbye"] + assert_search "greeting", ["Hello"] + end + def default_model Item end -- libgit2 0.21.0