【问题标题】:How lucene works with Neo4jlucene 如何与 Neo4j 一起工作
【发布时间】:2014-12-03 02:05:59
【问题描述】:

我是 Neo4jSolr/Lucene 的新手。我读过我们可以在 Neo4j 中使用 lucene 查询,这是如何工作的? Neo4j中使用lucene查询有什么用?

我还需要一个建议。我需要编写一个应用程序来搜索和分析数据。 which might help me Neo4j Or Solr?

【问题讨论】:

  • 也许你应该更多地解释你的具体用例。你真正想达到什么目标?
  • 好的,我有员工的信息 - 他的姓名、家庭地址、公司地址、公司名称、电话号码等。该应用程序为您提供了一个搜索页面,您可以在其中搜索不同的条件,如姓名/ (h/c)address,结果是与搜索条件匹配的员工,并且与搜索条件相关的员工(例如:取决于地址或..)分数应该适合排序结果。

标签: solr lucene neo4j


【解决方案1】:

Neo4J 使用 lucene 作为其legacy indexing 的一部分。目前,Neo4J 支持多种索引,比如在节点上创建标签,在节点属性上创建索引。

但在 neo4j 支持这些新功能之前,它主要(并且仍然)使用 Lucene 进行索引。大多数开发人员会在特定节点属性上创建 lucene 索引,以使他们能够使用 lucene 的查询语法在密码查询中查找节点。

例如,如果您created an index according to the documentation,则可以在索引中搜索特定值,如下所示:

IndexHits<Node> hits = actors.get( "name", "Keanu Reeves" );
Node reeves = hits.getSingle();

实际上是 lucene 在幕后做出了这一发现。

在 cypher 中,它可能如下所示:

start n=node:node_auto_index('name:M* OR name:N*')
return n;

在这种情况下,您正在为所有具有以“M”或“N”开头的名称属性的节点搜索特定索引。该单引号表达式的内容只是根据the lucene query syntax 进行的查询。

好的,这就是 Neo4J 使用 lucene 的方式。在最近的版本中,我只将这些“遗留索引”用于全文索引,这正是 lucene 的优势所在。如果我只想快速进行相等检查(其中 name="Neo"),那么我使用 regular neo4j schema indexes

至于 Solr,我还没有看到它与 neo4j 一起使用——也许有人会跳进来提供一个反例,但通常我认为 Solr 运行在一个大的 lucene 索引之上,并且在Neo4j 的情况,它在中间,我不确定运行 Solr 是否合适。

至于您需要编写应用程序来搜索和分析数据,我无法给您推荐 - Neo4J 或 Solr 可能会有所帮助,具体取决于您的应用程序和您想要做什么。一般来说,当您需要表达和搜索图形时,请使用 neo4j。当您需要组织和搜索大量文本文档时,请多使用 Solr。

【讨论】:

  • 我的印象是它仍然在底层使用 Lucene 进行现代索引,它只是为用户处理所有索引创建/删除和查询?
  • 哪个更高效/更快?是通过创建 lucene 索引(遗留索引)还是通过模式(在节点上)?
  • “旧版索引”是旧版。如果您需要相等比较,请使用我提到的模式索引。它们更快,因为我相信当密码查询构建计划时,它会根据模式索引变得更有选择性,而不是使用 lucene 索引。现在,话虽如此,如果您需要全文,neo4j 不提供另一种选择——因此您应该坚持使用 Lucene 索引,恕我直言。 tl;dr 这取决于你想做什么。
  • 谢谢,对我很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-02
  • 1970-01-01
  • 2016-10-02
  • 2013-05-10
  • 2020-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多