如何找到使用Spring Data在节点上创建的索引的Neo4J索引键?

时间:2013-10-01 18:01:26

标签: neo4j spring-data-neo4j

我使用Spring使用以下基本过程创建节点(见下文)。我有一个POJO用于​​我的Concepts并使用这个对象和一个Neo4J模板来创建带索引的节点。我仍然无法发现创建索引的'KEY'是什么。我知道索引的名称是'CID',但假设'KEY'将是'conceptId'。但是,当我使用以下查询(见下文)时,不会返回任何数据。确认索引确实存在,但我无法找出所述索引的正确'KEY'是什么,所以我可以利用它来提高查询性能。我能够使用WHERE子句查询指定节点,搜索所述节点的属性的特定值。但是,当我尝试使用带有'conceptId'的索引'CID'来查找节点时,不会返回任何节点。

// Concept POJO

    @NodeEntity
    public class Concept {

    @GraphId
    private Long nodeId;
    @Indexed(indexName="CID", fieldName="conceptId")
    private Long conceptId;

...

// service where code to create Concept Nodes exists

    @Repository
    public class ConceptService {

    @Autowired
    private Neo4jTemplate n4jTemplate;
    @Autowired
    private ConceptRepository cr;

// Call to create node in a 'service'

     public void addConceptNode(Concept concept) {

             concept = n4jTemplate.save(concept);
    }

...

//Cypher Queries used to retrieve nodes using index
START a=node:CID( conceptId = "66573009")
RETURN a;
// this returns 0 nodes quickly

START a=node:CID( conceptid = "66573009")
RETURN a;
// this returns 0 nodes quickly

START a=node:CID( CID = "66573009")
RETURN a;
// this returns 0 nodes quickly

START a=node:CID( cid = "66573009")
RETURN a;
// this returns 0 nodes quickly

START a=node:CID( CONCEPTID = "66573009")
RETURN a;
// this returns 0 nodes quickly

// Cypher query not using index to retrieve same node
START a=node(*)
WHERE HAS(a.conceptId) AND a.conceptId = 66573009
RETURN a;
// this returns 1 node in 77365ms

//'quickly' = approx.(43-87ms).  

代码中显示的内容多于显示的内容,但这为您提供了如何在Neo4J DB中使用索引创建节点的基本要点。有更多属性和更多索引。使用Spring检索节点时,似乎“自动”使用(假设它正在使用索引)索引创建,因为它比使用Neo4J数据浏览器更快地返回结果。

非常感谢任何帮助。 谢谢!

0 个答案:

没有答案