You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by re...@apache.org on 2011/01/18 19:36:54 UTC

svn commit: r1060523 - in /incubator/clerezza/issues/CLEREZZA-388/org.apache.clerezza.rdf.cris/core/src: main/scala/org/apache/clerezza/rdf/cris/IndexService.scala test/scala/org/apache/clerezza/rdf/cris/IndexServiceTest.scala

Author: reto
Date: Tue Jan 18 18:36:53 2011
New Revision: 1060523

URL: http://svn.apache.org/viewvc?rev=1060523&view=rev
Log:
CLEREZZA-388: added support for removal of statements

Modified:
    incubator/clerezza/issues/CLEREZZA-388/org.apache.clerezza.rdf.cris/core/src/main/scala/org/apache/clerezza/rdf/cris/IndexService.scala
    incubator/clerezza/issues/CLEREZZA-388/org.apache.clerezza.rdf.cris/core/src/test/scala/org/apache/clerezza/rdf/cris/IndexServiceTest.scala

Modified: incubator/clerezza/issues/CLEREZZA-388/org.apache.clerezza.rdf.cris/core/src/main/scala/org/apache/clerezza/rdf/cris/IndexService.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-388/org.apache.clerezza.rdf.cris/core/src/main/scala/org/apache/clerezza/rdf/cris/IndexService.scala?rev=1060523&r1=1060522&r2=1060523&view=diff
==============================================================================
--- incubator/clerezza/issues/CLEREZZA-388/org.apache.clerezza.rdf.cris/core/src/main/scala/org/apache/clerezza/rdf/cris/IndexService.scala (original)
+++ incubator/clerezza/issues/CLEREZZA-388/org.apache.clerezza.rdf.cris/core/src/main/scala/org/apache/clerezza/rdf/cris/IndexService.scala Tue Jan 18 18:36:53 2011
@@ -59,14 +59,17 @@ class IndexService(definitions: TripleCo
 	val indexedProperties = for (p <- (for (d <- indexDefinitions)
 		yield (d/CRIS.indexedProperty)).flatten) yield (p!).asInstanceOf[UriRef]
 	val index: Directory = new RAMDirectory
-	val analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);
+	val analyzer = new StandardAnalyzer(Version.LUCENE_30);
 
+	val basePreamble = new Preamble(baseGraph)
+	import basePreamble._
+	
 	baseGraph.addGraphListener(new GraphListener() {
 		def graphChanged(events: List[GraphEvent]) {
 			import scala.collection.JavaConversions._
 			for (e <- events) {
 				val triple = e.getTriple
-				logger.info("processing addition of type "+triple.getObject)
+				logger.debug("processing addition of type "+triple.getObject)
 				if (indexedTypes.contains(triple.getObject)) {
 					scheduleForReindex(triple.getSubject)
 				}
@@ -94,7 +97,7 @@ class IndexService(definitions: TripleCo
 	})
    
 	def scheduleForReindex(r: Resource) {
-		logger.info("Scheduling for reindex: "+r)
+		logger.debug("Scheduling for reindex: "+r)
 		reindexActor ! r
 	}
 
@@ -129,14 +132,13 @@ class IndexService(definitions: TripleCo
 	reindexActor.start()
 
 	def indexResource(resource: Resource, writer: IndexWriter) {
-		val basePreamble = new Preamble(baseGraph)
-		import basePreamble._
+		
 		def resourceToDocument(resource: Resource) = {
 			val doc = new Document
 			for (property <- indexedProperties) {
-				logger.info("indexing "+property+" with values "+(resource/property).length)
+				logger.debug("indexing "+property+" with values "+(resource/property).length)
 				for (propertyValue <- resource/property) {
-					logger.info("indexing "+property+" with value "+(propertyValue*))
+					logger.debug("indexing "+property+" with value "+(propertyValue*))
 					doc.add(new Field(property.getUnicodeString,
 									  propertyValue*,
 									  Field.Store.YES,
@@ -146,9 +148,16 @@ class IndexService(definitions: TripleCo
 			doc
 		}
 		def indexNamedResource(uriRef: UriRef) {
-			val doc = resourceToDocument(uriRef)
-			doc.add(new Field(URI_FIELD_NAME, uriRef.getUnicodeString, Field.Store.YES, Field.Index.ANALYZED))
-			writer.addDocument(doc)
+			val searcher = new IndexSearcher(index, true);
+			val term = new Term(URI_FIELD_NAME, uriRef.getUnicodeString)
+			writer.deleteDocuments(term)
+			//the reindexing might be caused by the removal of a type statement
+			val types = for (tn <- resource/RDF.`type`) yield tn! ;
+			if (types.exists(t => indexedTypes.contains(t))) {
+				val doc = resourceToDocument(uriRef)
+				doc.add(new Field(URI_FIELD_NAME, uriRef.getUnicodeString, Field.Store.YES, Field.Index.NOT_ANALYZED))
+				writer.addDocument(doc)
+			}
 		}
 		def indexAnonymousResource(resource: Resource) {
 			logger.warn("Currently only indexing named resources is supported")
@@ -166,7 +175,7 @@ class IndexService(definitions: TripleCo
 		val basePreamble = new Preamble(baseGraph)
 		import basePreamble._
 		val instances = (for (indexedType <- indexedTypes) yield (indexedType)/-RDF.`type`).flatten
-		logger.info("instances "+instances.length)
+		logger.debug("instances "+instances.length)
 		val writer = new IndexWriter(index, analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED);
 		for (instance <- instances) indexResource(instance!, writer)
 		writer.close
@@ -185,7 +194,7 @@ class IndexService(definitions: TripleCo
 		val collector = TopScoreDocCollector.create(hitsPerPage, true);
 		searcher.search(booleanQuery, collector)
 		val hits = collector.topDocs().scoreDocs;
-		//logger.info("Found " + hits.length + " hits for "+pattern);
+		//logger.debug("Found " + hits.length + " hits for "+pattern);
 		def getResource(d: Document): Resource = {
 			new UriRef(d.get(URI_FIELD_NAME))
 		}

Modified: incubator/clerezza/issues/CLEREZZA-388/org.apache.clerezza.rdf.cris/core/src/test/scala/org/apache/clerezza/rdf/cris/IndexServiceTest.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-388/org.apache.clerezza.rdf.cris/core/src/test/scala/org/apache/clerezza/rdf/cris/IndexServiceTest.scala?rev=1060523&r1=1060522&r2=1060523&view=diff
==============================================================================
--- incubator/clerezza/issues/CLEREZZA-388/org.apache.clerezza.rdf.cris/core/src/test/scala/org/apache/clerezza/rdf/cris/IndexServiceTest.scala (original)
+++ incubator/clerezza/issues/CLEREZZA-388/org.apache.clerezza.rdf.cris/core/src/test/scala/org/apache/clerezza/rdf/cris/IndexServiceTest.scala Tue Jan 18 18:36:53 2011
@@ -58,8 +58,9 @@ class IndexServiceTest {
 				node.addProperty(CRIS.indexedProperty, p)
 			}
 		}
+		definitions.clear()
+		dataGraph.clear()
 		createDefinition(FOAF.Person, FOAF.firstName, FOAF.lastName)
-		
 		createPerson("John", "Doe")
 		createPerson("Jane", "Doe")
 		createPerson("Frank", "Capra")
@@ -120,4 +121,51 @@ class IndexServiceTest {
 		val results = service.findResources(FOAF.firstName, "*Joe*")
 		Assert.assertEquals(3, results.length)
 	}
+
+	@Test
+	def lateAdditionInverse() {
+		import scala.collection.JavaConversions._
+		val node = new GraphNode(new UriRef(Util.createURN5), dataGraph)
+		node.addPropertyValue(FOAF.firstName, "Another Jane")
+		node.addPropertyValue(FOAF.lastName, "Samsing")
+		Thread.sleep(1000)
+		val results = service.findResources(FOAF.firstName, "*Jane*")
+		Assert.assertEquals(2, results.length)
+		node.addProperty(RDF.`type`, FOAF.Person)
+		Thread.sleep(1000)
+		val results2 = service.findResources(FOAF.firstName, "*Jane*")
+		Assert.assertEquals(3, results2.length)
+	}
+
+	@Test
+	def removeTypeTriple() {
+		import scala.collection.JavaConversions._
+		val node = new GraphNode(new UriRef(Util.createURN5), dataGraph)
+		node.addPropertyValue(FOAF.firstName, "Another Jane")
+		node.addPropertyValue(FOAF.lastName, "Samsing")
+		node.addProperty(RDF.`type`, FOAF.Person)
+		Thread.sleep(1000)
+		val results = service.findResources(FOAF.firstName, "*Jane*")
+		Assert.assertEquals(3, results.length)
+		node.deleteProperties(RDF.`type`)
+		Thread.sleep(1000)
+		val results2 = service.findResources(FOAF.firstName, "*Jane*")
+		Assert.assertEquals(2, results2.length)
+	}
+
+	@Test
+	def removeProperty() {
+		import scala.collection.JavaConversions._
+		val node = new GraphNode(new UriRef(Util.createURN5), dataGraph)
+		node.addPropertyValue(FOAF.firstName, "Another Jane")
+		node.addPropertyValue(FOAF.lastName, "Samsing")
+		node.addProperty(RDF.`type`, FOAF.Person)
+		Thread.sleep(1000)
+		val results = service.findResources(FOAF.firstName, "*Jane*")
+		Assert.assertEquals(3, results.length)
+		node.deleteProperties(FOAF.firstName)
+		Thread.sleep(1000)
+		val results2 = service.findResources(FOAF.firstName, "*Jane*")
+		Assert.assertEquals(2, results2.length)
+	}
 }