1

我使用 neo4j.rb 作为 Rails 应用程序的 ORM,与一个简单的 neo4j 模式对话。我有一堆Person节点,每个节点都有两个字段namebio.

我的目标是能够(a)使用不区分大小写的模糊名称搜索来搜索人;(b) 能够对简历进行全文搜索。

我对 neo4j 中的索引/搜索如何工作感到非常困惑。不确定我是否完全理解“模式”和“传统”索引之间的区别,或者 Lucene 如何适应所有这些。最重要的是,我不明白 neo4j.rb 实际支持哪些功能。

提前致谢。

4

1 回答 1

2

我是 Neo4jrb 项目的维护者之一。索引对每个人来说都很令人困惑,但我可以很容易地为你分解它。

gem 根本不处理遗留索引。“遗留”的名称向我们表明,它不会永远存在,再加上它使用起来有点笨拙,导致我们决定不实施它。gem 中的所有内容都使用标签和属性索引,它们都是 Lucene 精确索引。

在搜索方面,如果您想要不区分大小写和/或全文搜索,您可以在 Cypher 和 gem 中执行此操作,但它会在索引之外工作,并且可能会很慢。这一切都取决于您的数据。向您展示了如何使用 Cypher 进行正则表达式。在 gem 中,你可以这样做:

User.where(name: /?ob/)
# or
User.as(:u).where("u.name =~ '?ob`")

我个人的建议是使用 Searchkick gem 来提供这些功能。它使用 Elasticsearch,后者使用 Lucene,而这正是 Neo4j 所使用,因此您将获得更多的控制权和与传统索引相同的性能。缺点是你的设置还有一个移动部分,但我认为这是值得的。

希望这可以清除它。我将在 wiki 中添加一个关于它的区域,因为这是一个非常常见的问题。在这里发帖,在 Github 上打开一个问题,或者如果你想更多地谈论它,或者给我发一封电子邮件。

编辑:我将此添加到文档中。

于 2014-10-24T21:54:18.233 回答