Commit f2f62887527d8c00cb502af549acd6c3f9e5972c

Authored by Andrew Kane
1 parent 07cb870c

Fixed multiword queries and word_* option - closes #114

lib/searchkick/reindex.rb
@@ -125,6 +125,11 @@ module Searchkick @@ -125,6 +125,11 @@ module Searchkick
125 tokenizer: "keyword", 125 tokenizer: "keyword",
126 filter: ["lowercase", "asciifolding"] 126 filter: ["lowercase", "asciifolding"]
127 }, 127 },
  128 + searchkick_word_search: {
  129 + type: "custom",
  130 + tokenizer: "standard",
  131 + filter: ["lowercase", "asciifolding"]
  132 + },
128 searchkick_suggest_index: { 133 searchkick_suggest_index: {
129 type: "custom", 134 type: "custom",
130 tokenizer: "standard", 135 tokenizer: "standard",
lib/searchkick/search.rb
@@ -92,11 +92,12 @@ module Searchkick @@ -92,11 +92,12 @@ module Searchkick
92 ] 92 ]
93 end 93 end
94 else 94 else
  95 + analyzer = field.match(/\.word_(start|middle|end)\z/) ? "searchkick_word_search" : "searchkick_autocomplete_search"
95 queries << { 96 queries << {
96 multi_match: { 97 multi_match: {
97 fields: [field], 98 fields: [field],
98 query: term, 99 query: term,
99 - analyzer: "searchkick_autocomplete_search" 100 + analyzer: analyzer
100 } 101 }
101 } 102 }
102 end 103 end
test/autocomplete_test.rb
@@ -18,33 +18,38 @@ class TestAutocomplete &lt; Minitest::Unit::TestCase @@ -18,33 +18,38 @@ class TestAutocomplete &lt; Minitest::Unit::TestCase
18 end 18 end
19 19
20 def test_text_start 20 def test_text_start
21 - store_names ["Where in the World is Carmen San Diego?"]  
22 - assert_search "whe", ["Where in the World is Carmen San Diego?"], fields: [{name: :text_start}] 21 + store_names ["Where in the World is Carmen San Diego"]
  22 + assert_search "where in the world is", ["Where in the World is Carmen San Diego"], fields: [{name: :text_start}]
  23 + assert_search "in the world", [], fields: [{name: :text_start}]
23 end 24 end
24 25
25 def test_text_middle 26 def test_text_middle
26 - store_names ["Where in the World is Carmen San Diego?"]  
27 - assert_search "n the wor", ["Where in the World is Carmen San Diego?"], fields: [{name: :text_middle}] 27 + store_names ["Where in the World is Carmen San Diego"]
  28 + assert_search "where in the world is", ["Where in the World is Carmen San Diego"], fields: [{name: :text_middle}]
  29 + assert_search "n the wor", ["Where in the World is Carmen San Diego"], fields: [{name: :text_middle}]
  30 + assert_search "men san diego", ["Where in the World is Carmen San Diego"], fields: [{name: :text_middle}]
  31 + assert_search "world carmen", [], fields: [{name: :text_middle}]
28 end 32 end
29 33
30 def test_text_end 34 def test_text_end
31 - store_names ["Where in the World is Carmen San Diego?"]  
32 - assert_search "ego?", ["Where in the World is Carmen San Diego?"], fields: [{name: :text_end}] 35 + store_names ["Where in the World is Carmen San Diego"]
  36 + assert_search "men san diego", ["Where in the World is Carmen San Diego"], fields: [{name: :text_end}]
  37 + assert_search "carmen san", [], fields: [{name: :text_end}]
33 end 38 end
34 39
35 def test_word_start 40 def test_word_start
36 - store_names ["Where in the World is Carmen San Diego?"]  
37 - assert_search "car", ["Where in the World is Carmen San Diego?"], fields: [{name: :word_start}] 41 + store_names ["Where in the World is Carmen San Diego"]
  42 + assert_search "car san wor", ["Where in the World is Carmen San Diego"], fields: [{name: :word_start}]
38 end 43 end
39 44
40 def test_word_middle 45 def test_word_middle
41 - store_names ["Where in the World is Carmen San Diego?"]  
42 - assert_search "orl", ["Where in the World is Carmen San Diego?"], fields: [{name: :word_middle}] 46 + store_names ["Where in the World is Carmen San Diego"]
  47 + assert_search "orl", ["Where in the World is Carmen San Diego"], fields: [{name: :word_middle}]
43 end 48 end
44 49
45 def test_word_end 50 def test_word_end
46 - store_names ["Where in the World is Carmen San Diego?"]  
47 - assert_search "men", ["Where in the World is Carmen San Diego?"], fields: [{name: :word_end}] 51 + store_names ["Where in the World is Carmen San Diego"]
  52 + assert_search "rld men ego", ["Where in the World is Carmen San Diego"], fields: [{name: :word_end}]
48 end 53 end
49 54
50 end 55 end