首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Neo4j中的多级全文搜索

Neo4j中的多级全文搜索
EN

Stack Overflow用户
提问于 2021-04-10 11:15:25
回答 1查看 107关注 0票数 0

当我在索引上调用db.index.fulltext.queryNodes()时,我可以对结果运行另一个全文查询吗?我需要搜索我的数据库中的7-8个不同的属性跨越不同的标签与每个属性的不同搜索参数。我该怎么做呢?如果我使用reduce()函数或apoc.coll.intersection并尝试获得一个交集,例如...

代码语言:javascript
复制
CALL db.index.fulltext.queryNodes("first_name", "manas~") 
YIELD node as first_names
WITH collect(first_names) as first_name_list
CALL db.index.fulltext.queryNodes("aliases", "boncha~") 
YIELD node as aliases
WITH collect(aliases) as alias_list,first_name_list
RETURN apoc.coll.intersection(first_name_list, alias_list) AS output
LIMIT 5

这不会导致内存膨胀吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-12 03:07:10

如果使用Neo4j 4.1+,最好使用subqueries

代码语言:javascript
复制
CALL {
    CALL db.index.fulltext.queryNodes("first_name", "manas~") 
    YIELD node, score
    RETURN node, score

    UNION ALL
    CALL db.index.fulltext.queryNodes("aliases", "boncha~") 
    YIELD node, score
    RETURN node, score
}
RETURN node, sum(score) AS totalScore
ORDER BY totalScore DESC

对于交叉点,您可以计算每个节点有多少个匹配,因此如果它们在两个查询中匹配,则将计数为2:

代码语言:javascript
复制
CALL {
    CALL db.index.fulltext.queryNodes("first_name", "manas~") 
    YIELD node, score
    RETURN node, score

    UNION ALL
    CALL db.index.fulltext.queryNodes("aliases", "boncha~") 
    YIELD node, score
    RETURN node, score
}
WITH node, count(*) AS matches, sum(score) AS totalScore
WITH node, matches, totalScore
WHERE matches = 2
ORDER BY totalScore DESC
RETURN node, totalScore
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67030472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档