图,方面,全文:最好的世界?

时间:2014-12-11 21:51:55

标签: elasticsearch lucene neo4j graph-databases faceted-search

Lucene,Elasticsearch:分面搜索,全文搜索,太棒了!

Neo4j,也许泰坦:图搜索真棒!

但是,对于结合了facet,全文和图形的查询,有哪些好的策略?我不想实现图形搜索结果并将其转换为分面/全文查询。如何结合这些世界?


以下是一个例子:

  • 分面 - 我们的“项目”包含修改日期状态项目类型等方面(还有更多;虽然这些项目的字段/方面甚至可以配置,但合理的,平均将有大约20个方面。
  • 图表 - 这些“项目”彼此相关(我们谈论很多关于“上游”和“下游”项目/关系),它们以各种方式与用户相关,他们有相关评论(反过来会有更多用户关联)。

现在我们想进行如下查询:

  • 向我显示 x 的所有“项目”,这些项目远离给定的项目列表(图形关注点),状态为 - 和 - 这样并且在过去30天内被修改(分面关注)。
  • 向我显示连接到给定“项目”的所有用户,这意味着他们对给定项目进行了修改或评论,或者直到 x 的任何相关项目都远离给定项目项目,前提是这些相关项目处于特定状态,并在修改给定项目后进行修改。

你可以在Lucene中建模图形,但这似乎是一个很大的不起作用。 (证明我错了!)

您可以向Neo4j添加构面,但这似乎是一个性能上的危险,它只是没有优化。 (但也许你有不同的经历。)

也许这个问题有一个金色的子弹。

1 个答案:

答案 0 :(得分:1)

嗯,不出所料,这取决于。抱歉,如果这是一个有点通用的答案,但如果没有更多关于挑战性质的具体细节,它可能是最好的。

您需要首先概述查询用例的内容以及关联的数据量。如果这是一个vanilla数据库并且我们试图优化您的查询以使其尽可能快,我们首先尝试确定您的查询的哪些部分是最具选择性的。然后我们首先将这些推送到执行,留下查询的较少选择性位以便稍后执行。这样做的好处是可以快速减少我们正在处理的潜在结果的数量。

因此,我们要求您进行分面搜索,全文搜索和图搜索。如果您可以查看您的数据以及您正在寻找的各种方面/文本/图形模式,通常首先要做最独特/最有选择性的事情。

就lucene中的图形建模而言,我认为这可能有效,但前提是分面搜索位是你最需要的,并且图形位是相当原始的。使用lucene中最短路径之类的东西听起来很痛苦(尽管我早已学会不要声称事情是不可能的,因为如果你有足够的时间,几乎没有什么是不可能的)

杂交也是可能的(即在neo4j中不使用lucene,但是单独使用它们并将它们相互连接)。我毫不犹豫地建议没有更多细节,因为它是一种强大的(但复杂且昂贵的)方式。