我在用 PHP 构建的社区电子商务中使用 Neo4j 并使用 REST 接口。
我需要获取与亚马逊等搜索结果相关的所有类别。此功能在其他引擎中可用,例如 Solr(Lucene 的另一种实现)作为Faceted Search
如何在 Neo4j 中进行分面搜索?或重新创建此功能的最佳方式(性能等级)是什么?
neo4j 的核心包中排除了与此功能相关的所有必需模块。我想知道是否有人尝试在不横向所有节点的情况下做这样的事情,获取一些属性,并对这些值进行 groupCount。如果我们有 200k 个节点,则横向需要 10 秒才能获得类别。
这是我的 Gremlin 方法。
(new Neo4jVertexSequence(
g.getRawGraph().index().forNodes('products').query(
new org.neo4j.index.lucene.QueryContext('category:?')
), g
))._().groupBy{it.category}.cap.next();
结果为 90 行,耗时 54 秒。
Books = 12002
Movies_Music_Games = 19233
Electronics_Computers = 60540
Home_Garden_Tools = 9123
Grocery_Health_Beauty = 15643
Toys_Kids_Baby = 15099
Clothing_Shoes_Jewelry = 12543
Sports_Outdoors = 10342
Automotive_Industrial = 9638
... (more rows)
当然,我不能把这个结果放在缓存中,因为这是“非输入搜索”。如果用户进行像“Iphone”这样的查询,查询看起来像
(new Neo4jVertexSequence(
g.getRawGraph().index().forNodes('products').query(
new org.neo4j.index.lucene.QueryContext('search:"iphone" AND category:?')
), g
))._().groupBy{it.category}.cap.next();