2014-01-07 2 views
2

"비슷한 문서"알고리즘을 구현하기 위해 TinkerPop Gremlin (타이탄 백엔드 포함)을 사용하고 있습니다.gremlin 쉘에서와 동일한 결과를 반환하는 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) 

... 아무 것도 반환되지 않습니다.

파이썬 백엔드에서 오는 것으로,이 변수 범위와 관련이 있다고 생각하지만 지금까지 나는 그것을 고치는 방법을 모르겠다. 사전에 어떤 도움

감사

편집 : 나는

답변

2

내 생각 (나중에 파이썬에서 호출 할 수있는) 함수 내 코드를 포장하고 싶은 그 이유는, 전구를 사용하고 있습니다 get_similar_documents 기능을 사용할 때 iterate 파이프 라인이 필요합니다. 의미 :

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

Gremlin Shell이 ​​자동으로 파이프 라인을 반복한다는 것을 기억해야합니다. 셸이 함수 내에서 반복하지 않으므로 groupCount에있는 m에 부작용이 생성되지 않습니다.

거기에 대한 자세한 내용은 here을 참조하십시오.

+0

고마워요, 스티븐, 작동 :) 나는이 "트릭"을 이미 보았지만 아직 연습을하지 않고 있으므로 잊어 버렸습니다. ( –

관련 문제