gpt4 book ai didi

Mongodb 文本索引 - 更好的评分?

转载 作者:可可西里 更新时间:2023-11-01 10:13:41 33 4
gpt4 key购买 nike

我在 MongoDB 中有一个索引,其中包含姓名和电子邮件。这行得通,我可以通过以下方式查询:

const c = await Contact.
find({ $text: { $search: search } }, { score: { $meta: "textScore" } })
.sort({ score: { $meta: "textScore" } })
.skip(skip)
.limit(20);

但是,结果有些奇怪,但合乎逻辑。

例如

如果我搜索“Roger Johan”它将开始列出名为 Roger 和 Johan 的两个人,这是合乎逻辑的。但是,如果将 “Roger Johansson” 排名最高,那就不会那么奇怪了,因为这是 RogerJohan 的比赛%

有什么办法可以调整吗?

我知道我可以对部分进行正则表达式匹配,但在以下情况下会失败:数据:Roger T. Johansson查询:罗杰约翰逊

是否有什么花哨的技巧可以将这两个选项的一部分结合起来?

最佳答案

如果您应用短语搜索,它将能够找到 Roger Johan,但如果您尝试搜索 Rog,它将无法工作约翰

为了使其与第一个单词的部分匹配一起工作,我们创建了带有单词前缀的附加字段,例如["Rog", "Roge"] 并将此字段包含在文本索引中。

实现该搜索将能够找到对 RogRoger Johan 的搜索。

如果您需要搜索姓氏Johan,您还可以包括另一个带有前缀["Joh", "Joha", "Johan", "Johans", "Johanss", "Johansso"] 并赋予它较低(或较高,取决于您希望结果如何显示)的排名。或者,如果排名应该相同,您可以将所有前缀包含到同一数组属性中。

明确一点,您确实需要使用短语搜索,即:"\"Roger Johan"\"

关于Mongodb 文本索引 - 更好的评分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47697107/

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