【问题标题】:neo4j.rb: How can I implement text searches using neo4j.rb?neo4j.rb:如何使用 neo4j.rb 实现文本搜索?
【发布时间】:2014-12-20 12:18:19
【问题描述】:

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

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

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

提前致谢。

【问题讨论】:

    标签: indexing lucene neo4j full-text-search neo4j.rb


    【解决方案1】:

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

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

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

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

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

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

    编辑:我在文档中添加了this

    【讨论】:

    • 想指出我尝试以“Hey Jake”开头,但 StackOverflow 认为我们都将自己呈现为没有灵魂的机器人很重要,因此它编辑了我的帖子。
    • 您好,感谢您的详细帖子!正如您所建议的那样,我最终使用了searchkick,并且效果很好。很高兴在 neo4j.rb wiki 中看到这一点,感谢您为该 gem 所做的所有努力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    相关资源
    最近更新 更多