2016-07-07 2 views
0

현재 OrientDB (2.1.16)를 유사성 권장 사항 작성을위한 가능한 솔루션으로 평가하고 있습니다. 이를 위해, 나는 다음과 같은 수행 초기 쿼리를 작성 도움을 싶지만 :OrientDB에서 가장 많이 사용하는 공유 꼭지점 찾기

Vertex:Maker -(Edge:Produced)-> Vertex:Item -(Edge:TaggedBy)-> Vertex:Tag 
내가 특정 항목 (V1)을 선택하고 다시 주문한 다른 항목 (Vn)의 목록을 좀하고 싶습니다
    1. 공통적으로 공유되는 태그의 수는 V1입니다.
    2. 확장자로, 선택한 제조업체 인 (V2)을 가져 와서 항목을 탐색하여 태그를 공유하는 제작자 목록 (가능한 경우 통과 된 항목)을 가져오고 싶습니다.

    이런 방식으로 교차 적용에 대한 자세한 문서는 없습니다. 특이한 제약은 없습니다. 수천 개의 아이템과 제조사가 있고 아마 그 태그의 10 배가 될 것입니다.

  • +0

    안녕하세요, JS 기능이 유용할까요? –

    +0

    서버 측 스크립트로 사용 하시겠습니까? 그게 효과가있는 것처럼 보입니다. 직접적인 쿼리를 원했지만, 이것을 옵션으로 살펴 보겠습니다. 제안 해 주셔서 감사합니다. – CrustyRatFink

    +1

    은 2.1.16을 사용하는 데 제약이 있습니까? 최신 stable (2.2.3)에는 새로운 MATCH 문이 포함되어있어 이러한 종류의 작업을 훨씬 쉽게 만듭니다. –

    답변

    0

    나는이 작은 그래프 예를

    enter image description here

    으로 시도 나는이 쿼리

    select item.name, count(tag)from (
        select from (
         MATCH { 
          CLASS:Item, AS:item, WHERE: (name<>'v1') 
         } 
         .out("TaggedBy"){AS:tag} 
         return item, tag 
        ) where tag in (
         select expand(tag) from (
          MATCH { 
           CLASS:Item, AS:item, WHERE: (name='v1') 
          }.out("TaggedBy"){AS:tag} 
          return tag 
         ) 
        ) 
    ) group by item order by count desc 
    

    을 사용하고 난

    enter code here

    는 희망이 도움이 결과를 얻었다.

    +0

    솔루션을 제공해 주셔서 감사합니다. 관계를 탐색하지 않기 때문에 유스 케이스가 표준 관계형 데이터베이스에 더 적합하다는 결론을 내린 후이 접근 방식을 사용하지 않았습니다. – CrustyRatFink

    관련 문제