From cef28c79b8db503c6ca1afb8ede245e4842902c5 Mon Sep 17 00:00:00 2001 From: Chris Vest Date: Wed, 20 Sep 2017 11:12:07 +0200 Subject: [PATCH] =?UTF-8?q?Simplify=20the=20LuceneFulltextUpdater=E2=80=A6?= =?UTF-8?q?=20and=20=E2=80=A6AnalyzerTests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/fulltext/FulltextAnalyzerTest.java | 35 +-- .../fulltext/LuceneFulltextTestSupport.java | 35 ++- .../fulltext/LuceneFulltextUpdaterTest.java | 207 ++++++------------ 3 files changed, 111 insertions(+), 166 deletions(-) diff --git a/enterprise/fulltext-addon/src/test/java/org/neo4j/kernel/api/impl/fulltext/FulltextAnalyzerTest.java b/enterprise/fulltext-addon/src/test/java/org/neo4j/kernel/api/impl/fulltext/FulltextAnalyzerTest.java index 2d5d456b3faeb..783815395bc38 100644 --- a/enterprise/fulltext-addon/src/test/java/org/neo4j/kernel/api/impl/fulltext/FulltextAnalyzerTest.java +++ b/enterprise/fulltext-addon/src/test/java/org/neo4j/kernel/api/impl/fulltext/FulltextAnalyzerTest.java @@ -23,7 +23,6 @@ import org.apache.lucene.analysis.sv.SwedishAnalyzer; import org.junit.Test; -import org.neo4j.graphdb.Node; import org.neo4j.graphdb.Transaction; import static java.util.Collections.singletonList; @@ -40,16 +39,11 @@ public void shouldBeAbleToSpecifyEnglishAnalyzer() throws Exception fulltextFactory.createFulltextIndex( "bloomNodes", NODES, singletonList( "prop" ), provider ); provider.init(); - long firstID; - long secondID; + long id; try ( Transaction tx = db.beginTx() ) { - Node node = db.createNode(); - Node node2 = db.createNode(); - firstID = node.getId(); - secondID = node2.getId(); - node.setProperty( "prop", "Hello and hello again, in the end." ); - node2.setProperty( "prop", "En apa och en tomte bodde i ett hus." ); + createNodeIndexableByPropertyValue( "Hello and hello again, in the end." ); + id = createNodeIndexableByPropertyValue( "En apa och en tomte bodde i ett hus." ); tx.success(); } @@ -59,9 +53,9 @@ public void shouldBeAbleToSpecifyEnglishAnalyzer() throws Exception assertExactQueryFindsNothing( reader, "and" ); assertExactQueryFindsNothing( reader, "in" ); assertExactQueryFindsNothing( reader, "the" ); - assertExactQueryFindsIds( reader, "en", secondID ); - assertExactQueryFindsIds( reader, "och", secondID ); - assertExactQueryFindsIds( reader, "ett", secondID ); + assertExactQueryFindsIds( reader, "en", id ); + assertExactQueryFindsIds( reader, "och", id ); + assertExactQueryFindsIds( reader, "ett", id ); } } } @@ -75,25 +69,20 @@ public void shouldBeAbleToSpecifySwedishAnalyzer() throws Exception fulltextFactory.createFulltextIndex( "bloomNodes", NODES, singletonList( "prop" ), provider ); provider.init(); - long firstID; - long secondID; + long id; try ( Transaction tx = db.beginTx() ) { - Node node = db.createNode(); - Node node2 = db.createNode(); - firstID = node.getId(); - secondID = node2.getId(); - node.setProperty( "prop", "Hello and hello again, in the end." ); - node2.setProperty( "prop", "En apa och en tomte bodde i ett hus." ); + id = createNodeIndexableByPropertyValue( "Hello and hello again, in the end." ); + createNodeIndexableByPropertyValue( "En apa och en tomte bodde i ett hus." ); tx.success(); } try ( ReadOnlyFulltext reader = provider.getReader( "bloomNodes", NODES ) ) { - assertExactQueryFindsIds( reader, "and", firstID ); - assertExactQueryFindsIds( reader, "in", firstID ); - assertExactQueryFindsIds( reader, "the", firstID ); + assertExactQueryFindsIds( reader, "and", id ); + assertExactQueryFindsIds( reader, "in", id ); + assertExactQueryFindsIds( reader, "the", id ); assertExactQueryFindsNothing( reader, "en" ); assertExactQueryFindsNothing( reader, "och" ); assertExactQueryFindsNothing( reader, "ett" ); diff --git a/enterprise/fulltext-addon/src/test/java/org/neo4j/kernel/api/impl/fulltext/LuceneFulltextTestSupport.java b/enterprise/fulltext-addon/src/test/java/org/neo4j/kernel/api/impl/fulltext/LuceneFulltextTestSupport.java index f3aaef41b558f..32bd55b004130 100644 --- a/enterprise/fulltext-addon/src/test/java/org/neo4j/kernel/api/impl/fulltext/LuceneFulltextTestSupport.java +++ b/enterprise/fulltext-addon/src/test/java/org/neo4j/kernel/api/impl/fulltext/LuceneFulltextTestSupport.java @@ -30,6 +30,7 @@ import org.neo4j.collection.primitive.PrimitiveLongIterator; import org.neo4j.collection.primitive.PrimitiveLongSet; import org.neo4j.graphdb.Node; +import org.neo4j.graphdb.Relationship; import org.neo4j.graphdb.RelationshipType; import org.neo4j.graphdb.Transaction; import org.neo4j.io.fs.FileSystemAbstraction; @@ -75,6 +76,33 @@ protected FulltextProvider createProvider() return new FulltextProvider( db, LOG, availabilityGuard, scheduler ); } + protected long createNodeIndexableByPropertyValue( Object propertyValue ) + { + return createNodeWithProperty( "prop", propertyValue ); + } + + protected long createNodeWithProperty( String propertyKey, Object propertyValue ) + { + Node node = db.createNode(); + node.setProperty( propertyKey, propertyValue ); + return node.getId(); + } + + protected long createRelationshipIndexableByPropertyValue( long firstNodeId, long secondNodeId, Object propertyValue ) + { + return createRelationshipWithProperty( firstNodeId, secondNodeId, "prop", propertyValue ); + } + + protected long createRelationshipWithProperty( long firstNodeId, long secondNodeId, String propertyKey, + Object propertyValue ) + { + Node first = db.getNodeById( firstNodeId ); + Node second = db.getNodeById( secondNodeId ); + Relationship relationship = first.createRelationshipTo( second, RELTYPE ); + relationship.setProperty( propertyKey, propertyValue ); + return relationship.getId(); + } + protected void assertExactQueryFindsNothing( ReadOnlyFulltext reader, String query ) { assertExactQueryFindsIds( reader, query ); @@ -108,11 +136,16 @@ protected void assertQueryResultsMatch( PrimitiveLongIterator result, long[] ids } protected void setNodeProp( long nodeId, String value ) + { + setNodeProp( nodeId, "prop", value ); + } + + protected void setNodeProp( long nodeId, String propertyKey, String value ) { try ( Transaction tx = db.beginTx() ) { Node node = db.getNodeById( nodeId ); - node.setProperty( "prop", value ); + node.setProperty( propertyKey, value ); tx.success(); } } diff --git a/enterprise/fulltext-addon/src/test/java/org/neo4j/kernel/api/impl/fulltext/LuceneFulltextUpdaterTest.java b/enterprise/fulltext-addon/src/test/java/org/neo4j/kernel/api/impl/fulltext/LuceneFulltextUpdaterTest.java index a6c73d98974d9..5b3caea136ab8 100644 --- a/enterprise/fulltext-addon/src/test/java/org/neo4j/kernel/api/impl/fulltext/LuceneFulltextUpdaterTest.java +++ b/enterprise/fulltext-addon/src/test/java/org/neo4j/kernel/api/impl/fulltext/LuceneFulltextUpdaterTest.java @@ -23,15 +23,10 @@ import java.util.Arrays; -import org.neo4j.collection.primitive.PrimitiveLongCollections; -import org.neo4j.collection.primitive.PrimitiveLongIterator; -import org.neo4j.collection.primitive.PrimitiveLongSet; import org.neo4j.graphdb.Node; -import org.neo4j.graphdb.Relationship; import org.neo4j.graphdb.Transaction; import static java.util.Collections.singletonList; -import static org.junit.Assert.assertTrue; import static org.neo4j.kernel.api.impl.fulltext.FulltextProvider.FulltextIndexType.NODES; import static org.neo4j.kernel.api.impl.fulltext.FulltextProvider.FulltextIndexType.RELATIONSHIPS; @@ -49,12 +44,8 @@ public void shouldFindNodeWithString() throws Exception long secondID; try ( Transaction tx = db.beginTx() ) { - Node node = db.createNode(); - Node node2 = db.createNode(); - firstID = node.getId(); - secondID = node2.getId(); - node.setProperty( "prop", "Hello. Hello again." ); - node2.setProperty( "prop", + firstID = createNodeIndexableByPropertyValue( "Hello. Hello again." ); + secondID = createNodeIndexableByPropertyValue( "A zebroid (also zedonk, zorse, zebra mule, zonkey, and zebmule) is the offspring of any " + "cross between a zebra and any other equine: essentially, a zebra hybrid." ); @@ -83,12 +74,8 @@ public void shouldFindNodeWithNumber() throws Exception long secondID; try ( Transaction tx = db.beginTx() ) { - Node node = db.createNode(); - Node node2 = db.createNode(); - firstID = node.getId(); - secondID = node2.getId(); - node.setProperty( "prop", 1 ); - node2.setProperty( "prop", 234 ); + firstID = createNodeIndexableByPropertyValue( 1 ); + secondID = createNodeIndexableByPropertyValue( 234 ); tx.success(); } @@ -113,12 +100,8 @@ public void shouldFindNodeWithBoolean() throws Exception long secondID; try ( Transaction tx = db.beginTx() ) { - Node node = db.createNode(); - Node node2 = db.createNode(); - firstID = node.getId(); - secondID = node2.getId(); - node.setProperty( "prop", true ); - node2.setProperty( "prop", false ); + firstID = createNodeIndexableByPropertyValue( true ); + secondID = createNodeIndexableByPropertyValue( false ); tx.success(); } @@ -144,15 +127,9 @@ public void shouldFindNodeWithArrays() throws Exception long thirdID; try ( Transaction tx = db.beginTx() ) { - Node node = db.createNode(); - Node node2 = db.createNode(); - Node node3 = db.createNode(); - firstID = node.getId(); - secondID = node2.getId(); - thirdID = node3.getId(); - node.setProperty( "prop", new String[]{"hello", "I", "live", "here"} ); - node2.setProperty( "prop", new int[]{1, 27, 48} ); - node3.setProperty( "prop", new int[]{1, 2, 48} ); + firstID = createNodeIndexableByPropertyValue( new String[]{"hello", "I", "live", "here"} ); + secondID = createNodeIndexableByPropertyValue( new int[]{1, 27, 48} ); + thirdID = createNodeIndexableByPropertyValue( new int[]{1, 2, 48} ); tx.success(); } @@ -178,12 +155,8 @@ public void shouldRepresentPropertyChanges() throws Exception long secondID; try ( Transaction tx = db.beginTx() ) { - Node node = db.createNode(); - Node node2 = db.createNode(); - firstID = node.getId(); - secondID = node2.getId(); - node.setProperty( "prop", "Hello. Hello again." ); - node2.setProperty( "prop", + firstID = createNodeIndexableByPropertyValue( "Hello. Hello again." ); + secondID = createNodeIndexableByPropertyValue( "A zebroid (also zedonk, zorse, zebra mule, zonkey, and zebmule) is the offspring of any " + "cross between a zebra and any other equine: essentially, a zebra hybrid." ); @@ -191,10 +164,8 @@ public void shouldRepresentPropertyChanges() throws Exception } try ( Transaction tx = db.beginTx() ) { - Node node = db.getNodeById( firstID ); - node.setProperty( "prop", "Hahahaha! potato!" ); - Node node2 = db.getNodeById( secondID ); - node2.setProperty( "prop", "This one is a potato farmer." ); + setNodeProp( firstID, "Hahahaha! potato!" ); + setNodeProp( secondID, "This one is a potato farmer." ); tx.success(); } @@ -224,12 +195,8 @@ public void shouldNotFindRemovedNodes() throws Exception long secondID; try ( Transaction tx = db.beginTx() ) { - Node node = db.createNode(); - Node node2 = db.createNode(); - firstID = node.getId(); - secondID = node2.getId(); - node.setProperty( "prop", "Hello. Hello again." ); - node2.setProperty( "prop", + firstID = createNodeIndexableByPropertyValue( "Hello. Hello again." ); + secondID = createNodeIndexableByPropertyValue( "A zebroid (also zedonk, zorse, zebra mule, zonkey, and zebmule) is the offspring of any " + "cross between a zebra and any other equine: essentially, a zebra hybrid." ); @@ -267,22 +234,14 @@ public void shouldNotFindRemovedProperties() throws Exception long thirdID; try ( Transaction tx = db.beginTx() ) { - Node node = db.createNode(); - Node node2 = db.createNode(); - Node node3 = db.createNode(); - firstID = node.getId(); - secondID = node2.getId(); - thirdID = node3.getId(); - - node.setProperty( "prop", "Hello. Hello again." ); - node.setProperty( "prop", "zebra" ); - - node2.setProperty( "prop", + firstID = createNodeIndexableByPropertyValue( "Hello. Hello again." ); + secondID = createNodeIndexableByPropertyValue( "A zebroid (also zedonk, zorse, zebra mule, zonkey, and zebmule) is the offspring of any " + "cross between a zebra and any other equine: essentially, a zebra hybrid." ); - node2.setProperty( "prop", "Hello. Hello again." ); + thirdID = createNodeIndexableByPropertyValue( "Hello. Hello again." ); - node3.setProperty( "prop", "Hello. Hello again." ); + setNodeProp( firstID, "zebra" ); + setNodeProp( secondID, "Hello. Hello again." ); tx.success(); } @@ -325,11 +284,10 @@ public void shouldOnlyIndexIndexedProperties() throws Exception long firstID; try ( Transaction tx = db.beginTx() ) { - Node node = db.createNode(); + firstID = createNodeIndexableByPropertyValue( "Hello. Hello again." ); + setNodeProp( firstID, "prop2", "zebra" ); + Node node2 = db.createNode(); - firstID = node.getId(); - node.setProperty( "prop", "Hello. Hello again." ); - node.setProperty( "prop2", "zebra" ); node2.setProperty( "prop2", "zebra" ); node2.setProperty( "prop3", "hello" ); @@ -357,15 +315,12 @@ public void shouldSearchAcrossMultipleProperties() throws Exception long thirdID; try ( Transaction tx = db.beginTx() ) { - Node node = db.createNode(); - Node node2 = db.createNode(); + firstID = createNodeIndexableByPropertyValue( "Tomtar tomtar oftsat i tomteutstyrsel." ); + secondID = createNodeIndexableByPropertyValue( "Olof och Hans" ); + setNodeProp( secondID, "prop2", "och karl" ); + Node node3 = db.createNode(); - firstID = node.getId(); - secondID = node2.getId(); thirdID = node3.getId(); - node.setProperty( "prop", "Tomtar tomtar oftsat i tomteutstyrsel." ); - node2.setProperty( "prop", "Olof och Hans" ); - node2.setProperty( "prop2", "och karl" ); node3.setProperty( "prop2", "Tomtar som inte tomtar ser upp till tomtar som tomtar." ); tx.success(); @@ -392,22 +347,18 @@ public void shouldOrderResultsBasedOnRelevance() throws Exception long fourthID; try ( Transaction tx = db.beginTx() ) { - Node node = db.createNode(); - Node node2 = db.createNode(); - Node node3 = db.createNode(); - Node node4 = db.createNode(); - firstID = node.getId(); - secondID = node2.getId(); - thirdID = node3.getId(); - fourthID = node4.getId(); - node.setProperty( "first", "Full" ); - node.setProperty( "last", "Hanks" ); - node2.setProperty( "first", "Tom" ); - node2.setProperty( "last", "Hunk" ); - node3.setProperty( "first", "Tom" ); - node3.setProperty( "last", "Hanks" ); - node4.setProperty( "first", "Tom Hanks" ); - node4.setProperty( "last", "Tom Hanks" ); + firstID = db.createNode().getId(); + secondID = db.createNode().getId(); + thirdID = db.createNode().getId(); + fourthID = db.createNode().getId(); + setNodeProp( firstID, "first", "Full" ); + setNodeProp( firstID, "last", "Hanks" ); + setNodeProp( secondID, "first", "Tom" ); + setNodeProp( secondID, "last", "Hunk" ); + setNodeProp( thirdID, "first", "Tom" ); + setNodeProp( thirdID, "last", "Hanks" ); + setNodeProp( fourthID, "first", "Tom Hanks" ); + setNodeProp( fourthID, "last", "Tom Hanks" ); tx.success(); } @@ -434,20 +385,14 @@ public void shouldDifferentiateNodesAndRelationships() throws Exception long secondRelID; try ( Transaction tx = db.beginTx() ) { - Node node = db.createNode(); - Node node2 = db.createNode(); - Relationship rel1 = node.createRelationshipTo( node2, RELTYPE ); - Relationship rel2 = node2.createRelationshipTo( node, RELTYPE ); - firstNodeID = node.getId(); - secondNodeID = node2.getId(); - firstRelID = rel1.getId(); - secondRelID = rel2.getId(); - node.setProperty( "prop", "Hello. Hello again." ); - node2.setProperty( "prop", + firstNodeID = createNodeIndexableByPropertyValue( "Hello. Hello again." ); + secondNodeID = createNodeIndexableByPropertyValue( "A zebroid (also zedonk, zorse, zebra mule, zonkey, and zebmule) is the offspring of any " + "cross between a zebra and any other equine: essentially, a zebra hybrid." ); - rel1.setProperty( "prop", "Hello. Hello again." ); - rel2.setProperty( "prop", "And now, something completely different" ); + firstRelID = createRelationshipIndexableByPropertyValue( + firstNodeID, secondNodeID, "Hello. Hello again." ); + secondRelID = createRelationshipIndexableByPropertyValue( + secondNodeID, firstNodeID, "And now, something completely different" ); tx.success(); } @@ -479,12 +424,8 @@ public void fuzzyQueryShouldBeFuzzy() throws Exception long secondID; try ( Transaction tx = db.beginTx() ) { - Node node = db.createNode(); - Node node2 = db.createNode(); - firstID = node.getId(); - secondID = node2.getId(); - node.setProperty( "prop", "Hello. Hello again." ); - node2.setProperty( "prop", + firstID = createNodeIndexableByPropertyValue( "Hello. Hello again." ); + secondID = createNodeIndexableByPropertyValue( "A zebroid (also zedonk, zorse, zebra mule, zonkey, and zebmule) is the offspring of any " + "cross between a zebra and any other equine: essentially, a zebra hybrid." ); @@ -519,18 +460,10 @@ public void fuzzyQueryShouldReturnExactMatchesFirst() throws Exception long fourthID; try ( Transaction tx = db.beginTx() ) { - Node node = db.createNode(); - Node node2 = db.createNode(); - Node node3 = db.createNode(); - Node node4 = db.createNode(); - firstID = node.getId(); - secondID = node2.getId(); - thirdID = node3.getId(); - fourthID = node4.getId(); - node.setProperty( "prop", "zibre" ); - node2.setProperty( "prop", "zebrae" ); - node3.setProperty( "prop", "zebra" ); - node4.setProperty( "prop", "zibra" ); + firstID = createNodeIndexableByPropertyValue( "zibre" ); + secondID = createNodeIndexableByPropertyValue( "zebrae" ); + thirdID = createNodeIndexableByPropertyValue( "zebra" ); + fourthID = createNodeIndexableByPropertyValue( "zibra" ); tx.success(); } @@ -553,16 +486,12 @@ public void shouldNotReturnNonMatches() throws Exception try ( Transaction tx = db.beginTx() ) { - Node node = db.createNode(); - Node node2 = db.createNode(); - Relationship rel1 = node.createRelationshipTo( node2, RELTYPE ); - Relationship rel2 = node2.createRelationshipTo( node, RELTYPE ); - node.setProperty( "prop", "Hello. Hello again." ); - node2.setProperty( "prop2", + long firstNode = createNodeIndexableByPropertyValue( "Hello. Hello again." ); + long secondNode = createNodeWithProperty( "prop2", "A zebroid (also zedonk, zorse, zebra mule, zonkey, and zebmule) is the offspring of any " + "cross between a zebra and any other equine: essentially, a zebra hybrid." ); - rel1.setProperty( "prop", "Hello. Hello again." ); - rel2.setProperty( "prop2", + createRelationshipIndexableByPropertyValue( firstNode, secondNode, "Hello. Hello again." ); + createRelationshipWithProperty( secondNode, firstNode, "prop2", "A zebroid (also zedonk, zorse, zebra mule, zonkey, and zebmule) is the offspring of any " + "cross between a zebra and any other equine: essentially, a zebra hybrid." ); @@ -588,23 +517,17 @@ public void shouldPopulateIndexWithExistingNodesAndRelationships() throws Except long secondRelID; try ( Transaction tx = db.beginTx() ) { - Node node = db.createNode(); - Node node2 = db.createNode(); - // skip a few rel ids, so the ones we work with are different from the node ids, just in case. - node.createRelationshipTo( node2, RELTYPE ); - node.createRelationshipTo( node2, RELTYPE ); - - Relationship rel1 = node.createRelationshipTo( node2, RELTYPE ); - Relationship rel2 = node2.createRelationshipTo( node, RELTYPE ); - firstNodeID = node.getId(); - secondNodeID = node2.getId(); - firstRelID = rel1.getId(); - secondRelID = rel2.getId(); - node.setProperty( "prop", "Hello. Hello again." ); - node2.setProperty( "prop", "This string is slightly shorter than the zebra one" ); - rel1.setProperty( "prop", "Goodbye" ); - rel2.setProperty( "prop", "And now, something completely different" ); + Node node = db.createNode(); + node.createRelationshipTo( node, RELTYPE ); + node.createRelationshipTo( node, RELTYPE ); + node.createRelationshipTo( node, RELTYPE ); + + firstNodeID = createNodeIndexableByPropertyValue( "Hello. Hello again." ); + secondNodeID = createNodeIndexableByPropertyValue( "This string is slightly shorter than the zebra one" ); + firstRelID = createRelationshipIndexableByPropertyValue( firstNodeID, secondNodeID, "Goodbye" ); + secondRelID = createRelationshipIndexableByPropertyValue( secondNodeID, firstNodeID, + "And now, something completely different" ); tx.success(); }