0

我使用 Spring 使用以下基本过程创建了节点(见下文)。我的概念有一个 POJO,并使用这个对象和一个 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 数据浏览器更快地返回结果。

任何帮助将不胜感激。谢谢!

4

0 回答 0