Titan 1.0 [Berkeley + Remote Elastic Search] このタイタンの組み合わせを使用しています。以下はプロパティファイルです -Titan 1.0 [Berkeley + ES] - ESインデックスの遅延アップデート
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
私たちは混在インデックスのみを使用しています。
ここでは、プロパティの少ないノードをJavaコードで追加してからフェッチします。
混合インデックスが作成されるプロパティでクエリを実行します。
私たちは、キー(混合インデックスが作成されたもの)でノードを返すと、すぐにノードを取得しません。しかし、それは遅れて利用可能になる。
何が間違っていますか?または、このESインスタンスの更新が遅れることが予想されますか?
ここにJavaコードがあります。
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;
}
インデックスを作成するためのコードがある - これはTitan mailing listに以前に議論されている
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);
}
ありがとうございました。私は検索しようとしましたが、関連情報は得られませんでした。あなたの反応は上です。 – Akshaya
ここでは、レコードをリアルタイムで照会する必要があったため、これを達成したいと考えています。 – Akshaya
グラフデータを検索したいので、部分検索のNGRAMサポートが必要です。残念ながら、デフォルトのESインデックス(Titan)ではこれを達成できませんでした。カスタム索引作成のサポートでは不十分です。だから私たちは望みの設定で別のインデックス(ngram)を作成しました。 これで同期をとる仕事があるので、データをタイタンインデックスからngramインデックスに更新し続ける必要があります。我々はまた、これらのレコードのIDを同じにしたいと考えました。レコードが更新されるときと同様に、私たちはタイタンインデックスをクエリし、データを取得して、同じインデックスIDを持つngramにコピーします。 – Akshaya