From 0e10671561be314d6a6f7c5ae3c7c4788cd46ebb Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Wed, 14 Aug 2013 09:13:49 -0700 Subject: [PATCH] Use search method for similar items --- lib/searchkick/search.rb | 11 ++++++++++- lib/searchkick/similar.rb | 29 +++++++---------------------- 2 files changed, 17 insertions(+), 23 deletions(-) diff --git a/lib/searchkick/search.rb b/lib/searchkick/search.rb index f0dd7af..3b66336 100644 --- a/lib/searchkick/search.rb +++ b/lib/searchkick/search.rb @@ -35,7 +35,16 @@ module Searchkick all = term == "*" - if all + if options[:similar] + payload = { + more_like_this: { + fields: fields, + like_text: term, + min_doc_freq: 1, + min_term_freq: 1 + } + } + elsif all payload = { match_all: {} } diff --git a/lib/searchkick/similar.rb b/lib/searchkick/similar.rb index 08fd905..42eca42 100644 --- a/lib/searchkick/similar.rb +++ b/lib/searchkick/similar.rb @@ -6,28 +6,13 @@ module Searchkick .keep_if{|k,v| k[0] != "_" and (!options[:fields] or options[:fields].map(&:to_sym).include?(k)) } .values.compact.join(" ") - fields = options[:fields] ? options[:fields].map{|f| "#{f}.analyzed" } : ["_all"] - - payload = { - query: { - more_like_this: { - fields: fields, - like_text: like_text, - min_doc_freq: 1, - min_term_freq: 1 - } - }, - filter: { - not: { - term: { - _id: id - } - } - } - } - - search = Tire::Search::Search.new(index_name, payload: payload) - Searchkick::Results.new(search.json, search.options) + # TODO deep merge method + options[:where] ||= {} + options[:where][:_id] ||= {} + options[:where][:_id][:not] = id + options[:limit] ||= 10 + options[:similar] = true + self.class.search(like_text, options) end end -- libgit2 0.21.0