Class: ApproximateSearch

Inherits:
Object
  • Object
show all
Defined in:
lib/sekka/approximatesearch.rb

Instance Method Summary collapse

Constructor Details

#initialize(jarow_shikii) ⇒ ApproximateSearch

Returns a new instance of ApproximateSearch.



38
39
40
# File 'lib/sekka/approximatesearch.rb', line 38

def initialize( jarow_shikii )
  @jarow_shikii = jarow_shikii
end

Instance Method Details

#search(userid, kvs, keyword, type) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/sekka/approximatesearch.rb', line 42

def search( userid, kvs, keyword, type )
  arr = []
  case userid
  when "M"
    arr  = searchByUser( "M", kvs, keyword, type )
  else
    h = {}
    searchByUser( "M", kvs, keyword, type ).each { |item| h[ item[1] ] = item[0] }
    searchByUser(  userid,  kvs, keyword, type ).each { |item| h[ item[1] ] = item[0] }
    h.keys.each { |k|  arr << [ h[k], k ] }
  end
  arr.sort_by {|item| [1.0 - item[0], item[1]]}
end

#searchByUser(userid, kvs, keyword, type) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/sekka/approximatesearch.rb', line 56

def searchByUser( userid, kvs, keyword, type )
  pair = case type
         when 'k' # okuri nashi kanji entry
           ["Ik:" + userid + ":", keyword.downcase]
         when 'r' # okuri nashi kanji (reverse) entry
           ["Ir:" + userid + ":", keyword.downcase]
         when 'K' # okuri ari   kanji entry
           ["IK:" + userid + ":", keyword]
         when 'h' # hiragana phrase entry
           ["Ih:" + userid + ":", keyword.downcase]
         else
           raise sprintf( "Error: ApproximateSearch#search unknown type %s ", type )
         end
  prefix   = pair[0]
  _keyword = pair[1]
  trie = DistributedTrie::Trie.new( kvs, prefix )
  trie.fuzzySearch( _keyword, @jarow_shikii )
end