我在Java中使用OrientDB的Graph API时遇到了问题。
问题:
从持久的本地图数据库中检索顶点(OrientVertex或Vertex?),并通过控制台创建多个顶点/边。
因此,我已经能够使用
从我现在认为的文档API查询数据库graph = factory.getTx();
String string = String.format("select * from V where name like \"%s\"", criteria);
OSQLSynchQuery<ODocument> query = new OSQLSynchQuery<OrientVertex>(string);
List<OrientDocument> results = graph.getRawGraph().command(query).execute();
但这不适用于Vertices。 如何运行返回数据库中顶点列表的查询?
提前致谢。
答案 0 :(得分:5)
您可以避免使用orientGraph直接获取rawGraph和执行命令 并返回一个可迭代的OrientVertex
像这样:graph = factory.getTx();
String query = String.format("select * from V where name like \"%s\"", criteria);
OSQLSynchQuery<OrientVertex> qr = new OSQLSynchQuery<OrientVertex>(query);
Iterable<OrientVertex> vertices = graph.command(qr).execute();
答案 1 :(得分:3)
查看代码,您正在使用Graph API。致电getRawGraph()
后,您 不再使用图谱API,但使用文档API(方法名称有点令人困惑)。
引用OrientGraph
有几种可能性
orientGraph#getVertex*(..)
/ orientGraph#getVertices*(..)
方式orientGraph#query().has("key", value).vertices()
orientGraph#command(...).execute()
。在这种情况下,命令在外部交易中执行(感谢@ wolf4ood)答案 2 :(得分:0)
有时我们想要根据其他属性(例如名称,年龄等)检索“顶点”,因此,我使用了 getVertices() 方法来获取迭代器然后提取顶点,因为现在不推荐使用 getVertexByKey() 。代码是:
if (requestCode == VOICE_INPUT_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
ArrayList<String> matches = data.getStringArrayListExtra(
RecognizerIntent.EXTRA_RESULTS);
int matchSize = matches.size();
for (int index = 0; index < matchSize; index++) {
Log.i(TAG, String.valueOf(index) + ": " + matches.get(index));
if (index == 0) {
searchbar.setText(matches.get(index));
}
}
} else if (resultCode == PlaceAutocomplete.RESULT_ERROR) {
Status status = PlaceAutocomplete.getStatus(this, data);
// TODO: Handle the error.
Log.i(TAG, status.getStatusMessage());
Snackbar.make(locationTextView, status.getStatusMessage(), Snackbar.LENGTH_LONG).show();
} else if (resultCode == RESULT_CANCELED) {
Snackbar.make(locationTextView, "Canceled", Snackbar.LENGTH_LONG).show();
}
}
所以我们在不知道记录的RID的情况下得到了顶点。 我不知道这是否是做到这一点的最佳方法,但它确实起到了作用。