2

現在、TinkerPop Gremlin (Titan バックエンドを使用) を使用して、「類似ドキュメント」アルゴリズムを実装しています。

次の行は、gremlin シェルで完全に機能しています。

v = g.v(880068)
m=[:]
v.as('x').out('auto_tag').in('auto_tag').has('status', 1).except('x').groupCount(m).filter{false}
results=[]
m.sort{-it.value}[0..9].each(){key, value -> results.add(key.document_id) }
results

次の結果が表示されます。

==>3188749
==>3190640
==>3191407
==>3187753
==>3186634
==>3185534
==>3189883
==>3190108
==>3187088
==>3188890

しかし、関数で同じコードを「ラップ」しようとすると、もう機能しません:

v = g.v(880068)

def get_similar_documents(v) {
    m=[:]
    v.as('x').out('auto_tag').in('auto_tag').has('status', 1).except('x').groupCount(m).filter{false}
    results=[]
    m.sort{-it.value}[0..9].each(){key, value -> results.add(key.document_id) }
    return results
}

get_similar_documents(v)

...何も返されません

Python バックエンドから来たので、これは変数のスコープに関連していると思いますが、今のところ修正方法がわかりません。

助けてくれてありがとう

編集:私は電球を使用しています。そのため、コードを関数でラップしたいと思います(後でPythonから呼び出すことができます)

4

1 に答える 1

2

iterate関数内ではパイプラインが必要だと思いますget_similar_documents。意味:

v.as('x').out('auto_tag').in('auto_tag').has('status', 1).except('x').groupCount(m).filter{false}.iterate()

Gremlin Shell がパイプラインを自動的に反復することを覚えておくことが重要です。シェルは関数内でそれを反復していないためmgroupCount.

詳細については、こちらをご覧ください。

于 2014-01-07T19:26:22.703 に答える