Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
package org.umlg.sqlg.test.gremlincompile;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assume.assumeTrue;
import java.beans.PropertyVetoException;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.apache.tinkerpop.gremlin.structure.T;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import org.umlg.sqlg.predicate.FullText;
import org.umlg.sqlg.structure.IndexType;
import org.umlg.sqlg.structure.VertexLabel;
import org.umlg.sqlg.test.BaseTest;
/**
* test full text support
* @author jpmoresmau
*
*/
public class TestGremlinCompileFullTextPredicate extends BaseTest {
@BeforeClass
public static void beforeClass() throws ClassNotFoundException, IOException, PropertyVetoException {
BaseTest.beforeClass();
if (configuration.getString("jdbc.url").contains("postgresql")) {
configuration.addProperty("distributed", true);
}
}
@Test
public void testDefaultImplementation(){
FullText ft=new FullText("",null,true);
assertTrue(ft.test("a fat cat sat on a mat and ate a fat rat", "cat"));
assertTrue(ft.test("a fat cat sat on a mat and ate a fat rat", "cat rat"));
assertFalse(ft.test("a fat cat sat on a mat and ate a fat rat", "cat cow"));
}
@Test
public void testDocExamples() throws SQLException {
assumeTrue(configuration.getString("jdbc.url").contains("postgresql"));
Vertex v0=this.sqlgGraph.addVertex(T.label, "Sentence", "name", "a fat cat sat on a mat and ate a fat rat");
Vertex v1=this.sqlgGraph.addVertex(T.label, "Sentence", "name", "fatal error");
Vertex v2=this.sqlgGraph.addVertex(T.label, "Sentence", "name", "error is not fatal");
/*this.sqlgGraph.tx().commit();
try (Statement s=this.sqlgGraph.tx().getConnection().createStatement();){
String create="CREATE INDEX sentence_idx ON \""+SchemaManager.VERTEX_PREFIX+"Sentence\" USING GIN (to_tsvector('english', \"public\".\"V_Sentence\".\"name\"))";
s.execute(create);
}*/
VertexLabel vl=this.sqlgGraph.getTopology().getVertexLabel("public", "Sentence").get();
vl.ensureIndexExists(IndexType.getFullTextGIN("english"), Collections.singletonList(vl.getProperty("name").get()));
this.sqlgGraph.tx().commit();
List vts=this.sqlgGraph.traversal().V().hasLabel("Sentence").has("name",FullText.fullTextMatch("english", "fat & rat")).toList();
assertEquals(1,vts.size());
assertTrue(vts.contains(v0));
vts=this.sqlgGraph.traversal().V().hasLabel("Sentence").has("name",FullText.fullTextMatch("english", "fat & cow")).toList();
assertEquals(0,vts.size());
vts=this.sqlgGraph.traversal().V().hasLabel("Sentence").has("name",FullText.fullTextMatch("english", "fatal <-> error")).toList();
assertEquals(1,vts.size());
assertTrue(vts.contains(v1));
vts=this.sqlgGraph.traversal().V().hasLabel("Sentence").has("name",FullText.fullTextMatch("english", "fatal & error")).toList();
assertEquals(2,vts.size());
assertTrue(vts.contains(v1));
assertTrue(vts.contains(v2));
vts=this.sqlgGraph.traversal().V().hasLabel("Sentence").has("name",FullText.fullTextMatch("english",true, "fatal error")).toList();
assertEquals(2,vts.size());
assertTrue(vts.contains(v1));
assertTrue(vts.contains(v2));
vts=this.sqlgGraph.traversal().V().hasLabel("Sentence").has("name",FullText.fullTextMatch("english", "!cat")).toList();
assertEquals(2,vts.size());
assertTrue(vts.contains(v1));
assertTrue(vts.contains(v2));
}
@Test
public void testDocExamplesWhere() throws SQLException {
assumeTrue(configuration.getString("jdbc.url").contains("postgresql"));
Vertex v0=this.sqlgGraph.addVertex(T.label, "Sentence", "name", "a fat cat sat on a mat and ate a fat rat");
Vertex v1=this.sqlgGraph.addVertex(T.label, "Sentence", "name", "fatal error");
Vertex v2=this.sqlgGraph.addVertex(T.label, "Sentence", "name", "error is not fatal");
VertexLabel vl=this.sqlgGraph.getTopology().getVertexLabel("public", "Sentence").get();
vl.ensureIndexExists(IndexType.getFullTextGIN("english"), Collections.singletonList(vl.getProperty("name").get()));
this.sqlgGraph.tx().commit();
List vts=this.sqlgGraph.traversal().V().hasLabel("Sentence").where(FullText.fullTextMatch("english",false,"name", "fat & rat")).toList();
assertEquals(1,vts.size());
assertTrue(vts.contains(v0));
vts=this.sqlgGraph.traversal().V().hasLabel("Sentence").where(FullText.fullTextMatch("english",false,"name", "fat & cow")).toList();
assertEquals(0,vts.size());
vts=this.sqlgGraph.traversal().V().hasLabel("Sentence").where(FullText.fullTextMatch("english",false,"name", "fatal <-> error")).toList();
assertEquals(1,vts.size());
assertTrue(vts.contains(v1));
vts=this.sqlgGraph.traversal().V().hasLabel("Sentence").where(FullText.fullTextMatch("english",false,"name", "fatal & error")).toList();
assertEquals(2,vts.size());
assertTrue(vts.contains(v1));
assertTrue(vts.contains(v2));
vts=this.sqlgGraph.traversal().V().hasLabel("Sentence").as("a").where("a",FullText.fullTextMatch("english",true,"name", "fatal error")).toList();
assertEquals(2,vts.size());
assertTrue(vts.contains(v1));
assertTrue(vts.contains(v2));
vts=this.sqlgGraph.traversal().V().hasLabel("Sentence").as("a").where("a",FullText.fullTextMatch("english",false,"name", "!cat")).toList();
assertEquals(2,vts.size());
assertTrue(vts.contains(v1));
assertTrue(vts.contains(v2));
/*vts=this.sqlgGraph.traversal().V().hasLabel("Sentence").or(
__.where(FullText.fullTextMatch("english",false,"name", "fat & rat")),
__.where(FullText.fullTextMatch("english",false,"name", "fatal <-> error"))
).toList();
assertEquals(2,vts.size());
assertTrue(vts.contains(v0));
assertTrue(vts.contains(v1));*/
v2.addEdge("testEdge", v0);
this.sqlgGraph.tx().commit();
vts=this.sqlgGraph.traversal().V().hasLabel("Sentence").has("name","error is not fatal").out("testEdge").where(FullText.fullTextMatch("english",false,"name", "fat & rat")).toList();
assertEquals(1,vts.size());
assertTrue(vts.contains(v0));
}
@Test
public void testConcat() throws SQLException {
assumeTrue(configuration.getString("jdbc.url").contains("postgresql"));
Vertex v0=this.sqlgGraph.addVertex(T.label, "Sentence", "name1", "a fat cat sat on a","name2","mat and ate a fat rat");
this.sqlgGraph.addVertex(T.label, "Sentence", "name1", "fatal error");
this.sqlgGraph.addVertex(T.label, "Sentence", "name1", "error is not fatal");
VertexLabel vl=this.sqlgGraph.getTopology().getVertexLabel("public", "Sentence").get();
vl.ensureIndexExists(IndexType.getFullTextGIN("english"), Arrays.asList(vl.getProperty("name1").get(),vl.getProperty("name2").get()));
this.sqlgGraph.tx().commit();
List vts=this.sqlgGraph.traversal().V().hasLabel("Sentence").where(FullText.fullTextMatch("english",false,Arrays.asList("name1","name2"), "fat & rat")).toList();
assertEquals(1,vts.size());
assertTrue(vts.contains(v0));
}
@Test
@Ignore("check manually index is used")
public void testPerfOneColumn() throws SQLException {
assumeTrue(configuration.getString("jdbc.url").contains("postgresql"));
Vertex v0=this.sqlgGraph.addVertex(T.label, "Sentence", "name", "a fat cat sat on a mat and ate a fat rat");
int LOOPS=10000;
for (int a=0;a vts=this.sqlgGraph.traversal().V().hasLabel("Sentence").has("name",FullText.fullTextMatch("english", "fat & rat")).toList();
assertEquals(1,vts.size());
assertTrue(vts.contains(v0));
long t1=System.currentTimeMillis();
long delta=t1-t0;
System.out.println("query time:"+delta+"ms");
}
@Test
@Ignore("check manually index is used")
public void testPerfTwoColumns() throws SQLException {
assumeTrue(configuration.getString("jdbc.url").contains("postgresql"));
Vertex v0=this.sqlgGraph.addVertex(T.label, "Sentence", "name1", "a fat cat sat on a mat","name2","and ate a fat rat");
int LOOPS=10000;
for (int a=0;a vts=this.sqlgGraph.traversal().V().hasLabel("Sentence").where(FullText.fullTextMatch("english",false,Arrays.asList("name1","name2"), "fat & rat")).toList();
assertEquals(1,vts.size());
assertTrue(vts.contains(v0));
long t1=System.currentTimeMillis();
long delta=t1-t0;
System.out.println("query time:"+delta+"ms");
}
}