如何用Neo4j全文检索(FTS)获取匹配多关键词的公共BOX节点?
问题解决方案
直接通过FTS语法实现(无需调整索引)
绝大多数FTS引擎都支持逻辑与查询,你只需要在查询语句里用AND连接两个关键词,就能精准匹配同时包含"home"和"house"的TRANSLATION节点,再关联到对应的BOX节点。
举个SQL示例(适配常见的FTS实现):
SELECT DISTINCT b.* FROM BOX b JOIN TRANSLATION t ON b.id = t.box_id WHERE t.text MATCH 'home AND house';
这个查询会直接返回关联的TRANSLATION同时包含两个关键词的BOX节点(即b1),自动排除仅含"house"的b2。
索引调整说明
不需要调整已有的FTS索引,只要你的索引是基于TRANSLATION的text属性创建的,就完全支持这种多关键词逻辑与查询。
多次FTS调用取交集的可行性
这种方式是可行的,但属于冗余操作。比如先查询所有关联含"home"的TRANSLATION的BOX ID,再查询关联含"house"的TRANSLATION的BOX ID,最后取两个ID集合的交集,结果和直接查询一致,但会额外增加两次查询和集合运算的开销,效率远不如一次直接查询。
内容的提问来源于stack exchange,提问作者Hey
相关产品推荐
相关产品推荐

