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)
+       }
 }


Reply via email to