Титан: Считай край с разными свойствами

    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() метод гремлина. Это то, что мне нужно, есть ли такой же способ и в 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
yah 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