Lucene,Elasticsearch:分面搜索,全文搜索,太棒了!
Neo4j,也许泰坦:图搜索真棒!
但是,对于结合了facet,全文和图形的查询,有哪些好的策略?我不想实现图形搜索结果并将其转换为分面/全文查询。如何结合这些世界?
以下是一个例子:
现在我们想进行如下查询:
你可以在Lucene中建模图形,但这似乎是一个很大的不起作用。 (证明我错了!)
您可以向Neo4j添加构面,但这似乎是一个性能上的危险,它只是没有优化。 (但也许你有不同的经历。)
也许这个问题有一个金色的子弹。
答案 0 :(得分:1)
嗯,不出所料,这取决于。抱歉,如果这是一个有点通用的答案,但如果没有更多关于挑战性质的具体细节,它可能是最好的。
您需要首先概述查询用例的内容以及关联的数据量。如果这是一个vanilla数据库并且我们试图优化您的查询以使其尽可能快,我们首先尝试确定您的查询的哪些部分是最具选择性的。然后我们首先将这些推送到执行,留下查询的较少选择性位以便稍后执行。这样做的好处是可以快速减少我们正在处理的潜在结果的数量。
因此,我们要求您进行分面搜索,全文搜索和图搜索。如果您可以查看您的数据以及您正在寻找的各种方面/文本/图形模式,通常首先要做最独特/最有选择性的事情。
就lucene中的图形建模而言,我认为这可能有效,但前提是分面搜索位是你最需要的,并且图形位是相当原始的。使用lucene中最短路径之类的东西听起来很痛苦(尽管我早已学会不要声称事情是不可能的,因为如果你有足够的时间,几乎没有什么是不可能的)
杂交也是可能的(即在neo4j中不使用lucene,但是单独使用它们并将它们相互连接)。我毫不犹豫地建议没有更多细节,因为它是一种强大的(但复杂且昂贵的)方式。