diff --git a/config/orientdb-server-config.xml b/config/orientdb-server-config.xml index a11f23c..b358de5 100644 --- a/config/orientdb-server-config.xml +++ b/config/orientdb-server-config.xml @@ -19,7 +19,7 @@ - + diff --git a/plugins/studio.zip b/plugins/studio.zip deleted file mode 100644 index 45026f1..0000000 Binary files a/plugins/studio.zip and /dev/null differ diff --git a/src/main/assembly/assembly.xml b/src/main/assembly/assembly.xml index 3182c74..4a8b2c8 100644 --- a/src/main/assembly/assembly.xml +++ b/src/main/assembly/assembly.xml @@ -13,12 +13,8 @@ org.apache.lucene:* com.spatial4j:* - - - **/plugin.json - - + - + \ No newline at end of file diff --git a/src/main/java/com/orientechnologies/lucene/OEnterpriseLuceneIndex.java b/src/main/java/com/orientechnologies/lucene/OLuceneIndexPlugin.java similarity index 56% rename from src/main/java/com/orientechnologies/lucene/OEnterpriseLuceneIndex.java rename to src/main/java/com/orientechnologies/lucene/OLuceneIndexPlugin.java index 6abe103..a5d5494 100644 --- a/src/main/java/com/orientechnologies/lucene/OEnterpriseLuceneIndex.java +++ b/src/main/java/com/orientechnologies/lucene/OLuceneIndexPlugin.java @@ -16,24 +16,39 @@ package com.orientechnologies.lucene; +import com.orientechnologies.common.util.OClassLoaderHelper; +import com.orientechnologies.lucene.operator.OLuceneNearOperator; +import com.orientechnologies.lucene.operator.OLuceneTextOperator; +import com.orientechnologies.lucene.operator.OLuceneWithinOperator; +import com.orientechnologies.orient.core.index.OIndexes; +import com.orientechnologies.orient.core.sql.OSQLEngine; +import com.orientechnologies.orient.core.sql.functions.OSQLFunction; import com.orientechnologies.orient.server.OServer; import com.orientechnologies.orient.server.config.OServerParameterConfiguration; import com.orientechnologies.orient.server.plugin.OServerPluginAbstract; -public class OEnterpriseLuceneIndex extends OServerPluginAbstract { +import javax.imageio.spi.ServiceRegistry; +import java.util.Iterator; - public OEnterpriseLuceneIndex() { +public class OLuceneIndexPlugin extends OServerPluginAbstract { + + public OLuceneIndexPlugin() { } @Override public String getName() { - return "enterprise-lucene"; + return "lucene-index"; } @Override public void startup() { super.startup(); // Orient.instance().addDbLifecycleListener(new OLuceneClassIndexManager()); + + OIndexes.registerFactory(new OLuceneIndexFactory()); + OSQLEngine.registerOperator(new OLuceneTextOperator()); + OSQLEngine.registerOperator(new OLuceneWithinOperator()); + OSQLEngine.registerOperator(new OLuceneNearOperator()); } @Override diff --git a/src/main/java/com/orientechnologies/lucene/operator/OLuceneNearOperator.java b/src/main/java/com/orientechnologies/lucene/operator/OLuceneNearOperator.java index e4ac258..00f7eb4 100644 --- a/src/main/java/com/orientechnologies/lucene/operator/OLuceneNearOperator.java +++ b/src/main/java/com/orientechnologies/lucene/operator/OLuceneNearOperator.java @@ -22,11 +22,10 @@ import com.orientechnologies.lucene.collections.OSpatialCompositeKey; import com.orientechnologies.orient.core.command.OCommandContext; +import com.orientechnologies.orient.core.db.ODatabaseComplex; import com.orientechnologies.orient.core.db.record.OIdentifiable; import com.orientechnologies.orient.core.id.ORID; -import com.orientechnologies.orient.core.index.OIndex; -import com.orientechnologies.orient.core.index.OIndexCursor; -import com.orientechnologies.orient.core.index.OIndexDefinition; +import com.orientechnologies.orient.core.index.*; import com.orientechnologies.orient.core.metadata.schema.OClass; import com.orientechnologies.orient.core.metadata.schema.OType; import com.orientechnologies.orient.core.record.impl.ODocument; @@ -35,29 +34,30 @@ import com.orientechnologies.orient.core.sql.filter.OSQLFilterItemField; import com.orientechnologies.orient.core.sql.operator.OIndexReuseType; import com.orientechnologies.orient.core.sql.operator.OQueryOperatorEqualityNotNulls; +import com.orientechnologies.orient.core.sql.operator.OQueryTargetOperator; import com.spatial4j.core.context.SpatialContext; import com.spatial4j.core.distance.DistanceUtils; import com.spatial4j.core.shape.Point; -public class OLuceneNearOperator extends OQueryOperatorEqualityNotNulls { +public class OLuceneNearOperator extends OQueryTargetOperator { public OLuceneNearOperator() { - super("NEAR", 5, false, 1, true); + super("NEAR", 5, false); } - @Override - protected boolean evaluateExpression(OIdentifiable iRecord, OSQLFilterCondition iCondition, Object iLeft, Object iRight, - OCommandContext iContext) { - - SpatialContext ctx = SpatialContext.GEO; - Object[] points = parseParams(iRecord, iCondition); - Point p = ctx.makePoint((Double) points[3], (Double) points[2]); - - double docDistDEG = ctx.getDistCalc().distance(p, (Double) points[1], (Double) points[0]); - double docDistInKM = DistanceUtils.degrees2Dist(docDistDEG, DistanceUtils.EARTH_EQUATORIAL_RADIUS_KM); - iContext.setVariable("$distance", docDistInKM); - return true; - } + // @Override + // protected boolean evaluateExpression(OIdentifiable iRecord, OSQLFilterCondition iCondition, Object iLeft, Object iRight, + // OCommandContext iContext) { + // + // SpatialContext ctx = SpatialContext.GEO; + // Object[] points = parseParams(iRecord, iCondition); + // Point p = ctx.makePoint((Double) points[3], (Double) points[2]); + // + // double docDistDEG = ctx.getDistCalc().distance(p, (Double) points[1], (Double) points[0]); + // double docDistInKM = DistanceUtils.degrees2Dist(docDistDEG, DistanceUtils.EARTH_EQUATORIAL_RADIUS_KM); + // iContext.setVariable("$distance", docDistInKM); + // return true; + // } private Object[] parseParams(OIdentifiable iRecord, OSQLFilterCondition iCondition) { @@ -109,10 +109,10 @@ public OIndexCursor executeIndexQuery(OCommandContext iContext, OIndex index, } Object indexResult = index.get(new OSpatialCompositeKey(keyParams).setMaxDistance(distance).setLimit(limit)); if (indexResult == null || indexResult instanceof OIdentifiable) - cursor = new OIndexCursor.OIndexCursorSingleValue((OIdentifiable) indexResult, new OSpatialCompositeKey(keyParams)); + cursor = new OIndexCursorSingleValue((OIdentifiable) indexResult, new OSpatialCompositeKey(keyParams)); else - cursor = new OIndexCursor.OIndexCursorCollectionValue(((Collection) indexResult).iterator(), - new OSpatialCompositeKey(keyParams)); + cursor = new OIndexCursorCollectionValue(((Collection) indexResult).iterator(), new OSpatialCompositeKey( + keyParams)); return cursor; } @@ -142,4 +142,9 @@ public OIndexSearchResult getOIndexSearchResult(OClass iSchemaClass, OSQLFilterC return OLuceneOperatorUtil.buildOIndexSearchResult(iSchemaClass, iCondition, iIndexSearchResults, context); } + @Override + public Collection filterRecords(ODatabaseComplex iRecord, List iTargetClasses, + OSQLFilterCondition iCondition, Object iLeft, Object iRight) { + return null; + } } diff --git a/src/main/java/com/orientechnologies/lucene/operator/OLuceneOperatorFactory.java b/src/main/java/com/orientechnologies/lucene/operator/OLuceneOperatorFactory.java deleted file mode 100644 index dcf8de3..0000000 --- a/src/main/java/com/orientechnologies/lucene/operator/OLuceneOperatorFactory.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2014 Orient Technologies. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.orientechnologies.lucene.operator; - -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; - -import com.orientechnologies.orient.core.sql.operator.OQueryOperator; -import com.orientechnologies.orient.core.sql.operator.OQueryOperatorFactory; - - -public class OLuceneOperatorFactory implements OQueryOperatorFactory { - - private static final Set OPERATORS; - - static { - final Set operators = new HashSet(); - operators.add(new OLuceneNearOperator()); - operators.add(new OLuceneWithinOperator()); - operators.add(new OLuceneTextOperator()); - OPERATORS = Collections.unmodifiableSet(operators); - } - - @Override - public Set getOperators() { - return OPERATORS; - } -} diff --git a/src/main/java/com/orientechnologies/lucene/operator/OLuceneTextOperator.java b/src/main/java/com/orientechnologies/lucene/operator/OLuceneTextOperator.java index ef495cf..ddf0b13 100644 --- a/src/main/java/com/orientechnologies/lucene/operator/OLuceneTextOperator.java +++ b/src/main/java/com/orientechnologies/lucene/operator/OLuceneTextOperator.java @@ -21,37 +21,38 @@ import com.orientechnologies.lucene.collections.OSpatialCompositeKey; import com.orientechnologies.orient.core.command.OCommandContext; +import com.orientechnologies.orient.core.db.ODatabaseComplex; import com.orientechnologies.orient.core.db.record.OIdentifiable; import com.orientechnologies.orient.core.id.ORID; -import com.orientechnologies.orient.core.index.OCompositeKey; -import com.orientechnologies.orient.core.index.OIndex; -import com.orientechnologies.orient.core.index.OIndexCursor; +import com.orientechnologies.orient.core.index.*; import com.orientechnologies.orient.core.metadata.schema.OClass; +import com.orientechnologies.orient.core.record.impl.ODocument; import com.orientechnologies.orient.core.sql.OIndexSearchResult; import com.orientechnologies.orient.core.sql.filter.OSQLFilterCondition; import com.orientechnologies.orient.core.sql.operator.OIndexReuseType; import com.orientechnologies.orient.core.sql.operator.OQueryOperatorEqualityNotNulls; +import com.orientechnologies.orient.core.sql.operator.OQueryTargetOperator; -public class OLuceneTextOperator extends OQueryOperatorEqualityNotNulls { +public class OLuceneTextOperator extends OQueryTargetOperator { public OLuceneTextOperator() { - super("LUCENE", 5, false, 1, true); + super("LUCENE", 5, false); } - @Override - protected boolean evaluateExpression(OIdentifiable iRecord, OSQLFilterCondition iCondition, Object iLeft, Object iRight, - OCommandContext iContext) { - return true; - } + // @Override + // protected boolean evaluateExpression(OIdentifiable iRecord, OSQLFilterCondition iCondition, Object iLeft, Object iRight, + // OCommandContext iContext) { + // return false; + // } @Override public OIndexCursor executeIndexQuery(OCommandContext iContext, OIndex index, List keyParams, boolean ascSortOrder) { OIndexCursor cursor; Object indexResult = index.get(new OCompositeKey(keyParams)); if (indexResult == null || indexResult instanceof OIdentifiable) - cursor = new OIndexCursor.OIndexCursorSingleValue((OIdentifiable) indexResult, new OSpatialCompositeKey(keyParams)); + cursor = new OIndexCursorSingleValue((OIdentifiable) indexResult, new OSpatialCompositeKey(keyParams)); else - cursor = new OIndexCursor.OIndexCursorCollectionValue(((Collection) indexResult).iterator(), + cursor = new OIndexCursorCollectionValue(((Collection) indexResult).iterator(), new OSpatialCompositeKey(keyParams)); return cursor; } @@ -76,4 +77,16 @@ public OIndexSearchResult getOIndexSearchResult(OClass iSchemaClass, OSQLFilterC List iIndexSearchResults, OCommandContext context) { return OLuceneOperatorUtil.buildOIndexSearchResult(iSchemaClass, iCondition, iIndexSearchResults, context); } + + @Override + public Collection filterRecords(ODatabaseComplex iRecord, List iTargetClasses, + OSQLFilterCondition iCondition, Object iLeft, Object iRight) { + return null; + } + + @Override + public Object evaluateRecord(OIdentifiable iRecord, ODocument iCurrentResult, OSQLFilterCondition iCondition, Object iLeft, + Object iRight, OCommandContext iContext) { + return super.evaluateRecord(iRecord, iCurrentResult, iCondition, iLeft, iRight, iContext); + } } diff --git a/src/main/java/com/orientechnologies/lucene/operator/OLuceneWithinOperator.java b/src/main/java/com/orientechnologies/lucene/operator/OLuceneWithinOperator.java index 2cb3438..5365500 100644 --- a/src/main/java/com/orientechnologies/lucene/operator/OLuceneWithinOperator.java +++ b/src/main/java/com/orientechnologies/lucene/operator/OLuceneWithinOperator.java @@ -20,9 +20,7 @@ import com.orientechnologies.orient.core.command.OCommandContext; import com.orientechnologies.orient.core.db.record.OIdentifiable; import com.orientechnologies.orient.core.id.ORID; -import com.orientechnologies.orient.core.index.OIndex; -import com.orientechnologies.orient.core.index.OIndexCursor; -import com.orientechnologies.orient.core.index.OIndexDefinition; +import com.orientechnologies.orient.core.index.*; import com.orientechnologies.orient.core.metadata.schema.OClass; import com.orientechnologies.orient.core.metadata.schema.OType; import com.orientechnologies.orient.core.sql.OIndexSearchResult; @@ -36,10 +34,9 @@ import java.util.List; import java.util.Map; - public class OLuceneWithinOperator extends OQueryOperatorEqualityNotNulls { - protected OLuceneWithinOperator() { + public OLuceneWithinOperator() { super("WITHIN", 5, false, 1, true); } @@ -62,15 +59,13 @@ public OIndexCursor executeIndexQuery(OCommandContext iContext, OIndex index, OIndexCursor cursor; Object indexResult = index.get(new OSpatialCompositeKey(keyParams).setOperation(SpatialOperation.IsWithin)); if (indexResult == null || indexResult instanceof OIdentifiable) - cursor = new OIndexCursor.OIndexCursorSingleValue((OIdentifiable) indexResult, new OSpatialCompositeKey(keyParams)); + cursor = new OIndexCursorSingleValue((OIdentifiable) indexResult, new OSpatialCompositeKey(keyParams)); else - cursor = new OIndexCursor.OIndexCursorCollectionValue(((Collection) indexResult).iterator(), - new OSpatialCompositeKey(keyParams)); + cursor = new OIndexCursorCollectionValue(((Collection) indexResult).iterator(), new OSpatialCompositeKey( + keyParams)); return cursor; } - - @Override public ORID getBeginRidRange(Object iLeft, Object iRight) { return null; diff --git a/src/main/resources/META-INF/services/com.orientechnologies.orient.core.index.OIndexFactory b/src/main/resources/META-INF/services/com.orientechnologies.orient.core.index.OIndexFactory deleted file mode 100644 index aa83620..0000000 --- a/src/main/resources/META-INF/services/com.orientechnologies.orient.core.index.OIndexFactory +++ /dev/null @@ -1 +0,0 @@ -com.orientechnologies.lucene.OLuceneIndexFactory \ No newline at end of file diff --git a/src/main/resources/META-INF/services/com.orientechnologies.orient.core.sql.functions.OSQLFunctionFactory b/src/main/resources/META-INF/services/com.orientechnologies.orient.core.sql.functions.OSQLFunctionFactory deleted file mode 100644 index 038da0c..0000000 --- a/src/main/resources/META-INF/services/com.orientechnologies.orient.core.sql.functions.OSQLFunctionFactory +++ /dev/null @@ -1 +0,0 @@ -com.orientechnologies.lucene.functions.OLuceneFunctionsFactory \ No newline at end of file diff --git a/src/main/resources/META-INF/services/com.orientechnologies.orient.core.sql.operator.OQueryOperatorFactory b/src/main/resources/META-INF/services/com.orientechnologies.orient.core.sql.operator.OQueryOperatorFactory deleted file mode 100644 index 2976502..0000000 --- a/src/main/resources/META-INF/services/com.orientechnologies.orient.core.sql.operator.OQueryOperatorFactory +++ /dev/null @@ -1 +0,0 @@ -com.orientechnologies.lucene.operator.OLuceneOperatorFactory \ No newline at end of file diff --git a/src/main/resources/plugin.json b/src/main/resources/plugin.json index 1b8cf2b..4d33d16 100644 --- a/src/main/resources/plugin.json +++ b/src/main/resources/plugin.json @@ -1,10 +1,8 @@ { - "name" : "enterprise-lucene", + "name" : "lucene-index", "version" : "1.7", - "javaClass": "com.orientechnologies.lucene.OEnterpriseLuceneIndex", + "javaClass": "com.orientechnologies.lucene.OLuceneIndexPlugin", "parameters" : {}, - "description" : "This is the Enterprise Agent, part of the commercial OrientDB Enterprise suite", - "web" : "http://www.orientechnologies.com/enterprise.htm", - "copyrights" : "Orient Technologies LTD", - "license" : "Commercial" + "description" : "This is the Lucene Index integration", + "copyrights" : "Orient Technologies LTD" }