Commit 0e10671561be314d6a6f7c5ae3c7c4788cd46ebb

Authored by Andrew Kane
1 parent 43484d84

Use search method for similar items

lib/searchkick/search.rb
... ... @@ -35,7 +35,16 @@ module Searchkick
35 35  
36 36 all = term == "*"
37 37  
38   - if all
  38 + if options[:similar]
  39 + payload = {
  40 + more_like_this: {
  41 + fields: fields,
  42 + like_text: term,
  43 + min_doc_freq: 1,
  44 + min_term_freq: 1
  45 + }
  46 + }
  47 + elsif all
39 48 payload = {
40 49 match_all: {}
41 50 }
... ...
lib/searchkick/similar.rb
... ... @@ -6,28 +6,13 @@ module Searchkick
6 6 .keep_if{|k,v| k[0] != "_" and (!options[:fields] or options[:fields].map(&:to_sym).include?(k)) }
7 7 .values.compact.join(" ")
8 8  
9   - fields = options[:fields] ? options[:fields].map{|f| "#{f}.analyzed" } : ["_all"]
10   -
11   - payload = {
12   - query: {
13   - more_like_this: {
14   - fields: fields,
15   - like_text: like_text,
16   - min_doc_freq: 1,
17   - min_term_freq: 1
18   - }
19   - },
20   - filter: {
21   - not: {
22   - term: {
23   - _id: id
24   - }
25   - }
26   - }
27   - }
28   -
29   - search = Tire::Search::Search.new(index_name, payload: payload)
30   - Searchkick::Results.new(search.json, search.options)
  9 + # TODO deep merge method
  10 + options[:where] ||= {}
  11 + options[:where][:_id] ||= {}
  12 + options[:where][:_id][:not] = id
  13 + options[:limit] ||= 10
  14 + options[:similar] = true
  15 + self.class.search(like_text, options)
31 16 end
32 17  
33 18 end
... ...