我使用neo4j.rb作为Rails应用程序的ORM,使用一个简单的neo4j模式。我有一堆Person
节点,每个节点有两个字段name
和bio
。
我的目标是能够(a)使用不区分大小写的模糊名称搜索来搜索人员;(b) 能够对简历进行全文搜索。
我对neo4j中的索引/搜索工作方式感到非常困惑。我不确定我是否完全理解"schema"one_answers"legacy"索引之间的区别,也不确定Lucene是如何适应这一切的。最重要的是,我不明白neo4j.rb到底支持哪些功能。
提前谢谢。
我是Neo4jrb项目的维护人员之一。索引对每个人来说都很困惑,但我可以很容易地为你分解。
gem根本不处理遗留索引。"legacy"的名称向我们表明,它不会永远存在,再加上使用起来有点笨重,我们决定不实现它。gem中的所有内容都使用标签和属性索引,这些都是Lucene的精确索引。
在搜索方面,如果你想要不区分大小写和/或全文搜索,你可以在Cypher和gem中这样做,但它将在索引之外工作,而且可能会很慢。这完全取决于你的数据。这将向您展示如何使用Cypher执行regex。在宝石中,你可以这样做:
User.where(name: /?ob/)
# or
User.as(:u).where("u.name =~ '?ob`")
我个人的建议是使用Searchkickgem来提供这些功能。它使用Elasticsearch,它使用Lucene,这就是Neo4j使用的原因,因此您将获得与传统索引相同的控制和性能。缺点是你的设置还有一个移动部分,但我认为这是值得的
希望这能澄清问题。我将在wiki中添加一个关于它的区域,因为这是一个非常常见的问题。在这里发帖,在Github上打开一个问题,或者如果你想谈论更多,给我发一封电子邮件。
编辑:我把这个添加到文档中了。