2017-01-04 145 views
1

我对使用neo4j的全文搜索有疑问。遵循网页中的说明,我启用了全文搜索。全文搜索Neo4j

Full Text Search Guide

CREATE(P:将{名称: “芝加哥”})

1) Run the command: START n=node:node_auto_index("name:*C*") RETURN n; 
Result: 
+------------------------------+ 
| n       | 
+------------------------------+ 
| Node[65263]{name:"Chicago"} | 
+------------------------------+ 
1 rows 

2) Run the command: START n=node:node_auto_index("name:Chicago") RETURN n; 
Result: 
+---+ 
| n | 
+---+ 
+---+ 
0 row 

3) START n=node:node_auto_index("name=Chicago") RETURN n; 
Result: 
null 

我的问题是:如何可以修改搜索(2)START N =节点:node_auto_index(“名:芝加哥“)RETURN n;给结果芝加哥

此外,我们是否不在命令中指定字段名称(即搜索所有节点中包含“芝加哥”关键字的所有字段)?

谢谢。

回答

0

您可以使用模式索引进行精确匹配。

CREATE INDEX ON :Place(name)

欲了解更多信息请参阅 http://neo4j.com/docs/developer-manual/current/cypher/schema/index/

如果由于某种原因,仍然需要做精确匹配试试这个语法:

START n=node:node_auto_index(name="Chicago") RETURN n;

+0

对不起,仍然不能有结果,当运行此语法 START n = node:node_auto_index(name =“Chicago”)RETURN n; 即使我运行这个也没有结果(即搜索以C开头的单词) START n = node:node_auto_index(“name: C *“)RETURN n; – anthonywong

+0

'index --get-config node_auto_index'命令的输出是什么(在neo4j-shell中)?在添加数据后是否创建了索引?您可能需要重新索引属性,例如。由MATCH(p:Place)WHERE EXISTS(p.name)SET p.name = p.name'。 –

+0

谢谢,它可以搜索重新索引后的确切单词。但是,它仍然无法搜索以Ch开头的单词(即START n = node:node_auto_index(“name:ch *”)RETURN n;)。或者我应该使用“开始”语法呢? – anthonywong

0

你可以尝试像这个 ?精确匹配Chicago - START n = node:node_auto_index('(name:(Chicago))')RETURN n;

如同名称属性含有芝加哥所有节点 - START N =节点:node_auto_index( '(名称:(芝加哥)')RETURN N;