之间的性能差异是什么?
g.query().has("city","mumbai").vertices().iterator().next();
此处每个顶点都有一个属性city
,其城市名称为mumbai
和
v.query().direction(Direction.IN).labels("belongTo").vertices();
此处v
是mumbai
城市的顶点,所有其他顶点都通过边缘标签belongTo
连接到它。
我想查询类似all vertex having city mumbai
的内容。哪种方法会更好?
问题是用户可以输入任何城市名称,例如mumbai或mummbai或mubai,因此无法更改城市名称。因此,对于mumbai
,我将创建mumbai
mummbai
mubai
个顶点。效率非常低。
你将如何处理这种情况?
答案 0 :(得分:2)
Titans ElasticSearch集成非常适合那种模糊搜索。这是一个例子:
g = TitanFactory.open("conf/titan-cassandra-es.properties")
g.makeKey("city").dataType(String.class).indexed("search", Vertex.class).make()
g.makeKey("info").dataType(String.class).make()
g.makeLabel("belongsTo").make()
g.commit()
cities = ["washington", "mumbai", "phoenix", "uruguay", "pompeji"]
cities.each({ city ->
info = "belongs to ${city}"
g.addVertex(["info":info]).addEdge("belongsTo", g.addVertex(["city":city]))
}); g.commit()
info = { it.getElement().in("belongsTo").info.toList() }
userQueries = ["mumbai", "mummbai", "mubai", "phönix"]
userQueries.collectEntries({ userQuery ->
q = "v.city:${userQuery}~"
v = g.indexQuery("search", q).limit(1).vertices().collect(info).flatten()
[userQuery, v]
})
最后一个查询将为您提供以下结果:
==>mumbai=[belongs to mumbai]
==>mummbai=[belongs to mumbai]
==>mubai=[belongs to mumbai]
==>phönix=[belongs to phoenix]
干杯, 丹尼尔