gpt4 book ai didi

java - Neo4j - 搜索用户时根据适用性评分

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:41:43 25 4
gpt4 key购买 nike

我需要根据名字和姓氏在我的 neo4j 数据库中搜索用户。查询结果应按与搜索查询匹配的程度排序。我们希望搜索输入是两个词(名字/姓氏或姓氏/名字)。

到目前为止,我们一直在使用的查询搜索包含名字的用户,然后使用 UNION ALL 再次匹配包含姓氏的用户。假设搜索输入是“first last”。所以我们的查询是:

MATCH (u:User) WHERE u.first_name =~'(?i).*first.*' RETURN u
UNION ALL u.last_name =~'(?i).*last.*' return u
UNION ALL u.first_name =~'(?i).*last.*' RETURN u
UNION ALL u.last_name =~'(?i).*first.*' return u

因此具有搜索输入的名字和姓氏的用户将在查询结果中出现两次。然后在java后台我们统计每个用户出现了多少次(每个用户都有唯一的用户名)然后排序。

我想避免在 java 后端进行排序和计数,并尽可能使用单个查询。

如有任何帮助,我们将不胜感激。谢谢。

最佳答案

对于类似文本的搜索查询,密码可能不是您想要的方式。 Neo4j 实际上支持由 Apache Lucene 实现的遗留索引,我向您推荐这些索引,因为它适用于文本索引。 Lucene 甚至为您提供了丰富的查询语言来改进您的搜索。

如果你尝试走密码路线,你最终会写很多复杂的后端代码,而且你的匹配仍然相当幼稚;在此示例中,您仍然需要对姓氏和名字进行字符对字符的匹配,并且关闭的拼写错误不会找到匹配项。

Documentation for legacy indexing starts here .请务必阅读“评分”子页面,因为最后,我认为这就是您想要的。还要确保检查 extra features for lucene indexing因为它将开始向您展示您可以使用 Lucene 做的更酷的事情(例如复合查询),而这些事情通过 cypher 是不可能的。

好消息是 neo4j 可以做到这一点,而且效果非常好。坏消息是,其中一些内容只能通过 java API 获得,而您不能像您提供的示例所假设的那样直接从 cypher 执行。

关于java - Neo4j - 搜索用户时根据适用性评分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36258870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com