2012-04-16 6 views
0

У меня есть график в Neo4j, в котором узлы представляют собой случайные точки в плоскости, причем каждый узел имеет координаты, хранящиеся как свойства (x и y, тип значения is double).
создать узлы и индексировать их:Запросы Neo4j и Lucene multikey (или: следует ли использовать Cypher?)

IndexManager index = graph.index(); 
    Index<Node> nodesIndex = index.forNodes("points"); 

    for (int i = 0; i < points.length; i++) { 
     Point p = points[i]; 
     Node n; 

     Transaction tx = graph.beginTx(); 
     try { 
      n = graph.createNode(); 
      n.setProperty("x", p.getX()); 
      n.setProperty("y", p.getY()); 

      nodesIndex.add(n, "x", new ValueContext(p.getX()).indexNumeric()); 
      nodesIndex.add(n, "y", new ValueContext(p.getY()).indexNumeric()); 

      tx.success(); 
     } finally { 
      tx.finish(); 
     } 
    } 

Теперь, что мне нужно сделать, это запрос для узлов, которые находятся в квадратной области. Так, например, я сделал этот запрос:

http://localhost:7474/db/data/index/node/points?query=x:[0.0 TO 3.0] AND y:[0.0 TO 3.0] 

И это ответ:

Node 
    Properties 
    y 1.0 
    x 14.0 
    Node info 
    self /db/data/node/10 

    Node 
    Properties 
    y 1.0 
    x 2.0 
    Node info 
    self /db/data/node/7 

    Node 
    Properties 
    y 1.0 
    x 6.0 
    Node info 
    self /db/data/node/8 

    Node 
    Properties 
    y 1.0 
    x 7.0 
    Node info 
    self /db/data/node/9 

[Etc...] 

Как вы видите, это не работает. И я не понимаю, почему (может быть, мне нужно настроить индекс?).
Обратите внимание, что у меня нет , получил, чтобы использовать Lucene. Если есть способ собрать эту информацию с Cypher (начиная с узла, центрированного в квадратной области), было бы действительно лучше, так как мне также нужны отношения между найденными узлами.

Дополнительная информация Если это имеет значение, график представляет собой triangolation Делоне на случайном множестве точек на плоскости. В более абстрактных терминах мне нужно «извлечь» весь подграф, который лежит в данной области.

Любая помощь действительно оценена!

ответ

0

Боюсь, вы не сможете сделать это через Cypher. Ни в коем случае Cypher не может сделать вывод о том, что вы хотите использовать числовой контекст Value для этого запроса (возможно, это может быть в некоторой метаинформации индексирования в будущих версиях), и вам нужно это, чтобы иметь возможность запрашивать Lucene так, как вы хотите. Самый простой способ использования REST, вероятно, использовать Groovy, см. Пользовательскую сортировку (та же проблема) в http://docs.neo4j.org/chunked/snapshot/gremlin-plugin.html#rest-api-send-an-arbitrary-groovy-script---lucene-sorting

+0

Хорошо, но почему запрос lucene не работает? – Metz

Смежные вопросы