泰坦:比较两种查询方式

时间:2014-03-20 16:58:50

标签: titan

之间的性能差异是什么?
g.query().has("city","mumbai").vertices().iterator().next();

此处每个顶点都有一个属性city,其城市名称为mumbai

v.query().direction(Direction.IN).labels("belongTo").vertices();

此处vmumbai城市的顶点,所有其他顶点都通过边缘标签belongTo连接到它。

我想查询类似all vertex having city mumbai的内容。哪种方法会更好?

问题是用户可以输入任何城市名称,例如mumbai或mummbai或mubai,因此无法更改城市名称。因此,对于mumbai,我将创建mumbai mummbai mubai个顶点。效率非常低。

你将如何处理这种情况?

1 个答案:

答案 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]

干杯, 丹尼尔