2017-01-04 176 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;