2013-12-13 77 views
0

這與提出的問題類似here正則表達式在標籤索引上的搜索(密碼)

我有一個可行的查詢:

match (n:Campus {name:'Georgia Southern University'}) return n; 

1排 38毫秒

不過,我建立一個搜索功能,我希望能夠有一個用戶類型「格魯吉亞「,並返回校園標籤索引中名爲」格魯吉亞「的節點列表。

此查詢不中的Neo4j社區-2.0.0工作(雖然它在-M05那樣):

match (n:Campus) where n.`name` =~ '(?i).*Georgia.*' return n; 

0行 29毫秒

  1. 是我表達不正確的?很可能,知道我的障礙 與正則表達式。
  2. 否則,是否可以在標籤索引上進行正則表達式搜索?

謝謝!

編輯:更多的信息,從Neo4j的殼輸出:

neo4j-sh (?)$ match (n:Campus {name:'Georgia Southern University'}) return n.name; 
+-------------------------------+ 
| n.name      | 
+-------------------------------+ 
| "Georgia Southern University" | 
| "Georgia Southern University" | 
+-------------------------------+ 
2 rows 
45 ms 
neo4j-sh (?)$ match (n:Campus) where n.`name` =~ '(?i).*Georgia.*' return n; 
+---+ 
| n | 
+---+ 
+---+ 
0 row 
10 ms 
+0

您也可以查看RC1發佈的博客帖子,其中包含有關手動升級過程的注意事項:http://blog.neo4j.org/2013/11/neo4j-200-rc1-final-preparations.html –

回答

2

試圖查詢在2.0.0-RC1和正常工作:

CREATE (n:Campus {name:'Georgia Southern University'}) RETURN n 
CREATE (n:Campus {name:'lil georgia'}) RETURN n 
CREATE (n:Campus {name:'CAP GEORGIA CAP'}) RETURN n 
CREATE (n:Campus {name:'East Georgia Tech'}) RETURN n 


MATCH (n:Campus) 
    WHERE n.`name` =~ '(?i).*georgia.*' 
    RETURN n  

... 

Returned 4 rows in 156 ms 
+0

感謝信息,@ cod3monk3y;我正在使用12/11/2013發佈的「穩定版」。也許我的索引有問題?有沒有辦法檢查索引?如果索引混亂了,我的第一個查詢會起作用嗎? – BZMac

+0

我看到你的新輸出。多麼奇怪!你在哪個平臺上?你能否創建一個新的數據庫並運行我上面列出的5條語句,看看它們是否可以在全新的環境中工作? – cod3monk3y

+0

我在Ubuntu 13.04上。我正在嘗試Debian軟件包的安裝。無法使其識別limits.conf設置。我會嘗試你的發言,看看發生了什麼。看到上面的代碼讓我意識到我只是使用標籤進行搜索,索引應該只是讓搜索更快。對? – BZMac

1

解決了,感謝@ cod3monk3y 。我正在將我的數據庫從neo4j-community-2.0.0-M05版本升級到新的穩定版本。上面的清潔數據庫測試讓我相信這是我的數據庫。顯然,啓動過程中的升級過程在標籤方面失敗。

如果我使用「rm -l」命令刪除標籤,然後使用「set」重新設置相同的標籤,則搜索起作用。

neo4j-sh (0)$ match (n:Campus {name: 'Boise State University'}) return id(n), n.name; 
+----------------------------------+ 
| id(n) | n.name     | 
+----------------------------------+ 
| 2772 | "Boise State University" | 
+----------------------------------+ 
1 row 
77 ms 
neo4j-sh (0)$ match (n:Campus) where n.`name` =~ '(?i).*Boise.*' return n; 
+---+ 
| n | 
+---+ 
+---+ 
0 row 
215 ms 
neo4j-sh (0)$ cd 2772 
neo4j-sh (Boise State University,2772)$ ls 
:Campus (plus a lot of other properties) 
neo4j-sh (Boise State University,2772)$ rm -l Campus 
neo4j-sh (Boise State University,2772)$ set -l Campus 
neo4j-sh (Boise State University,2772)$ match (n:Campus) where n.`name` =~ '(?i).*Boise.*' return n.`name`; 
+--------------------------+ 
| n.`name`     | 
+--------------------------+ 
| "Boise State University" | 
+--------------------------+ 
1 row 
72 ms 

我用下面以前的代碼首先設置了標籤(在_handle屬性是一個我設置爲組節點的標籤來之前約):

match n where n._handle='Campus' set n:Campus return Id(n), n.name, labels(n) order by Id(n); 

我只是修改它刪除舊標籤,然後重新設置它們。

+0

很高興有幫助。我對Neo4j相當陌生,所以我沒有經過升級階段,無法評論標籤/索引性能或未能正確升級。很高興看到您找到了適合您的解決方案。 (p.s.對我的回答加分會很好,雖然你的顯然是正確的解決方法。謝謝!) – cod3monk3y

+0

我會upvote你,但我還沒有15 +聲望呢。 :) – BZMac

+0

謝謝!歡迎來到StackOverflow! :d – cod3monk3y