Титан: Преброяване на ръба с различни свойства

    Vertex u1 = g.addVertex(null);
    Vertex u2 = g.addVertex(null);
    Vertex u3 = g.addVertex(null);
    Vertex u4 = g.addVertex(null);
    Vertex u5 = g.addVertex(null);
    Vertex u6 = g.addVertex(null);
    Vertex u7 = g.addVertex(null);
    Edge addEdge = u1.addEdge("testRate",page);
    addEdge.setProperty("testRating", 1);
    Edge addEdge1 = u2.addEdge("testRate",page);
    addEdge1.setProperty("testRating", 2);
    Edge addEdge2 = u3.addEdge("testRate",page);
    addEdge2.setProperty("testRating", 1);
    Edge addEdge3 = u4.addEdge("testRate",page);
    addEdge3.setProperty("testRating", 3);
    Edge addEdge4 = u5.addEdge("testRate",page);
    addEdge4.setProperty("testRating", 2);
    Edge addEdge5 = u6.addEdge("testRate",page);
    addEdge5.setProperty("testRating", 2);
    Edge addEdge6 = u7.addEdge("testRate",page);
    addEdge6.setProperty("testRating", 1);

За да получите номер на оценка-1

page.query().direction(Direction.IN).labels("testRate").has("testRating", 1).count();

Сега, за да получа всички различни видове рейтинг, трябва ли да изпълня същия вид код или има ли някакъв друг начин?

Намерих някакъв метод groupCount() gremlin. Това ли ми трябва, има ли същия начин и в java?


person Manish Kumar    schedule 05.07.2014    source източник


Отговори (2)


Изглежда, че groupCount би бил по-добър начин поради няколко причини:

  1. Ясно е - намерението ви да получите брой за всеки тип оценка е очевидно в кода, което прави четливостта приятна за вас и другите
  2. Това е доказателство за бъдещето - с други думи, ако кодирате твърдо has за всяко ниво на оценка (1,2,3 и т.н.), ако някога добавите друго ниво на оценка, ще трябва да се върнете и да добавите още едно преминаване на "броене".
  3. Мисля, че в крайна сметка може да се окаже по-ефективно за вас, тъй като заявката за върхове няма да помогне, защото така или иначе възнамерявате да итерирате всички testRate ръбове. Защо не го направите с едно обхождане.
person stephen mallette    schedule 07.07.2014
comment
където е groupCount метод в java API. Не можах да намеря никакъв groupCount метод в java API. - person Manish Kumar; 07.07.2014
comment
comment
направих това GremlinPipeline<Vertex,String> pipe = new GremlinPipeline<Vertex,String>(); pipe.start(v).in("testRate").property("testRating").groupCount(itemCount).iterate(); Iterator<String> iterator = itemCount.keySet().iterator(); while(iterator.hasNext()) { String next = iterator.next(); System.out.println(next+"-------"+itemCount.get(next)); } - person Manish Kumar; 07.07.2014
comment
просто се отпечатва null-------7 очаквах оценка на резултата, напр. testRating 1 броят е 3, така че трябва да показва 3 за testRating 1 - person Manish Kumar; 07.07.2014
comment
Обикновено получавате нула, когато testRating върне null. Премахнете groupCount и вижте какво се връща от стъпка property. Ако получавате нули, тогава groupCount го брои като такъв. - person stephen mallette; 07.07.2014
comment
отпечатването му null 7 пъти - person Manish Kumar; 07.07.2014
comment
кодът ви не трябва ли да е pipe.start(v).inE("testRate")? свойството testRate е на ръба, а не на върха, нали? - person stephen mallette; 07.07.2014
comment
да, testRate е на ръба - person Manish Kumar; 07.07.2014

Най-накрая това проработи:

  HashMap<Integer,Number>itemCount = new HashMap<Integer,Number>();
  GremlinPipeline<Vertex,Edge> pipe = new GremlinPipeline<Vertex,Edge>();
  pipe.start(v).inE("testRate").property("testRating").groupCount(itemCount).iterate();
  Iterator<Integer> iterator = itemCount.keySet().iterator(); 
  while(iterator.hasNext()) { 
      Integer next = iterator.next(); 
      System.out.println(next+"------"+itemCount.get(next));
  }
person Manish Kumar    schedule 09.07.2014