Neo4j: использование индекса в операторе шифрования

Я изо всех сил пытаюсь использовать индексы в шифровании.

После создания и индексации узлов в java у меня все в порядке с выполнением шифровальных запросов на этих узлах. Я также могу запрашивать эти узлы, используя созданный индекс в java.

Однако, когда я вызываю индекс в операторе шифрования, я получаю исключение MissingIndexException.

Итак, почему шифр не может найти индекс? Должен ли я создавать отдельный шифровальный индекс? (ничего по этому поводу не нашел)

Я использую версию 1.8.2 Вот что я сделал:

public class IndexTester {

String DB_PATH = "target/java-query-db";
String resultString ="";

GraphDatabaseService db = new GraphDatabaseFactory().newEmbeddedDatabase( DB_PATH );
ExecutionEngine engine = new ExecutionEngine( db );

IndexManager index = db.index();
Index<Node> personIndex;

Node n;
Node n1;

public static void main( String[] args )
{
    IndexTester indexTester = new IndexTester();
    indexTester.runIndex();
 }


public void runIndex(){

    Transaction tx = db.beginTx();
  try
  {

      personIndex = index.forNodes( "person" );

        n = createAndIndexNode("type", "adult", personIndex, db);         
        addPropertyAndIndexNode("name", "John", personIndex, n);
        addPropertyAndIndexNode("id", "1", personIndex, n);


        n1 = createAndIndexNode("type", "adult", personIndex, db);        
        addPropertyAndIndexNode("name", "Jane", personIndex, n1);
        addPropertyAndIndexNode("id", "2", personIndex, n1);

//Это отлично работает!!

            Node foundNode = personIndex.get("name", "John").getSingle();
        System.out.println("Found Node: " + foundNode.getProperty("name"));

//Это вызывает исключение MissingIndexException

            resultString = engine.execute( "start m=node:personIndex(name= 'John')  return m" ).toString();
            System.out.println(resultString);

      n.delete();
      n1.delete();

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


}

private Node createAndIndexNode(final String property, final String name, Index<Node> nodeIndex, GraphDatabaseService db ) {
    Node node = db.createNode();
    node.setProperty(property , name);
    nodeIndex.add(node, property, name);
    return node;
}

    public Node addPropertyAndIndexNode(String property, String name, Index<Node> nodeIndex, Node node)
    {
          node.setProperty( property, name );
          nodeIndex.add( node, property, node.getProperty( property ) );
          return node;
    }

}

Любые идеи/предложения, как решить эту проблему? Спасибо!!


person Nacho Lobo    schedule 30.03.2013    source источник


Ответы (1)


Я думаю, что фактическое имя вашего индекса просто person (как указано здесь: index.forNodes( "person" );), а не personIndex.

Пытаться:

start m=node:person(name= 'John')  return m
person Eve Freeman    schedule 30.03.2013