@Override public IndexHits<T> get( String key, Object value ) { return delegate.get( key, value ); }
public Representation getAutoIndexedNodes( String key, String value ) { ReadableIndex<Node> index = graphDb.index().getNodeAutoIndexer().getAutoIndex(); return toListNodeRepresentation( index.get( key, value ), null ); }
public Representation getAutoIndexedRelationships( String key, String value ) { final ReadableIndex<Relationship> index = graphDb.index().getRelationshipAutoIndexer().getAutoIndex(); return toListRelationshipRepresentation( index.get( key, value ), null ); }
@Test public void testChangesAreVisibleInTransaction() { newTransaction(); AutoIndexer<Node> autoIndexer = graphDb.index().getNodeAutoIndexer(); autoIndexer.startAutoIndexingProperty( "nodeProp" ); autoIndexer.setEnabled( true ); Node node1 = graphDb.createNode(); node1.setProperty( "nodeProp", "nodePropValue" ); node1.setProperty( "nodePropNonIndexable", "valueWhatever" ); ReadableIndex<Node> nodeIndex = autoIndexer.getAutoIndex(); assertEquals( node1, nodeIndex.get( "nodeProp", "nodePropValue" ).getSingle() ); newTransaction(); Node node2 = graphDb.createNode(); node2.setProperty( "nodeProp", "nodePropValue2" ); assertEquals( node2, nodeIndex.get( "nodeProp", "nodePropValue2" ).getSingle() ); node2.setProperty( "nodeProp", "nodePropValue3" ); assertEquals( node2, nodeIndex.get( "nodeProp", "nodePropValue3" ).getSingle() ); node2.removeProperty( "nodeProp" ); assertFalse( nodeIndex.get( "nodeProp", "nodePropValue2" ).hasNext() ); assertFalse( nodeIndex.get( "nodeProp", "nodePropValue3" ).hasNext() ); newTransaction(); assertEquals( node1, nodeIndex.get( "nodeProp", "nodePropValue" ).getSingle() ); assertFalse( nodeIndex.get( "nodeProp", "nodePropValue2" ).hasNext() ); assertFalse( nodeIndex.get( "nodeProp", "nodePropValue3" ).hasNext() ); }
@Test public void testDefaultIsOffIfExplicit() { stopDb(); config = new HashMap<>(); config.put( GraphDatabaseSettings.node_keys_indexable.name(), "nodeProp1, nodeProp2" ); config.put( GraphDatabaseSettings.relationship_keys_indexable.name(), "relProp1, relProp2" ); config.put( GraphDatabaseSettings.node_auto_indexing.name(), "false" ); config.put( GraphDatabaseSettings.relationship_auto_indexing.name(), "false" ); startDb(); newTransaction(); AutoIndexer<Node> autoIndexer = graphDb.index().getNodeAutoIndexer(); autoIndexer.startAutoIndexingProperty( "testProp" ); Node node1 = graphDb.createNode(); node1.setProperty( "nodeProp1", "node1" ); node1.setProperty( "nodeProp2", "node1" ); node1.setProperty( "testProp", "node1" ); newTransaction(); assertFalse( autoIndexer.getAutoIndex().get( "nodeProp1", "node1" ).hasNext() ); assertFalse( autoIndexer.getAutoIndex().get( "nodeProp2", "node1" ).hasNext() ); assertFalse( autoIndexer.getAutoIndex().get( "testProp", "node1" ).hasNext() ); }
@Test public void testDefaultIfOffIsForEverything() { newTransaction(); graphDb.index().getNodeAutoIndexer().setEnabled( true ); Node node1 = graphDb.createNode(); node1.setProperty( "testProp", "node1" ); node1.setProperty( "testProp1", "node1" ); Node node2 = graphDb.createNode(); node2.setProperty( "testProp", "node2" ); node2.setProperty( "testProp1", "node2" ); newTransaction(); AutoIndexer<Node> autoIndexer = graphDb.index().getNodeAutoIndexer(); assertFalse( autoIndexer.getAutoIndex().get( "testProp", "node1" ).hasNext() ); assertFalse( autoIndexer.getAutoIndex().get( "testProp1", "node1" ).hasNext() ); assertFalse( autoIndexer.getAutoIndex().get( "testProp", "node2" ).hasNext() ); assertFalse( autoIndexer.getAutoIndex().get( "testProp1", "node2" ).hasNext() ); }
@Test public void nodeAutoindexingSupposedToWork() { String type = "node"; Response response = service.startAutoIndexingProperty( type, "myAutoIndexedProperty" ); assertEquals( 204, response.getStatus() ); response = service.setAutoIndexerEnabled( type, "true" ); assertEquals( 204, response.getStatus() ); service.createNode( "{\"myAutoIndexedProperty\" : \"value\"}" ); try ( Transaction ignored = graph.beginTx() ) { IndexHits<Node> indexResult = database.getGraph().index().getNodeAutoIndexer().getAutoIndex().get( "myAutoIndexedProperty", "value" ); assertEquals( 1, indexResult.size() ); } }
@Test public void testNodeAutoIndexFromAPISanity() { newTransaction(); AutoIndexer<Node> autoIndexer = graphDb.index().getNodeAutoIndexer(); autoIndexer.startAutoIndexingProperty( "test_uuid" ); autoIndexer.setEnabled( true ); assertEquals( 1, autoIndexer.getAutoIndexedProperties().size() ); assertTrue( autoIndexer.getAutoIndexedProperties().contains( "test_uuid" ) ); Node node1 = graphDb.createNode(); node1.setProperty( "test_uuid", "node1" ); Node node2 = graphDb.createNode(); node2.setProperty( "test_uuid", "node2" ); newTransaction(); assertEquals( node1, autoIndexer.getAutoIndex().get( "test_uuid", "node1" ).getSingle() ); assertEquals( node2, autoIndexer.getAutoIndex().get( "test_uuid", "node2" ).getSingle() ); }
@Test public void testDefaultIsOff() { newTransaction(); Node node1 = graphDb.createNode(); node1.setProperty( "testProp", "node1" ); newTransaction(); AutoIndexer<Node> autoIndexer = graphDb.index().getNodeAutoIndexer(); assertFalse( autoIndexer.getAutoIndex().get( "testProp", "node1" ).hasNext() ); }
@Test @Graph( value = {"I know you"}, autoIndexNodes = true ) public void canAutoIndexNodes() { data.get(); try ( Transaction ignored = graphdb.beginTx() ) { try ( IndexHits<Node> indexHits = graphdb().index().getNodeAutoIndexer().getAutoIndex().get( "name", "I" ) ) { assertTrue( "can't look up node.", indexHits.hasNext() ); } } }
@Test public void testStartStopAutoIndexing() { stopDb(); config = new HashMap<>(); config.put( GraphDatabaseSettings.node_keys_indexable.name(), "propName" ); config.put( GraphDatabaseSettings.node_auto_indexing.name(), "true" ); // Now only node properties named propName should be indexed. startDb(); newTransaction(); AutoIndexer<Node> autoIndexer = graphDb.index().getNodeAutoIndexer(); assertTrue( autoIndexer.isEnabled() ); autoIndexer.setEnabled( false ); assertFalse( autoIndexer.isEnabled() ); Node node1 = graphDb.createNode(); Node node2 = graphDb.createNode(); node1.setProperty( "propName", "node" ); newTransaction(); assertFalse( autoIndexer.getAutoIndex().get( "nodeProp1", "node1" ).hasNext() ); autoIndexer.setEnabled( true ); node2.setProperty( "propName", "node" ); newTransaction(); assertEquals( node2, autoIndexer.getAutoIndex().get( "propName", "node" ).getSingle() ); }
assertEquals( node1, autoIndexer.getAutoIndex().get( "propName", "node" ).getSingle() ); newTransaction(); autoIndexer.getAutoIndex().get( "propName", "node" ).getSingle() ); assertEquals( node3, autoIndexer.getAutoIndex().get( "propName2", "propValue" ).getSingle() ); assertFalse( autoIndexer.getAutoIndex().get( "propName", "newValue" ).hasNext() );
assertEquals( node1, autoNodeIndexer.getAutoIndex().get( "nodeProp1", "node1Value1" ).getSingle() ); assertEquals( node2, autoNodeIndexer.getAutoIndex().get( "nodeProp2", "node2Value1" ).getSingle() ); assertEquals( node3, autoNodeIndexer.getAutoIndex().get( "nodeProp1", "node3Value1" ).getSingle() ); assertEquals( node3, autoNodeIndexer.getAutoIndex().get( "nodeProp2", "node3Value2" ).getSingle() ); assertFalse( autoNodeIndexer.getAutoIndex().get( "nodePropNonIndexable1", "node1ValueNonIndexable" ).hasNext() ); assertFalse( autoNodeIndexer.getAutoIndex().get( "nodePropNonIndexable2", "node2ValueNonIndexable" ).hasNext() ); assertFalse( autoNodeIndexer.getAutoIndex().get( "nodePropNonIndexable3", "node3ValueNonIndexable" ).hasNext() ); assertEquals( rel12, autoRelIndexer.getAutoIndex().get( "relProp1", "rel12Value1" ).getSingle() ); assertEquals( rel23, autoRelIndexer.getAutoIndex().get( "relProp2",
@Test @Graph( nodes = {@NODE( name = "I", setNameProperty = true, properties = { @PROP( key = "name", value = "I" )} )}, autoIndexNodes = true ) public void canAutoIndexNodesExplicitProps() { data.get(); try ( Transaction ignored = graphdb.beginTx(); IndexHits<Node> nodes = graphdb().index().getNodeAutoIndexer().getAutoIndex().get( "name", "I" ) ) { assertTrue( "can't look up node.", nodes.hasNext() ); } }
@Test public void testDefaultsAreSeparateForNodesAndRelationships() { stopDb(); config = new HashMap<>(); config.put( GraphDatabaseSettings.node_keys_indexable.name(), "propName" ); config.put( GraphDatabaseSettings.node_auto_indexing.name(), "true" ); // Now only node properties named propName should be indexed. startDb(); newTransaction(); Node node1 = graphDb.createNode(); Node node2 = graphDb.createNode(); node1.setProperty( "propName", "node1" ); node2.setProperty( "propName", "node2" ); node2.setProperty( "propName_", "node2" ); Relationship rel = node1.createRelationshipTo( node2, RelationshipType.withName( "DYNAMIC" ) ); rel.setProperty( "propName", "rel1" ); newTransaction(); ReadableIndex<Node> autoIndex = graphDb.index().getNodeAutoIndexer().getAutoIndex(); assertEquals( node1, autoIndex.get( "propName", "node1" ).getSingle() ); assertEquals( node2, autoIndex.get( "propName", "node2" ).getSingle() ); assertFalse( graphDb.index().getRelationshipAutoIndexer().getAutoIndex().get( "propName", "rel1" ).hasNext() ); }
@Test public void shouldOnlyDeleteAffectedKeyWhenRemovingPropertyFromNode() { // GIVEN a node with two auto-indexed properties String key1 = "foo"; String key2 = "bar"; String value1 = "bip"; String value2 = "bop"; newTransaction(); AutoIndexer<Node> nodeAutoIndexer = graphDb.index().getNodeAutoIndexer(); nodeAutoIndexer.startAutoIndexingProperty( key1 ); nodeAutoIndexer.startAutoIndexingProperty( key2 ); nodeAutoIndexer.setEnabled( true ); Node node = graphDb.createNode(); node.setProperty( key1, value1 ); node.setProperty( key2, value2 ); newTransaction(); // WHEN removing one of them node.removeProperty( key1 ); newTransaction(); // THEN the other one should still be in the index assertEquals( 0, count( nodeAutoIndexer.getAutoIndex().get( key1, value1 ) ) ); assertEquals( 1, count( nodeAutoIndexer.getAutoIndex().get( key2, value2 ) ) ); } }
@Test public void testRelationshipAutoIndexFromAPISanity() { newTransaction(); final String propNameToIndex = "test"; AutoIndexer<Relationship> autoIndexer = graphDb.index().getRelationshipAutoIndexer(); autoIndexer.startAutoIndexingProperty( propNameToIndex ); autoIndexer.setEnabled( true ); Node node1 = graphDb.createNode(); Node node2 = graphDb.createNode(); Node node3 = graphDb.createNode(); Relationship rel12 = node1.createRelationshipTo( node2, RelationshipType.withName( "DYNAMIC" ) ); Relationship rel23 = node2.createRelationshipTo( node3, RelationshipType.withName( "DYNAMIC" ) ); rel12.setProperty( propNameToIndex, "rel12" ); rel23.setProperty( propNameToIndex, "rel23" ); newTransaction(); assertEquals( rel12, autoIndexer.getAutoIndex().get( propNameToIndex, "rel12" ).getSingle() ); assertEquals( rel23, autoIndexer.getAutoIndex().get( propNameToIndex, "rel23" ).getSingle() ); }
/** * Searches a node from the database for a given key */ public Node searchNode(Object key, EntityMetadata m, GraphDatabaseService graphDb, boolean skipProxy) { Node node = null; String idColumnName = ((AbstractAttribute) m.getIdAttribute()).getJPAColumnName(); final MetamodelImpl metaModel = (MetamodelImpl) kunderaMetadata.getApplicationMetadata().getMetamodel( m.getPersistenceUnit()); if (metaModel.isEmbeddable(m.getIdAttribute().getBindableJavaType())) { key = serializeIdAttributeValue(m, metaModel, key); } if (indexer.isNodeAutoIndexingEnabled(graphDb)) { // Get the Node auto index ReadableIndex<Node> autoNodeIndex = graphDb.index().getNodeAutoIndexer().getAutoIndex(); IndexHits<Node> nodesFound = autoNodeIndex.get(idColumnName, key); node = getMatchingNodeFromIndexHits(nodesFound, skipProxy); } else { // Searching within manually created indexes Index<Node> nodeIndex = graphDb.index().forNodes(m.getIndexName()); IndexHits<Node> nodesFound = nodeIndex.get(idColumnName, key); node = getMatchingNodeFromIndexHits(nodesFound, skipProxy); } return node; }
public Representation getAutoIndexedRelationships( String key, String value ) { final ReadableIndex<Relationship> index = graphDb.index().getRelationshipAutoIndexer().getAutoIndex(); return toListRelationshipRepresentation( index.get( key, value ), null ); }
public Iterable<Vertex> getVertices(final String key, final Object value) { this.autoStartTransaction(false); final AutoIndexer indexer = this.rawGraph.index().getNodeAutoIndexer(); if (indexer.isEnabled() && indexer.getAutoIndexedProperties().contains(key)) return new Neo4j2VertexIterable(this.rawGraph.index().getNodeAutoIndexer().getAutoIndex().get(key, value), this, this.checkElementsInTransaction()); else return new PropertyFilteredIterable<Vertex>(key, value, this.getVertices()); }