Commit 9d067a770e605fa71bc28ad328532937278d58c4
1 parent
fded93c7
Exists in
master
and in
21 other branches
Added highlight option - closes #265
Showing
4 changed files
with
16 additions
and
4 deletions
Show diff stats
README.md
@@ -539,6 +539,14 @@ Product.search "*", facets: {store_id: {stats: true}} | @@ -539,6 +539,14 @@ Product.search "*", facets: {store_id: {stats: true}} | ||
539 | 539 | ||
540 | ### Highlight | 540 | ### Highlight |
541 | 541 | ||
542 | +Specify which fields to index with highlighting. [master] | ||
543 | + | ||
544 | +```ruby | ||
545 | +class Product < ActiveRecord::Base | ||
546 | + searchkick highlight: [:name] | ||
547 | +end | ||
548 | +``` | ||
549 | + | ||
542 | Highlight the search query in the results. | 550 | Highlight the search query in the results. |
543 | 551 | ||
544 | ```ruby | 552 | ```ruby |
lib/searchkick/reindex.rb
@@ -261,7 +261,7 @@ module Searchkick | @@ -261,7 +261,7 @@ module Searchkick | ||
261 | end | 261 | end |
262 | 262 | ||
263 | mapping_options = Hash[ | 263 | mapping_options = Hash[ |
264 | - [:autocomplete, :suggest, :text_start, :text_middle, :text_end, :word_start, :word_middle, :word_end] | 264 | + [:autocomplete, :suggest, :text_start, :text_middle, :text_end, :word_start, :word_middle, :word_end, :highlight] |
265 | .map{|type| [type, (options[type] || []).map(&:to_s)] } | 265 | .map{|type| [type, (options[type] || []).map(&:to_s)] } |
266 | ] | 266 | ] |
267 | 267 | ||
@@ -276,12 +276,16 @@ module Searchkick | @@ -276,12 +276,16 @@ module Searchkick | ||
276 | } | 276 | } |
277 | } | 277 | } |
278 | 278 | ||
279 | - mapping_options.each do |type, fields| | 279 | + mapping_options.except(:highlight).each do |type, fields| |
280 | if fields.include?(field) | 280 | if fields.include?(field) |
281 | field_mapping[:fields][type] = {type: "string", index: "analyzed", analyzer: "searchkick_#{type}_index"} | 281 | field_mapping[:fields][type] = {type: "string", index: "analyzed", analyzer: "searchkick_#{type}_index"} |
282 | end | 282 | end |
283 | end | 283 | end |
284 | 284 | ||
285 | + if mapping_options[:highlight].include?(field) | ||
286 | + field_mapping[:fields]["analyzed"][:term_vector] = "with_positions_offsets" | ||
287 | + end | ||
288 | + | ||
285 | mapping[field] = field_mapping | 289 | mapping[field] = field_mapping |
286 | end | 290 | end |
287 | 291 |
test/highlight_test.rb
@@ -20,7 +20,6 @@ class TestHighlight < Minitest::Test | @@ -20,7 +20,6 @@ class TestHighlight < Minitest::Test | ||
20 | end | 20 | end |
21 | 21 | ||
22 | def test_multiple_words | 22 | def test_multiple_words |
23 | - skip "Issue #265" | ||
24 | store_names ["Hello World Hello"] | 23 | store_names ["Hello World Hello"] |
25 | assert_equal "<em>Hello</em> World <em>Hello</em>", Product.search("hello", fields: [:name], highlight: true).with_details.first[1][:highlight][:name] | 24 | assert_equal "<em>Hello</em> World <em>Hello</em>", Product.search("hello", fields: [:name], highlight: true).with_details.first[1][:highlight][:name] |
26 | end | 25 | end |
test/test_helper.rb
@@ -141,7 +141,8 @@ class Product | @@ -141,7 +141,8 @@ class Product | ||
141 | text_end: [:name], | 141 | text_end: [:name], |
142 | word_start: [:name], | 142 | word_start: [:name], |
143 | word_middle: [:name], | 143 | word_middle: [:name], |
144 | - word_end: [:name] | 144 | + word_end: [:name], |
145 | + highlight: [:name] | ||
145 | 146 | ||
146 | attr_accessor :conversions, :user_ids, :aisle | 147 | attr_accessor :conversions, :user_ids, :aisle |
147 | 148 |