Indexing 如何在cypher中同时使用节点和关系自动索引?

Indexing 如何在cypher中同时使用节点和关系自动索引?,indexing,neo4j,cypher,Indexing,Neo4j,Cypher,我有个问题,你能帮我吗 在我真正的neo4j2.1.3中,有hurge节点和关系。所以我必须使用自动索引来提高性能 例如:节点自动索引的属性键“person\u name”、“hotel\u name”。关系自动索引的“inTime” 然后,我创建数据: create (:Person {person_name:'p1'}) create (:Person {person_name:'p2'}) create (:Hotel {hotel_name:'h1'} ) create (:Hotel

我有个问题,你能帮我吗

在我真正的neo4j2.1.3中,有hurge节点和关系。所以我必须使用自动索引来提高性能

例如:节点自动索引的属性键“person\u name”、“hotel\u name”。关系自动索引的“inTime”

然后,我创建数据:

create (:Person {person_name:'p1'})
create (:Person {person_name:'p2'})
create (:Hotel {hotel_name:'h1'} )
create (:Hotel {hotel_name:'h2'} )

start p=node:node_auto_index('person_name:p1'),h=node:node_auto_index('hotel_name:h1')
create (p)-[:STAY_IN {inTime:'20140520'}]->(h)

start p=node:node_auto_index('person_name:p1'),h=node:node_auto_index('hotel_name:h2')
create (p)-[:STAY_IN {inTime:'20140522'}]->(h)

start p=node:node_auto_index('person_name:p2'),h=node:node_auto_index('hotel_name:h1')
create (p)-[:STAY_IN {inTime:'20140510'}]->(h)
接下来,我输入这个密码:

start p=node:node_auto_index('person_name:p1'),
      r=relationship:relationship_auto_index('inTime:[20140501 TO 20140530]')  
match (p)-[r]-(h) return p,r,h
我只想检索“p1”保持的关系。但是上面的密码返回p1和p2的关系。为什么?


任何帮助都将不胜感激。

对于这种用例,我根本不使用自动索引,我也不认为需要为关系编制索引。您想要回答的问题是BasicCall“在t_min到t_max的时间范围内,给我p1在任何酒店的住宿情况?”

创建架构索引以快速查找起始点,即相关人员:

CREATE INDEX ON :Person(person_name)
您的查询如下所示:

MATCH (p1:Person {person_name:"p1"})-[stay:STAY_IN]->(hotel)
WHERE stay.inTime>=t_min AND stay.inTime<=t_max
RETURN stay, hotel
MATCH(p1:Person{Person_name:“p1”})-[stay:stay_IN]->(酒店)

WHERE stay.inTime>=t_min AND stay.inTimeHi,@Stefan Armbruster,谢谢你的回复。你明白我说的了。但我的情况并非如此简单。我尝试了模式索引。但它不支持范围查询。它不支持模糊搜索。它只能用于完全匹配。例如:如果我为属性键“person\u name”和“person\u birth”创建了两个索引:在:person(person\u name)上创建索引在:person(person\u birth)上创建索引如果我键入以下查询:match(p:person),其中p.person\u name='Mike*'返回p match(p:person)在P.MexPoalSooth>“19800501”返回P时,模式索引将不起作用。让我们回到前面的问题,在我的实际情况下,考虑一下:如果NeN4J DB中有Melon人节点,并且每个节点也有Melon关系。那我该怎么办?再次感谢您的帮助。我确信,如果您将日期保存为整数而不是字符串,您可以使用范围执行匹配,它将使用索引<代码>匹配(p:Person),其中p.Person\u生日>19800501返回p
。就模糊搜索而言,我通常建议使用Elasticsearch。它将做得更好,让Neo4j做它最擅长的事情。在这种情况下,您需要使用自动索引。谢谢@不久前,我做了一个测试:match(p:Person),其中p.Person_birth>19800501205000返回p在neo4j中有500万个节点。密码跑得太慢了。另外,如果我在WHERE子句中使用OR,模式索引将不起作用:match(p:Person),其中p.Person_birth=19800501205000或p.Person_name='Mike Toms'返回p模式索引有许多限制,因此我必须使用自动索引。