neo4j 1.0.0.beta.27-java → 1.0.0.beta.28-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. data/CONTRIBUTORS +1 -0
  2. data/lib/neo4j.rb +38 -72
  3. data/lib/neo4j/{algo.rb → algo/algo.rb} +5 -1
  4. data/lib/neo4j/batch/batch.rb +2 -0
  5. data/lib/neo4j/batch/indexer.rb +108 -0
  6. data/lib/neo4j/batch/inserter.rb +168 -0
  7. data/lib/neo4j/database.rb +13 -8
  8. data/lib/neo4j/{mapping/class_methods/list.rb → has_list/class_methods.rb} +2 -4
  9. data/lib/neo4j/has_list/has_list.rb +3 -0
  10. data/lib/neo4j/{mapping/has_list.rb → has_list/mapping.rb} +2 -2
  11. data/lib/neo4j/{mapping/class_methods/relationship.rb → has_n/class_methods.rb} +42 -12
  12. data/lib/neo4j/has_n/decl_relationship_dsl.rb +216 -0
  13. data/lib/neo4j/has_n/has_n.rb +3 -0
  14. data/lib/neo4j/{mapping/has_n.rb → has_n/mapping.rb} +16 -7
  15. data/lib/neo4j/index/index.rb +5 -0
  16. data/lib/neo4j/index/indexer.rb +27 -22
  17. data/lib/neo4j/index/lucene_query.rb +3 -1
  18. data/lib/neo4j/jars/core/neo4j-graph-algo-0.8-1.3.M01.jar +0 -0
  19. data/lib/neo4j/jars/core/neo4j-index-1.3-1.3.M01.jar +0 -0
  20. data/lib/neo4j/jars/core/neo4j-kernel-1.3-1.3.M01.jar +0 -0
  21. data/lib/neo4j/jars/core/neo4j-lucene-index-0.5-1.3.M01.jar +0 -0
  22. data/lib/neo4j/jars/ha/{neo4j-ha-0.6-SNAPSHOT.jar → neo4j-ha-0.6-1.3.M01.jar} +0 -0
  23. data/lib/neo4j/jars/ha/neo4j-management-1.3-1.3.M01.jar +0 -0
  24. data/lib/neo4j/jars/ha/neo4j-shell-1.3-1.3.M01.jar +0 -0
  25. data/lib/neo4j/migrations/class_methods.rb +102 -0
  26. data/lib/neo4j/migrations/extensions.rb +10 -9
  27. data/lib/neo4j/migrations/lazy_node_mixin.rb +50 -0
  28. data/lib/neo4j/migrations/migration.rb +84 -81
  29. data/lib/neo4j/migrations/migrations.rb +6 -100
  30. data/lib/neo4j/migrations/node_mixin.rb +80 -0
  31. data/lib/neo4j/migrations/ref_node_wrapper.rb +32 -0
  32. data/lib/neo4j/neo4j.rb +11 -0
  33. data/lib/neo4j/node.rb +55 -25
  34. data/lib/neo4j/{mapping/class_methods/init_node.rb → node_mixin/class_methods.rb} +3 -3
  35. data/lib/neo4j/{mapping → node_mixin}/node_mixin.rb +35 -18
  36. data/lib/neo4j/{mapping/class_methods/property.rb → property/class_methods.rb} +5 -4
  37. data/lib/neo4j/{property.rb → property/property.rb} +2 -0
  38. data/lib/neo4j/rails/finders.rb +21 -7
  39. data/lib/neo4j/rails/rails.rb +19 -0
  40. data/lib/neo4j/rails/timestamps.rb +1 -1
  41. data/lib/neo4j/relationship.rb +7 -0
  42. data/lib/neo4j/{mapping/class_methods/init_rel.rb → relationship_mixin/class_methods.rb} +4 -4
  43. data/lib/neo4j/{mapping → relationship_mixin}/relationship_mixin.rb +23 -5
  44. data/lib/neo4j/rels/rels.rb +85 -0
  45. data/lib/neo4j/rels/traverser.rb +102 -0
  46. data/lib/neo4j/{mapping/class_methods/rule.rb → rule/class_methods.rb} +11 -11
  47. data/lib/neo4j/rule/functions/count.rb +37 -0
  48. data/lib/neo4j/rule/functions/function.rb +74 -0
  49. data/lib/neo4j/rule/functions/functions.rb +3 -0
  50. data/lib/neo4j/rule/functions/sum.rb +29 -0
  51. data/lib/neo4j/rule/rule.rb +5 -0
  52. data/lib/neo4j/rule/rule_event_listener.rb +162 -0
  53. data/lib/neo4j/rule/rule_node.rb +182 -0
  54. data/lib/neo4j/to_java.rb +0 -14
  55. data/lib/neo4j/traversal/filter_predicate.rb +25 -0
  56. data/lib/neo4j/traversal/prune_evaluator.rb +14 -0
  57. data/lib/neo4j/traversal/rel_expander.rb +31 -0
  58. data/lib/neo4j/traversal/traversal.rb +90 -0
  59. data/lib/neo4j/traversal/traverser.rb +173 -0
  60. data/lib/neo4j/{type_converters.rb → type_converters/type_converters.rb} +0 -0
  61. data/lib/neo4j/version.rb +1 -1
  62. data/lib/test.rb~ +2 -0
  63. data/neo4j.gemspec +11 -10
  64. metadata +48 -37
  65. data/lib/neo4j/functions/count.rb +0 -33
  66. data/lib/neo4j/functions/function.rb +0 -72
  67. data/lib/neo4j/functions/sum.rb +0 -27
  68. data/lib/neo4j/jars/core/neo4j-graph-algo-0.8-SNAPSHOT.jar +0 -0
  69. data/lib/neo4j/jars/core/neo4j-index-1.3-SNAPSHOT.jar +0 -0
  70. data/lib/neo4j/jars/core/neo4j-kernel-1.3-SNAPSHOT.jar +0 -0
  71. data/lib/neo4j/jars/core/neo4j-lucene-index-0.5-SNAPSHOT.jar +0 -0
  72. data/lib/neo4j/jars/ha/neo4j-management-1.3-SNAPSHOT.jar +0 -0
  73. data/lib/neo4j/jars/ha/neo4j-shell-1.3-SNAPSHOT.jar +0 -0
  74. data/lib/neo4j/mapping/decl_relationship_dsl.rb +0 -214
  75. data/lib/neo4j/mapping/rule.rb +0 -158
  76. data/lib/neo4j/mapping/rule_node.rb +0 -176
  77. data/lib/neo4j/migrations.rb +0 -12
  78. data/lib/neo4j/migrations/global_migration.rb +0 -29
  79. data/lib/neo4j/migrations/lazy_migration_mixin.rb +0 -47
  80. data/lib/neo4j/migrations/migration_mixin.rb +0 -78
  81. data/lib/neo4j/node_mixin.rb +0 -4
  82. data/lib/neo4j/node_relationship.rb +0 -161
  83. data/lib/neo4j/node_traverser.rb +0 -224
  84. data/lib/neo4j/relationship_mixin.rb +0 -4
  85. data/lib/neo4j/relationship_traverser.rb +0 -92
data/CONTRIBUTORS CHANGED
@@ -2,6 +2,7 @@ Maintainer:
2
2
  Andreas Ronge <andreas dot ronge at gmail dot com>
3
3
 
4
4
  Contributors:
5
+ * Bobby Calderwood
5
6
  * Ben Jackson
6
7
  * Dwight van Tuyl
7
8
  * Martin Kleppmann
data/lib/neo4j.rb CHANGED
@@ -1,5 +1,3 @@
1
- include Java
2
-
3
1
  require 'enumerator'
4
2
  require 'forwardable'
5
3
  require 'time'
@@ -15,23 +13,22 @@ require 'will_paginate/finders/base'
15
13
 
16
14
  require 'neo4j/jars/core/geronimo-jta_1.1_spec-1.1.1.jar'
17
15
  require 'neo4j/jars/core/lucene-core-3.0.3.jar'
18
- require 'neo4j/jars/core/neo4j-lucene-index-0.5-SNAPSHOT.jar'
19
- require 'neo4j/jars/core/neo4j-graph-algo-0.8-SNAPSHOT.jar'
20
- require 'neo4j/jars/core/neo4j-kernel-1.3-SNAPSHOT.jar'
16
+ require 'neo4j/jars/core/neo4j-lucene-index-0.5-1.3.M01.jar'
17
+ require 'neo4j/jars/core/neo4j-kernel-1.3-1.3.M01.jar'
21
18
 
22
19
  module Neo4j
23
20
 
24
21
  def self.load_local_jars
25
22
  # This is a temporary fix since the HA does not yet work with this JAR
26
23
  # It will be solved in a future version of the Java Neo4j library.
27
- require 'neo4j/jars/core/neo4j-index-1.3-SNAPSHOT.jar'
24
+ require 'neo4j/jars/core/neo4j-index-1.3-1.3.M01.jar'
28
25
  end
29
26
 
30
27
  def self.load_ha_jars
31
28
  require 'neo4j/jars/ha/log4j-1.2.16.jar'
32
- require 'neo4j/jars/ha/neo4j-ha-0.6-SNAPSHOT.jar'
33
- require 'neo4j/jars/ha/neo4j-management-1.3-SNAPSHOT.jar'
34
- require 'neo4j/jars/ha/neo4j-shell-1.3-SNAPSHOT.jar'
29
+ require 'neo4j/jars/ha/neo4j-ha-0.6-1.3.M01.jar'
30
+ require 'neo4j/jars/ha/neo4j-management-1.3-1.3.M01.jar'
31
+ require 'neo4j/jars/ha/neo4j-shell-1.3-1.3.M01.jar'
35
32
  require 'neo4j/jars/ha/netty-3.2.1.Final.jar'
36
33
  require 'neo4j/jars/ha/org.apache.servicemix.bundles.jline-0.9.94_1.jar'
37
34
  require 'neo4j/jars/ha/org.apache.servicemix.bundles.lucene-3.0.1_2.jar'
@@ -39,77 +36,46 @@ module Neo4j
39
36
  end
40
37
  end
41
38
 
42
- require 'neo4j/to_java'
43
- require 'neo4j/version'
44
- require 'neo4j/equal'
39
+ module Neo4j
40
+ include Java
41
+
42
+ # Enumerator has been moved to top level in Ruby 1.9.2, make it compatible with Ruby 1.8.7
43
+ Enumerator = Enumerable::Enumerator unless defined? Enumerator
44
+ end
45
45
 
46
- require 'neo4j/event_handler'
47
- require 'neo4j/type_converters'
48
- require 'neo4j/config'
49
- require 'neo4j/database'
46
+ require 'neo4j/version'
50
47
  require 'neo4j/neo4j'
48
+ require 'neo4j/node'
49
+ require 'neo4j/relationship'
51
50
 
52
- require "neo4j/functions/function"
53
- require "neo4j/functions/count"
54
- require "neo4j/functions/sum"
51
+ require 'neo4j/type_converters/type_converters'
55
52
 
53
+ require 'neo4j/index/index'
56
54
 
55
+ require 'neo4j/traversal/traversal'
57
56
 
58
- require 'neo4j/index/index'
59
- require 'neo4j/index/class_methods'
60
- require 'neo4j/index/indexer_registry'
61
- require 'neo4j/index/indexer'
62
- require 'neo4j/index/lucene_query'
63
- require 'neo4j/relationship_traverser'
64
- require 'neo4j/node_traverser'
65
- require 'neo4j/property'
66
- require 'neo4j/transaction'
67
- require 'neo4j/node_relationship'
68
- require 'neo4j/load'
69
- require 'neo4j/relationship'
70
- require 'neo4j/node'
71
- require 'neo4j/mapping/class_methods/init_node'
72
- require 'neo4j/mapping/class_methods/init_rel'
73
- require 'neo4j/mapping/class_methods/property'
74
- require 'neo4j/mapping/class_methods/relationship'
75
- require 'neo4j/mapping/class_methods/list'
76
- require 'neo4j/mapping/decl_relationship_dsl'
77
- require 'neo4j/mapping/has_n'
78
- require 'neo4j/mapping/has_list'
79
- require 'neo4j/mapping/node_mixin'
80
- require 'neo4j/mapping/relationship_mixin'
81
- require 'neo4j/mapping/rule'
82
- require 'neo4j/mapping/rule_node'
83
-
84
- require 'neo4j/node_mixin'
85
- require 'neo4j/relationship_mixin'
86
- require 'neo4j/mapping/class_methods/rule'
87
- require 'neo4j/algo'
88
- require 'neo4j/migrations'
89
-
90
- # rails
91
- require 'neo4j/rails/tx_methods'
92
- require 'neo4j/rails/transaction'
93
- require 'neo4j/rails/railtie'
94
- require 'neo4j/rails/validations/uniqueness'
95
- require 'neo4j/rails/validations/non_nil'
96
- require 'neo4j/rails/finders'
97
- require 'neo4j/rails/mapping/property'
98
- require 'neo4j/rails/validations'
99
- require 'neo4j/rails/callbacks'
100
- require 'neo4j/rails/timestamps'
101
- require 'neo4j/rails/serialization'
102
- require 'neo4j/rails/attributes'
103
- require 'neo4j/rails/persistence'
104
- require 'neo4j/rails/relationships/mapper'
105
- require 'neo4j/rails/relationships/relationship'
106
- require 'neo4j/rails/relationships/relationships'
107
- require 'neo4j/rails/model'
108
- require 'neo4j/rails/lucene_connection_closer'
57
+ require 'neo4j/property/property'
58
+
59
+ require 'neo4j/has_n/has_n'
60
+
61
+ require 'neo4j/node_mixin/node_mixin'
62
+
63
+ require 'neo4j/relationship_mixin/relationship_mixin'
64
+
65
+ require 'neo4j/rule/rule'
66
+
67
+ require 'neo4j/rels/rels'
68
+
69
+ require 'neo4j/rails/rails'
109
70
 
110
71
  require 'neo4j/model'
72
+
73
+ require 'neo4j/migrations/migrations'
74
+
75
+ require 'neo4j/algo/algo'
76
+
77
+ require 'neo4j/batch/batch'
78
+
111
79
  require 'orm_adapter/adapters/neo4j'
112
80
 
113
- # hmm, looks like Enumerator have been moved in some ruby versions
114
- Enumerator = Enumerable::Enumerator unless defined? Enumerator
115
81
 
@@ -1,3 +1,7 @@
1
+ # external neo4j dependencies
2
+ require 'neo4j/to_java'
3
+ require 'neo4j/jars/core/neo4j-graph-algo-0.8-1.3.M01.jar'
4
+
1
5
  module Neo4j
2
6
 
3
7
 
@@ -104,7 +108,7 @@ module Neo4j
104
108
  # ==== Parameters
105
109
  # * expander_proc :: a proc relationship type (symbol)
106
110
  def expand(&expander_proc)
107
- @expander = (RelExpander.create_pair(&expander_proc))
111
+ @expander = (Neo4j::Traversal::RelExpander.create_pair(&expander_proc))
108
112
  self
109
113
  end
110
114
 
@@ -0,0 +1,2 @@
1
+ require 'neo4j/batch/inserter'
2
+ require 'neo4j/batch/indexer'
@@ -0,0 +1,108 @@
1
+ module Neo4j
2
+ module Batch
3
+ class Indexer
4
+
5
+ delegate :field_types, :entity_type, :indexer_for, :indexed_value_for, :lucene_config, :via_relationships, :to => :@wrapped_indexer
6
+
7
+ def initialize(wrapped_indexer)
8
+ @wrapped_indexer = wrapped_indexer
9
+ @parent_indexers = wrapped_indexer.parent_indexers.collect{|i| Indexer.new(i)}
10
+ end
11
+
12
+ def indexer_for_field(field, rel_type)
13
+ dsl = via_relationships[field]
14
+ return nil if dsl.nil?
15
+ return nil if dsl.rel_type != rel_type
16
+
17
+ target_class = dsl.target_class
18
+ self.class.instance_for(target_class)
19
+ end
20
+
21
+ def index_node_via_rel(rel_type, other, node_props) #:nodoc:
22
+ return if node_props.empty? || via_relationships.empty?
23
+ props_copy = node_props.clone
24
+
25
+ while !props_copy.empty?
26
+ indexer = indexer_for_field(props_copy.keys.first, rel_type)
27
+
28
+ # put all other fields that are not of this index type in a new hash
29
+ other_index = {}
30
+ # delete all fields that are not of this index
31
+ props_copy.delete_if { |k, v| indexer != indexer_for_field(k, rel_type) && other_index[k] = v }
32
+ # add all those properties for this index
33
+ indexer && indexer.index_entity(other, props_copy)
34
+
35
+ # continue with the remaining fields
36
+ props_copy = other_index
37
+ end
38
+ end
39
+
40
+ def index_entity(entity_id, props)
41
+ filter_props = props.keys.inject({}) { |memo, field| memo[field] = indexed_value_for(field, props[field]) if field_types.has_key?(field); memo }
42
+
43
+ while !filter_props.empty?
44
+ # pick one index type
45
+ index = batch_index_for_field(filter_props.keys[0])
46
+ # put all other fields that are not of this index type in a new hash
47
+ other_index = {}
48
+ # delete all fields that are not of this index
49
+ filter_props.delete_if { |k, v| index != batch_index_for_field(k) && other_index[k] = v }
50
+ # add all those properties for this index
51
+ index.add(entity_id, filter_props)
52
+ # continue with the remaining fields
53
+ filter_props = other_index
54
+ end
55
+
56
+ @parent_indexers.each { |i| i.index_entity(entity_id, props) }
57
+ end
58
+
59
+ def index_flush
60
+ return nil if @batch_indexes.nil?
61
+ @batch_indexes.values.each {|index| index.flush}
62
+ end
63
+
64
+ def index_get(key, value, index_type)
65
+ index = @batch_indexes && @batch_indexes[index_type]
66
+ return nil if index.nil?
67
+ index.get(key,value)
68
+ end
69
+
70
+ def index_query(query, index_type)
71
+ index = @batch_indexes && @batch_indexes[index_type]
72
+ return nil if index.nil?
73
+ index.query(query)
74
+ end
75
+
76
+
77
+ def batch_index_for_field(field)
78
+ type = field_types[field]
79
+ @batch_indexes ||= {}
80
+ @batch_indexes[type] ||= create_batch_index_with(type)
81
+ end
82
+
83
+ def create_batch_index_with(type)
84
+ index_config = lucene_config(type)
85
+
86
+ if entity_type == :node
87
+ self.class.index_provider.node_index("#{indexer_for}-#{type}", index_config)
88
+ else
89
+ self.class.index_provider.relationship_index("#{indexer_for}-#{type}", index_config)
90
+ end
91
+ end
92
+
93
+ class << self
94
+ attr_accessor :index_provider
95
+
96
+ def instance_for(clazz)
97
+ @instances ||= {}
98
+ @instances[clazz.to_s] ||= Indexer.new(clazz._indexer)
99
+ end
100
+
101
+ # Mostly for testing
102
+ def clear_all_instances
103
+ @instances = nil
104
+ end
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,168 @@
1
+ module Neo4j
2
+ module Batch
3
+
4
+ # = Batch Insert
5
+ # Neo4j has a batch insert mode that drops support for transactions and concurrency in favor of insertion speed.
6
+ # This is useful when you have a big dataset that needs to be loaded once. In our experience, the batch inserter will
7
+ # typically inject data around five times faster than running in normal transactional mode.
8
+ #
9
+ # Be aware that the BatchInserter is intended use is for initial import of data
10
+ # * non thread safe
11
+ # * non transactional
12
+ # * failure to successfully invoke shutdown (properly) results in corrupt database files
13
+ #
14
+ class Inserter
15
+ attr_reader :batch_inserter, :batch_indexer
16
+ include ToJava
17
+
18
+ # Creates a new batch inserter.
19
+ # Will raise an exception if Neo4j is already running at the same storage_path
20
+ #
21
+ def initialize(storage_path=Neo4j.config.storage_path, config={})
22
+ # check if neo4j is running and using the same storage path
23
+ raise "Not allowed to start batch inserter while Neo4j is already running at storage location #{storage_path}" if Neo4j.storage_path == storage_path
24
+ @batch_inserter = org.neo4j.kernel.impl.batchinsert.BatchInserterImpl.new(storage_path, config)
25
+ Indexer.index_provider = org.neo4j.index.impl.lucene.LuceneBatchInserterIndexProvider.new(@batch_inserter)
26
+ end
27
+
28
+ def running?
29
+ @batch_inserter != nil
30
+ end
31
+
32
+ # This method MUST be called after inserting is completed.
33
+ def shutdown
34
+ @batch_inserter && @batch_inserter.shutdown
35
+ @batch_inserter = nil
36
+
37
+ Indexer.index_provider
38
+ Indexer.index_provider && Indexer.index_provider.shutdown
39
+ Indexer.index_provider = nil
40
+ Indexer.clear_all_instances
41
+ end
42
+
43
+ # Creates a node. Returns a Fixnum id of the created node.
44
+ # Adds a lucene index if there is a lucene index declared on the properties
45
+ def create_node(props=nil, clazz = Neo4j::Node)
46
+ props = {} if clazz != Neo4j::Node && props.nil?
47
+ props['_classname'] = clazz.to_s if clazz != Neo4j::Node
48
+
49
+ node = @batch_inserter.create_node(props)
50
+ props && _index(node, props, clazz)
51
+ node
52
+ end
53
+
54
+ # returns true if the node exists
55
+ def node_exist?(id)
56
+ @batch_inserter.node_exists(id)
57
+ end
58
+
59
+ def ref_node
60
+ @batch_inserter.get_reference_node
61
+ end
62
+
63
+ # creates a relationship between given nodes of given type.
64
+ # Returns a fixnum id of the created relationship.
65
+ def create_rel(rel_type, from_node, to_node, props=nil, clazz=Neo4j::Relationship)
66
+ props = {} if clazz != Neo4j::Relationship && props.nil?
67
+ props['_classname'] = clazz.to_s if clazz != Neo4j::Relationship
68
+ rel = @batch_inserter.create_relationship(from_node, to_node, type_to_java(rel_type), props)
69
+
70
+ props && _index(rel, props, clazz)
71
+
72
+ from_props = node_props(from_node)
73
+
74
+ if from_props['_classname']
75
+ indexer = Indexer.instance_for(from_props['_classname'])
76
+ indexer.index_node_via_rel(rel_type, to_node, from_props)
77
+ end
78
+
79
+ to_props = node_props(to_node)
80
+ if to_props['_classname']
81
+ indexer = Indexer.instance_for(to_props['_classname'])
82
+ indexer.index_node_via_rel(rel_type, from_node, to_props)
83
+ end
84
+
85
+ end
86
+
87
+ # Return a hash of all properties of given node
88
+ def node_props(node)
89
+ @batch_inserter.get_node_properties(node)
90
+ end
91
+
92
+ # Sets the properties of the given node, overwrites old properties
93
+ def set_node_props(node, hash, clazz = Neo4j::Node)
94
+ @batch_inserter.set_node_properties(node, hash)
95
+ _index(node, hash, clazz)
96
+ end
97
+
98
+ # Sets the old properties of the given relationship, overwrites old properties
99
+ def set_rel_props(rel, hash)
100
+ @batch_inserter.set_relationship_properties(rel, hash)
101
+ end
102
+
103
+ # Returns the properties of the given relationship
104
+ def rel_props(rel)
105
+ @batch_inserter.get_relationship_properties(rel)
106
+ end
107
+
108
+ # Returns all the relationships of the given node
109
+ def rels(node)
110
+ @batch_inserter.getRelationships(node)
111
+ end
112
+
113
+ # Makes sure additions/updates can be seen by #index_get and #index_query
114
+ # so that they are guaranteed to return correct results.
115
+ def index_flush(clazz = Neo4j::Node)
116
+ indexer = Indexer.instance_for(clazz)
117
+ indexer.index_flush
118
+ end
119
+
120
+ # Returns matches from the index specified by index_type and class.
121
+ #
122
+ # ==== Parameters
123
+ # * key :: the lucene key
124
+ # * value :: the lucene value we look for given the key
125
+ # * index_type :: :exact or :fulltext
126
+ # * clazz :: on which clazz we want to perform the query
127
+ #
128
+ def index_get(key, value, index_type = :exact, clazz = Neo4j::Node)
129
+ indexer = Indexer.instance_for(clazz)
130
+ indexer.index_get(key, value, index_type)
131
+ end
132
+
133
+ # Returns matches from the index specified by index_type and class.
134
+ #
135
+ # ==== Parameters
136
+ # * query :: lucene query
137
+ # * index_type :: :exact or :fulltext
138
+ # * clazz :: on which clazz we want to perform the query
139
+ #
140
+ def index_query(query, index_type = :exact, clazz = Neo4j::Node)
141
+ indexer = Indexer.instance_for(clazz)
142
+ indexer.index_query(query, index_type)
143
+ end
144
+
145
+ # index the given entity (a node or a relationship)
146
+ def _index(entity, props, clazz = Neo4j::Node) #:nodoc:
147
+ indexer = Indexer.instance_for(clazz)
148
+ indexer.index_entity(entity, props)
149
+ end
150
+
151
+
152
+ # hmm, maybe faster not wrapping this ?
153
+ def to_java_map(hash)
154
+ return nil if hash.nil?
155
+ map = java.util.HashMap.new
156
+ hash.each_pair do |k, v|
157
+ case v
158
+ when Symbol
159
+ map[k.to_s] = v.to_s
160
+ else
161
+ map[k.to_s] = v
162
+ end
163
+ end
164
+ map
165
+ end
166
+ end
167
+ end
168
+ end