Class: OssActiveRecord::IndexInstance
- Inherits:
-
Object
- Object
- OssActiveRecord::IndexInstance
- Defined in:
- lib/oss_active_record/index_instance.rb
Constant Summary collapse
- @@_analyzers =
{ :text => 'StandardAnalyzer', :integer => 'IntegerAnalyzer', :decimal => 'DecimalAnalyzer'}
Instance Method Summary collapse
- #add_field(name, type, block = nil) ⇒ Object
- #create_schema! ⇒ Object
- #create_schema_field!(field) ⇒ Object
- #field_id ⇒ Object
- #fields ⇒ Object
- #find_field_name(field_name) ⇒ Object
- #find_sortable_name(field_name) ⇒ Object
- #index(docs) ⇒ Object
-
#initialize(index_name) ⇒ IndexInstance
constructor
A new instance of IndexInstance.
- #oss_index ⇒ Object
- #text_fields ⇒ Object
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_id ⇒ Object
27 28 29 |
# File 'lib/oss_active_record/index_instance.rb', line 27 def field_id @_field_id end |
#fields ⇒ Object
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_index ⇒ Object
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.open_search_server_login, Rails.configuration.open_search_server_apikey) create_schema! end @_index end |
#text_fields ⇒ Object
19 20 21 |
# File 'lib/oss_active_record/index_instance.rb', line 19 def text_fields @_text_fields end |