Commit c56b1051ceadca7e2b0724af0f633b8b8a0249e8

Authored by Andrew Kane
1 parent f739ce41
Exists in search_as_you_type

Added synonyms

lib/searchkick/index_options.rb
@@ -109,11 +109,16 @@ module Searchkick @@ -109,11 +109,16 @@ module Searchkick
109 tokenizer: "standard", 109 tokenizer: "standard",
110 filter: ["lowercase", "asciifolding", "reverse", "searchkick_edge_ngram", "reverse"] 110 filter: ["lowercase", "asciifolding", "reverse", "searchkick_edge_ngram", "reverse"]
111 }, 111 },
112 - searchkick_search_as_you_type: { 112 + searchkick_search_as_you_type_index: {
113 type: "custom", 113 type: "custom",
114 tokenizer: "standard", 114 tokenizer: "standard",
115 filter: ["lowercase", "asciifolding"] 115 filter: ["lowercase", "asciifolding"]
116 }, 116 },
  117 + searchkick_search_as_you_type_search: {
  118 + type: "custom",
  119 + tokenizer: "standard",
  120 + filter: ["lowercase", "asciifolding"]
  121 + }
117 }, 122 },
118 filter: { 123 filter: {
119 searchkick_index_shingle: { 124 searchkick_index_shingle: {
@@ -330,7 +335,7 @@ module Searchkick @@ -330,7 +335,7 @@ module Searchkick
330 mapping_options[:searchable].delete("_all") 335 mapping_options[:searchable].delete("_all")
331 336
332 analyzed_field_options = {type: default_type, index: true, analyzer: default_analyzer} 337 analyzed_field_options = {type: default_type, index: true, analyzer: default_analyzer}
333 - search_as_you_type_options = {type: "search_as_you_type", analyzer: "searchkick_search_as_you_type"} 338 + search_as_you_type_options = {type: "search_as_you_type", analyzer: "searchkick_search_as_you_type_index"}
334 339
335 mapping_options.values.flatten.uniq.each do |field| 340 mapping_options.values.flatten.uniq.each do |field|
336 fields = {} 341 fields = {}
@@ -483,7 +488,7 @@ module Searchkick @@ -483,7 +488,7 @@ module Searchkick
483 end 488 end
484 settings[:analysis][:filter][:searchkick_synonym_graph] = synonym_graph 489 settings[:analysis][:filter][:searchkick_synonym_graph] = synonym_graph
485 490
486 - [:searchkick_search2, :searchkick_word_search].each do |analyzer| 491 + [:searchkick_search2, :searchkick_word_search, :searchkick_search_as_you_type_search].each do |analyzer|
487 settings[:analysis][:analyzer][analyzer][:filter].insert(2, "searchkick_synonym_graph") 492 settings[:analysis][:analyzer][analyzer][:filter].insert(2, "searchkick_synonym_graph")
488 end 493 end
489 end 494 end
lib/searchkick/query.rb
@@ -367,9 +367,9 @@ module Searchkick @@ -367,9 +367,9 @@ module Searchkick
367 exclude_analyzer = "keyword" 367 exclude_analyzer = "keyword"
368 elsif field.end_with?(".search_as_you_type") 368 elsif field.end_with?(".search_as_you_type")
369 queries_to_add << { 369 queries_to_add << {
370 - multi_match: shared_options.merge(type: "bool_prefix", fields: [field, "#{field}._2gram", "#{field}._3gram"]) 370 + multi_match: shared_options.merge(type: "bool_prefix", analyzer: "searchkick_search_as_you_type_search", fields: [field, "#{field}._2gram", "#{field}._3gram"])
371 } 371 }
372 - exclude_analyzer = "searchkick_search_as_you_type" 372 + exclude_analyzer = "searchkick_search_as_you_type_search"
373 else 373 else
374 analyzer = field =~ /\.word_(start|middle|end)\z/ ? "searchkick_word_search" : "searchkick_autocomplete_search" 374 analyzer = field =~ /\.word_(start|middle|end)\z/ ? "searchkick_word_search" : "searchkick_autocomplete_search"
375 qs << shared_options.merge(analyzer: analyzer) 375 qs << shared_options.merge(analyzer: analyzer)
test/models/item.rb
1 class Item 1 class Item
2 - searchkick search_as_you_type: true 2 + searchkick \
  3 + search_as_you_type: true,
  4 + search_synonyms: [["greeting", "hello"]]
3 end 5 end
test/search_as_you_type_test.rb
@@ -31,6 +31,12 @@ class SearchAsYouTypeTest &lt; Minitest::Test @@ -31,6 +31,12 @@ class SearchAsYouTypeTest &lt; Minitest::Test
31 assert_order "one two three", expected 31 assert_order "one two three", expected
32 end 32 end
33 33
  34 + # search time synonyms do not match partial words
  35 + def test_search_synonyms
  36 + store_names ["Hello", "Goodbye"]
  37 + assert_search "greeting", ["Hello"]
  38 + end
  39 +
34 def default_model 40 def default_model
35 Item 41 Item
36 end 42 end