diff --git a/app/repositories/orient_db/learning_object_repository.rb b/app/repositories/orient_db/learning_object_repository.rb
index d8aaddeba01afade260cdba61eebb40da20eb84d..b16562ff905660248de78941c584816dc733d30c 100644
--- a/app/repositories/orient_db/learning_object_repository.rb
+++ b/app/repositories/orient_db/learning_object_repository.rb
@@ -47,10 +47,10 @@ module OrientDb
     #   list.each do |learning_object|
     #     learning_object.inspect <LearningObject model>
     #   end
-    def all
-      learning_objects_hash = connection.query "SELECT FROM LearningObject"
-      build_objects(learning_objects_hash) || []
-    end
+    # def all
+    #   learning_objects_hash = connection.query "SELECT FROM LearningObject"
+    #   build_objects(learning_objects_hash) || []
+    # end
 
     # Usage:
     #   learning_object = repository.for(:learning_objects).get_by_dspace_id 123
@@ -103,24 +103,37 @@ module OrientDb
                                 FROM index:learningobject_search
                                 WHERE key LUCENE '#{qry}'
                               ", limit: 10000
+      # learning_objects_hash = connection.query "#SELECT @rid.asString() FROM (
+      #                           SELECT EXPAND(rid) FROM index:learningobject_search
+      #                           WHERE key LUCENE '#{qry}'
+      #                         )", limit: 10000
+
       build_objects(learning_objects_hash) || []
     end
 
     def build_object(args={})
       lo = nil
       unless args.nil?
-        lo = LearningObject.new(:id => args["@rid"],
-                                :name => args["name"],
-                                :description => args["description"],
-                                :thumbnail => args["thumbnail"],
-                                :created_at => args["created_at"],
-                                :id_dspace => args["id_dspace"],
-                                :type => args["type"],
-                                :bitstreams => args["bitstreams"],
-                                :metadata => args["metadata"],
-                                :last_modified => args["last_modified"])
-        lo.likes = args.has_key?("in_Likes") ? args["in_Likes"].size : 0
-        lo.views = args.has_key?("in_Views") ? args["in_Views"].size : 0
+        # cache object when build
+        cache_key = args["@rid"] + '/' + args["last_modified"]
+        lo = Rails.cache.fetch(cache_key, expires_in: 12.hours) do
+          likes = args.has_key?("in_Likes") ? args["in_Likes"].size : 0
+          views = args.has_key?("in_Views") ? args["in_Views"].size : 0
+          LearningObject.new(
+                              id: args["@rid"],
+                              name: args["name"],
+                              description: args["description"],
+                              thumbnail: args["thumbnail"],
+                              created_at: args["created_at"],
+                              id_dspace: args["id_dspace"],
+                              type: args["type"],
+                              bitstreams: args["bitstreams"],
+                              metadata: args["metadata"],
+                              last_modified: args["last_modified"],
+                              likes: likes,
+                              views: views
+                            )
+        end
       end
       lo
     end