正则表达式搜索标签索引(密码)

时间:2013-12-13 00:25:39

标签: indexing neo4j label cypher

这类似于here提出的问题。

我的查询有效:

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

1排 38毫秒

但是,我正在建立一个搜索功能,我希望能够拥有一个用户类型“georgia”并从Campus标签索引返回一个节点列表,其名称类似于“Georgia”。

此查询在neo4j-community-2.0.0中不起作用(虽然它在-M05中完成):

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

0行 29毫秒

  1. 我的表情不正确吗?很可能,知道我的差点 与正则表达式。
  2. 否则,是否可以对标签索引进行正则表达式搜索?
  3. 谢谢!

    编辑:更多信息,来自neo4j-shell的输出:

    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
    

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);

我只是修改它以删除旧标签,然后重新设置它们。