我使用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数据浏览器更快地返回结果。
非常感谢任何帮助。 谢谢!