You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2015/06/17 22:55:18 UTC
[04/15] jena git commit: Lucene index synchro on triple deletion on
jena-text
Lucene index synchro on triple deletion on jena-text
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/b357ddfd
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/b357ddfd
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/b357ddfd
Branch: refs/heads/master
Commit: b357ddfd643a3ed4bbdbd5fa2f507afd49478835
Parents: 7ef374f
Author: Alexis Miara <al...@hotmail.com>
Authored: Wed Apr 29 14:52:16 2015 -0400
Committer: Alexis Miara <al...@hotmail.com>
Committed: Wed May 13 14:48:09 2015 -0400
----------------------------------------------------------------------
.../jena/query/text/TextDocProducerTriples.java | 24 +++++++++----
.../org/apache/jena/query/text/TextIndex.java | 1 +
.../apache/jena/query/text/TextIndexLucene.java | 38 +++++++++++++++++---
.../apache/jena/query/text/TextIndexSolr.java | 5 +++
4 files changed, 58 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/b357ddfd/jena-text/src/main/java/org/apache/jena/query/text/TextDocProducerTriples.java
----------------------------------------------------------------------
diff --git a/jena-text/src/main/java/org/apache/jena/query/text/TextDocProducerTriples.java b/jena-text/src/main/java/org/apache/jena/query/text/TextDocProducerTriples.java
index c0bcabd..51f5480 100644
--- a/jena-text/src/main/java/org/apache/jena/query/text/TextDocProducerTriples.java
+++ b/jena-text/src/main/java/org/apache/jena/query/text/TextDocProducerTriples.java
@@ -56,17 +56,29 @@ public class TextDocProducerTriples implements TextDocProducer {
public void change(QuadAction qaction, Node g, Node s, Node p, Node o) {
// One document per triple/quad
- if ( qaction != QuadAction.ADD )
+ if ( qaction != QuadAction.ADD &&
+ qaction != QuadAction.DELETE )
return ;
+
Entity entity = TextQueryFuncs.entityFromQuad(defn, g, s, p, o) ;
// Null means does not match defn
if ( entity != null ) {
- indexer.addEntity(entity) ;
-
- // Auto commit the entity if we aren't in a transaction
- if (!inTransaction.get()) {
- indexer.commit() ;
+ if (qaction == QuadAction.ADD) {
+ indexer.addEntity(entity);
+
+ // Auto commit the entity if we aren't in a transaction
+ if (!inTransaction.get()) {
+ indexer.commit();
+ }
+ }
+ else if (qaction == QuadAction.DELETE) {
+ indexer.deleteEntity(entity);
+
+ // Auto commit the entity if we aren't in a transaction
+ if (!inTransaction.get()) {
+ indexer.commit();
+ }
}
}
}
http://git-wip-us.apache.org/repos/asf/jena/blob/b357ddfd/jena-text/src/main/java/org/apache/jena/query/text/TextIndex.java
----------------------------------------------------------------------
diff --git a/jena-text/src/main/java/org/apache/jena/query/text/TextIndex.java b/jena-text/src/main/java/org/apache/jena/query/text/TextIndex.java
index 69efb31..fcf72f3 100644
--- a/jena-text/src/main/java/org/apache/jena/query/text/TextIndex.java
+++ b/jena-text/src/main/java/org/apache/jena/query/text/TextIndex.java
@@ -36,6 +36,7 @@ public interface TextIndex extends Closeable //, Transactional
// Update operations
void addEntity(Entity entity) ;
void updateEntity(Entity entity) ;
+ void deleteEntity(Entity entity) ;
// read operations
http://git-wip-us.apache.org/repos/asf/jena/blob/b357ddfd/jena-text/src/main/java/org/apache/jena/query/text/TextIndexLucene.java
----------------------------------------------------------------------
diff --git a/jena-text/src/main/java/org/apache/jena/query/text/TextIndexLucene.java b/jena-text/src/main/java/org/apache/jena/query/text/TextIndexLucene.java
index 9107e86..b11f000 100644
--- a/jena-text/src/main/java/org/apache/jena/query/text/TextIndexLucene.java
+++ b/jena-text/src/main/java/org/apache/jena/query/text/TextIndexLucene.java
@@ -45,9 +45,7 @@ import org.apache.lucene.index.Term;
import org.apache.lucene.queryparser.classic.ParseException ;
import org.apache.lucene.queryparser.classic.QueryParser ;
import org.apache.lucene.queryparser.classic.QueryParserBase ;
-import org.apache.lucene.search.IndexSearcher ;
-import org.apache.lucene.search.Query ;
-import org.apache.lucene.search.ScoreDoc ;
+import org.apache.lucene.search.*;
import org.apache.lucene.store.Directory ;
import org.apache.lucene.util.Version ;
import org.slf4j.Logger ;
@@ -77,6 +75,9 @@ public class TextIndexLucene implements TextIndex {
private final Analyzer analyzer ;
private final Analyzer queryAnalyzer ;
+ //the BORDER_DELIMITER constant is required for...
+ private static final String BORDER_DELIMITER = "borderdelimiter";
+
// The IndexWriter can't be final because we may have to recreate it if rollback() is called.
// However, it needs to be volatile in case the next write transaction is on a different thread,
// but we do not need locking because we are assuming that there can only be one writer
@@ -214,6 +215,35 @@ public class TextIndexLucene implements TextIndex {
}
}
+ @Override
+ public void deleteEntity(Entity entity) {
+ if ( log.isDebugEnabled() )
+ log.debug("Delete entity: "+entity) ;
+ try {
+ TermQuery qUri = new TermQuery(new Term("uri", entity.getId()));
+ Map<String, Object> map = entity.getMap();
+ String property = map.keySet().iterator().next();
+ String value = (String)map.get(property);
+
+ //escaping special characters to avoid problem in WildcardQuery
+ value = value.replace( "?", "\\?" );
+ value = value.replace( "*", "\\*" );
+ value = value.replace( "\"", "\\\"" );
+
+ QueryParser qp = new QueryParser(VER, property, analyzer);
+ Query qPropValue = qp.parse("\"" + BORDER_DELIMITER + " " + value + " " + BORDER_DELIMITER + "\"");
+
+ BooleanQuery q = new BooleanQuery();
+ q.add(qUri, BooleanClause.Occur.MUST);
+ q.add(qPropValue, BooleanClause.Occur.MUST);
+
+ indexWriter.deleteDocuments(q);
+
+ } catch (Exception e) {
+ throw new TextIndexException(e) ;
+ }
+ }
+
private Document doc(Entity entity) {
Document doc = new Document() ;
Field entField = new Field(docDef.getEntityField(), entity.getId(), ftIRI) ;
@@ -226,7 +256,7 @@ public class TextIndexLucene implements TextIndex {
}
for ( Entry<String, Object> e : entity.getMap().entrySet() ) {
- Field field = new Field(e.getKey(), (String)e.getValue(), ftText) ;
+ Field field = new Field(e.getKey(), BORDER_DELIMITER + " " + e.getValue() + " " + BORDER_DELIMITER, ftText) ;
doc.add(field) ;
}
return doc ;
http://git-wip-us.apache.org/repos/asf/jena/blob/b357ddfd/jena-text/src/main/java/org/apache/jena/query/text/TextIndexSolr.java
----------------------------------------------------------------------
diff --git a/jena-text/src/main/java/org/apache/jena/query/text/TextIndexSolr.java b/jena-text/src/main/java/org/apache/jena/query/text/TextIndexSolr.java
index 54a3263..075eb49 100644
--- a/jena-text/src/main/java/org/apache/jena/query/text/TextIndexSolr.java
+++ b/jena-text/src/main/java/org/apache/jena/query/text/TextIndexSolr.java
@@ -104,6 +104,11 @@ public class TextIndexSolr implements TextIndex
} catch (Exception e) { exception(e) ; }
}
+ @Override
+ public void deleteEntity(Entity entity) {
+ //to be implemented
+ }
+
private SolrInputDocument solrDoc(Entity entity)
{
SolrInputDocument doc = new SolrInputDocument() ;