获取匹配搜索的子顶点



我正在ASWS Neptune上实现一个图形数据库,我也使用AWS OpenSearch来执行全文搜索。

我想要得到所有匹配属性的子顶点。(在本例中获取所有文档)

我做了以下操作:

g.V( folderId )
.emit()
.repeat( in().dedup() )
.in()
.hasLabel( "document" )
.valueMap()
.by( unfold() )
.toList();

这将返回该文件夹及其子文件夹中的所有文档。

现在我这样做是为了只返回该文件夹/子文件夹中与name匹配的文档。

g.withSideEffect( "Neptune#fts.endpoint", "..." )
.V( folderId )
.has( "name", "Neptune#fts " + name + "*" )
.emit()
.repeat( in().dedup() )
.in()
.hasLabel( "document" )
.valueMap()
.by( unfold() )
.toList();

它返回一个空结果,但如果我删除folderId,它返回所有与该名称匹配的文档。

任何方法只返回那些匹配的名称,并在该文件夹?

感谢

如果没有某种类型的样本数据,很难给你一个查询,将满足您的要求,但你得到一个空结果的可能原因是,你没有遍历到任何子记录应用你的name搜索。让我们看一下查询的这一部分:

g.withSideEffect( "Neptune#fts.endpoint", "..." )
.V( folderId )
.has( "name", "Neptune#fts " + name + "*" )

这是说"找到一个顶点与id=folderIdname like name*。只有当这两个条件都为真时,它才会返回一个值,我怀疑在这个场景中不是这样的。

如果你想找到name*开头的特定顶点id的所有子documents,那么你会想做一些更像:

g.withSideEffect( "Neptune#fts.endpoint", "..." )
.V( folderId )  //Find a vertex with folderId
.emit() //Emit the vertices
.repeat( in().dedup()) //Repeatedly go out the in edges until there are no more
.hasLabel( "document" ) //Filter to only document labels
.has( "name", "Neptune#fts " + name + "*" ) //Filter to find things with "name*"
.valueMap()
.by( unfold() )
.toList();

此外,由于海王星索引数据(这里)的方式,如果您可以为in()边指定标签(如in('parent')),则性能会更好。

最新更新