Titan 1.0 [Berkeley + Fernelastische Suche] wir verwenden diese Kombination von Titan. Das Folgende ist die Eigenschaftendatei:Titan 1.0 [Berkeley + ES] - Verzögerte Aktualisierung des ES-Index
storage.backend=berkeleyje
storage.directory=D:/other-projects/graph-db/titan/enron-tk3/db/berkeley
index.search.backend=elasticsearch
index.search.index-name=akshayatitan
index.search.hostname=localhost
index.search.elasticsearch.client-only=true
index.search.elasticsearch.local-mode=false
Wir verwenden nur gemischten Index.
Jetzt fügen wir einen Knoten mit wenigen Eigenschaften über Java-Code hinzu und holen ihn dann.
Wir fragen nach einer Eigenschaft, auf der ein gemischter Index erstellt wird.
Wenn wir den Knoten zurück mit dem Schlüssel abfragen (einer, bei dem ein gemischter Index erstellt wird), erhalten wir den Knoten nicht sofort. Jedoch wird es nach einer Verzögerung verfügbar.
Was machen wir falsch? Oder wird diese verzögerte Aktualisierung der ES-Instanz erwartet?
Hier ist der Java-Code.
public static void main(String[] args) throws Exception {
GraphTest test = new GraphTest();
test.init();
Thread.sleep(10000);
String emailId = "emailId" + System.nanoTime();
test.createNode(emailId);
System.out.println("Create " + emailId);
System.out.println("First time " + test.getNode(emailId));
Thread.sleep(2000);
System.out.println("After a delay of 2 sec " + test.getNode(emailId));
}
public void createNode(String emailid) {
Vertex vertex = graph.addVertex("person");
vertex.property("emailId", emailid);
vertex.property("firstName", "First Name");
vertex.property("lastName", "Last Name");
vertex.property("address", "Address");
vertex.property("hometown", "Noida");
vertex.property("city", "Noida");
vertex.property("spousename", "Preeti");
graph.tx().commit();
}
public Object getNode(String emailId) {
Vertex vert = null;
String reString = null;
try {
vert = graph.traversal().V().has("emailId", emailId).next();
reString = vert.value("emailId");
} catch (NoSuchElementException e) {
e.printStackTrace();
} finally {
graph.tx().close();
}
return reString;
}
Der Code-Index zu erstellen ist -
private void createMixedIndexForVertexProperty(String indexName, String propertyKeyName, Class<?> propertyType) {
TitanManagement mgmt = ((TitanGraph) graph).openManagement();
try {
PropertyKey propertyKey = makePropertyKey(propertyKeyName, propertyType, mgmt);
TitanGraphIndex graphIndex = mgmt.getGraphIndex(indexName);
if (graphIndex == null) {
graphIndex = mgmt.buildIndex(indexName, Vertex.class)
.addKey(propertyKey, Parameter.of("mapping", Mapping.STRING)).buildMixedIndex("search");
} else {
mgmt.addIndexKey(graphIndex, propertyKey);
}
mgmt.commit();
} catch (Exception e) {
mgmt.rollback();
} finally {
}
}
public PropertyKey makePropertyKey(String propertyKeyName, Class<?> propertyType, TitanManagement mgmt) {
PropertyKey propertyKey = mgmt.getPropertyKey(propertyKeyName);
if (propertyKey == null) {
propertyKey = mgmt.makePropertyKey(propertyKeyName).dataType(String.class).make();
}
return propertyKey;
}
public void init() throws Exception {
graph = TitanFactory
.open(new PropertiesConfiguration(new File("src/test/resources/titan-berkeleydb-es.properties")));
createMixedIndexForVertexProperty("personnode", "emailId", String.class);
createMixedIndexForVertexProperty("personnode", "firstName", String.class);
createMixedIndexForVertexProperty("personnode", "lastName", String.class);
createMixedIndexForVertexProperty("personnode", "address", String.class);
createMixedIndexForVertexProperty("personnode", "hometown", String.class);
createMixedIndexForVertexProperty("personnode", "city", String.class);
createMixedIndexForVertexProperty("personnode", "spousename", String.class);
}
Danke Jason. Ich habe versucht zu suchen, habe aber keine relevanten Informationen bekommen. Ihre Antwort ist genau richtig. – Akshaya
Hier ist die Verwendung, die wir erreichen möchten, aufgrund derer wir den Datensatz in Echtzeit abfragen mussten. – Akshaya
Wir wollen die Grafikdaten durchsuchen und benötigen daher NGRAM-Unterstützung für die partielle Suche. Leider konnten wir dies mit dem Standard-ES-Index (Titan) nicht erreichen. Die Unterstützung für benutzerdefinierte Indexerstellung ist nicht genug. Also haben wir am Ende einen anderen Index (ngram) mit der gewünschten Konfiguration erstellt. Jetzt haben wir einen Job, um sie synchron zu halten, also müssen wir die Daten vom Titan-Index zum Ngram-Index aktualisieren. Wir wollten auch die IDs dieser Datensätze beibehalten. Wenn also ein Datensatz aktualisiert wird, fragen wir den Titan-Index ab, holen die Daten und kopieren sie mit derselben Index-ID nach ngram. – Akshaya