Class: OssActiveRecord::IndexInstance

Inherits:
Object
  • Object
show all
Defined in:
lib/oss_active_record/index_instance.rb

Constant Summary collapse

@@_analyzers =
{
:text => 'StandardAnalyzer',
:integer => 'IntegerAnalyzer',
:decimal => 'DecimalAnalyzer'}

Instance Method Summary collapse

Constructor Details

#initialize(index_name) ⇒ IndexInstance

Returns a new instance of IndexInstance.



9
10
11
12
13
14
15
16
17
# File 'lib/oss_active_record/index_instance.rb', line 9

def initialize(index_name)
  @_index_name ||= index_name
  @_fields= []
  @_field_id = nil
  @_text_fields = {}
  @_sortable_fields = {}
  @_all_fields = {}
  @_index = nil
end

Instance Method Details

#add_field(name, type, block = nil) ⇒ Object



50
51
52
# File 'lib/oss_active_record/index_instance.rb', line 50

def add_field(name, type, block=nil)
  @_fields<<{:name => name, :type => type,:block => block}
end

#create_schema!Object



54
55
56
57
58
59
60
61
62
# File 'lib/oss_active_record/index_instance.rb', line 54

def create_schema!
  @_index.create('EMPTY_INDEX') unless @_index.list.include? @_index_name
  @_field_id =  @_fields.detect {|f| f[:name] == :id }
  @_field_id = {:name => 'id', :type => 'integer',:block => nil} if @_field_id.nil?
  @_fields <<  @_field_id
  @_fields.each do |field|
    create_schema_field!(field)
  end
end

#create_schema_field!(field) ⇒ Object



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/oss_active_record/index_instance.rb', line 64

def create_schema_field!(field)
  analyzer = @@_analyzers[field[:type]] if field[:name] != :id
  termVectors = { :text => 'POSITIONS_OFFSETS'}
  termVector = termVectors[field[:type]] || 'NO'
  name =  "#{field[:name]}|#{field[:type]}"
  params = {
    'name' => name,
    'analyzer' => analyzer,
    'stored' => 'NO',
    'indexed' => 'YES',
    'termVector' => termVector
  }
  @_text_fields[field[:name]] = name if field[:type] == :text
  @_sortable_fields[field[:name]] = name unless field[:type] == :text
  @_all_fields[field[:name]] = name
  @_index.set_field(params)
  @_index.set_field_default_unique(name, name) if field[:name] == :id
end

#field_idObject



27
28
29
# File 'lib/oss_active_record/index_instance.rb', line 27

def field_id
  @_field_id
end

#fieldsObject



23
24
25
# File 'lib/oss_active_record/index_instance.rb', line 23

def fields
  @_fields
end

#find_field_name(field_name) ⇒ Object



46
47
48
# File 'lib/oss_active_record/index_instance.rb', line 46

def find_field_name(field_name)
  @_all_fields[field_name] unless field_name.nil?
end

#find_sortable_name(field_name) ⇒ Object



42
43
44
# File 'lib/oss_active_record/index_instance.rb', line 42

def find_sortable_name(field_name)
  field_name == :score ? 'score' : @_sortable_fields[field_name] unless field_name.nil?
end

#index(docs) ⇒ Object



83
84
85
86
# File 'lib/oss_active_record/index_instance.rb', line 83

def index(docs)
  @_index.documents << docs
  @_index.index!
end

#oss_indexObject



31
32
33
34
35
36
37
38
39
40
# File 'lib/oss_active_record/index_instance.rb', line 31

def oss_index
  if @_index.nil?
    @_index = Oss::Index.new(@_index_name,
    Rails.configuration.open_search_server_url,
    Rails.configuration.,
    Rails.configuration.open_search_server_apikey)
    create_schema!
  end
  @_index
end

#text_fieldsObject



19
20
21
# File 'lib/oss_active_record/index_instance.rb', line 19

def text_fields
  @_text_fields
end