Commit d3ddfc64492fdcc3e4332247a845e6f304f13c81
Exists in
master
and in
21 other branches
Merge branch 'bogdanovich-master'
Showing
6 changed files
with
51 additions
and
5 deletions
Show diff stats
CHANGELOG.md
README.md
@@ -647,6 +647,22 @@ Also supports [additional options](http://www.elasticsearch.org/guide/en/elastic | @@ -647,6 +647,22 @@ Also supports [additional options](http://www.elasticsearch.org/guide/en/elastic | ||
647 | City.search "san", boost_by_distance: {field: :location, origin: [37, -122], function: :linear, scale: "30mi", decay: 0.5} | 647 | City.search "san", boost_by_distance: {field: :location, origin: [37, -122], function: :linear, scale: "30mi", decay: 0.5} |
648 | ``` | 648 | ``` |
649 | 649 | ||
650 | +### Routing [master] | ||
651 | + | ||
652 | +Searchkick supports [Elasticsearch’s routing feature](https://www.elastic.co/blog/customizing-your-document-routing). | ||
653 | + | ||
654 | +```ruby | ||
655 | +class Contact < ActiveRecord::Base | ||
656 | + searchkick routing: :user_id | ||
657 | +end | ||
658 | +``` | ||
659 | + | ||
660 | +Reindex and search with: | ||
661 | + | ||
662 | +```ruby | ||
663 | +Contact.search "John", routing: current_user.id | ||
664 | +``` | ||
665 | + | ||
650 | ## Inheritance | 666 | ## Inheritance |
651 | 667 | ||
652 | Searchkick supports single table inheritance. | 668 | Searchkick supports single table inheritance. |
lib/searchkick/index.rb
@@ -423,9 +423,15 @@ module Searchkick | @@ -423,9 +423,15 @@ module Searchkick | ||
423 | } | 423 | } |
424 | end | 424 | end |
425 | 425 | ||
426 | + routing = {} | ||
427 | + if options[:routing] | ||
428 | + routing = {required: true, path: options[:routing].to_s} | ||
429 | + end | ||
430 | + | ||
426 | mappings = { | 431 | mappings = { |
427 | _default_: { | 432 | _default_: { |
428 | properties: mapping, | 433 | properties: mapping, |
434 | + _routing: routing, | ||
429 | # https://gist.github.com/kimchy/2898285 | 435 | # https://gist.github.com/kimchy/2898285 |
430 | dynamic_templates: [ | 436 | dynamic_templates: [ |
431 | { | 437 | { |
lib/searchkick/query.rb
@@ -379,6 +379,11 @@ module Searchkick | @@ -379,6 +379,11 @@ module Searchkick | ||
379 | if options[:type] || klass != searchkick_klass | 379 | if options[:type] || klass != searchkick_klass |
380 | @type = [options[:type] || klass].flatten.map { |v| searchkick_index.klass_document_type(v) } | 380 | @type = [options[:type] || klass].flatten.map { |v| searchkick_index.klass_document_type(v) } |
381 | end | 381 | end |
382 | + | ||
383 | + # routing | ||
384 | + if options[:routing] | ||
385 | + @routing = options[:routing] | ||
386 | + end | ||
382 | end | 387 | end |
383 | 388 | ||
384 | @body = payload | 389 | @body = payload |
@@ -407,6 +412,7 @@ module Searchkick | @@ -407,6 +412,7 @@ module Searchkick | ||
407 | body: body | 412 | body: body |
408 | } | 413 | } |
409 | params.merge!(type: @type) if @type | 414 | params.merge!(type: @type) if @type |
415 | + params.merge!(routing: @routing) if @routing | ||
410 | params | 416 | params |
411 | end | 417 | end |
412 | 418 |
@@ -0,0 +1,14 @@ | @@ -0,0 +1,14 @@ | ||
1 | +require_relative "test_helper" | ||
2 | + | ||
3 | +class TestRouting < Minitest::Test | ||
4 | + | ||
5 | + def test_routing_query | ||
6 | + query = Store.search("Dollar Tree", routing: "Dollar Tree", execute: false) | ||
7 | + assert_equal query.params[:routing], "Dollar Tree" | ||
8 | + end | ||
9 | + | ||
10 | + def test_routing_mappings | ||
11 | + index_options = Store.searchkick_index.index_options | ||
12 | + assert_equal index_options[:mappings][:_default_][:_routing], {required: true, path: "name"} | ||
13 | + end | ||
14 | +end |
test/test_helper.rb
@@ -212,12 +212,15 @@ class Product | @@ -212,12 +212,15 @@ class Product | ||
212 | end | 212 | end |
213 | 213 | ||
214 | class Store | 214 | class Store |
215 | - searchkick mappings: { | ||
216 | - store: { | ||
217 | - properties: { | ||
218 | - name: {type: "string", analyzer: "keyword"} | 215 | + searchkick \ |
216 | + routing: :name, | ||
217 | + merge_mappings: true, | ||
218 | + mappings: { | ||
219 | + store: { | ||
220 | + properties: { | ||
221 | + name: {type: "string", analyzer: "keyword"}, | ||
222 | + } | ||
219 | } | 223 | } |
220 | - } | ||
221 | } | 224 | } |
222 | end | 225 | end |
223 | 226 |