From d44d2f6319e9a0fd710c194edbbb32d9202b88f6 Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Thu, 4 Apr 2019 23:08:29 -0700 Subject: [PATCH] Added support for routing to similar method - closes #1249 --- CHANGELOG.md | 1 + lib/searchkick/index.rb | 11 ++++++----- lib/searchkick/record_data.rb | 4 ++-- test/similar_test.rb | 5 +++++ 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index acdf451..95c53e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## 3.1.3 [unreleased] - Added support for endless ranges +- Added support for routing to `similar` method - Added `prefix` to `where` - Fixed error with some language stemmers and Elasticsearch 6.5 - Fixed issue with misspellings below and body block diff --git a/lib/searchkick/index.rb b/lib/searchkick/index.rb index 7cc414e..d783647 100644 --- a/lib/searchkick/index.rb +++ b/lib/searchkick/index.rb @@ -91,11 +91,12 @@ module Searchkick alias_method :swap, :promote def retrieve(record) - client.get( - index: name, - type: document_type(record), - id: search_id(record) - )["_source"] + record_data = RecordData.new(self, record).record_data + + # remove underscore + get_options = Hash[record_data.map { |k, v| [k.to_s.sub(/\A_/, "").to_sym, v] }] + + client.get(get_options)["_source"] end def all_indices(unaliased: false) diff --git a/lib/searchkick/record_data.rb b/lib/searchkick/record_data.rb index d83991a..2381f52 100644 --- a/lib/searchkick/record_data.rb +++ b/lib/searchkick/record_data.rb @@ -39,8 +39,6 @@ module Searchkick @routing_key ||= Searchkick.server_below?("6.0.0") ? :_routing : :routing end - private - def record_data data = { _index: index.name, @@ -51,6 +49,8 @@ module Searchkick data end + private + def search_data(method_name = nil) partial_reindex = !method_name.nil? diff --git a/test/similar_test.rb b/test/similar_test.rb index 9c9c3ef..2f838e9 100644 --- a/test/similar_test.rb +++ b/test/similar_test.rb @@ -25,4 +25,9 @@ class SimilarTest < Minitest::Test store_names ["1% Organic Milk", "2% Organic Milk", "Fat Free Organic Milk", "Popcorn"] assert_equal ["2% Organic Milk"], Product.where(name: "1% Organic Milk").first.similar(fields: ["name"], order: ["name"], per_page: 1).map(&:name) end + + def test_routing + store_names ["Test"], Store + assert_equal [], Store.first.similar(fields: ["name"]).map(&:name) + end end -- libgit2 0.21.0