MongoDB文本索引 - 更好得分



我在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" 最高,那将是不那么奇怪%

有什么办法可以调整这个?

我知道我可以局部匹配,但这会失败:数据:Roger T. Johansson查询:罗杰·约翰逊

是否有任何花哨的技巧可以组合这两个选项的一部分?

如果通过短语应用搜索,它将能够找到 Roger Johan ,但是如果您尝试搜索 ROG,它将无法使用 Johan

为了使其与第一个单词的部分匹配使用,我们创建了其他字段,并使用该单词的前缀为I.G.["Rog", "Roge"]并将此字段包括在文本索引中。

拥有该实施的搜索将能够找到 ROG 的搜索以及 Roger Johan

如果您需要搜索姓氏 Johan 还可以包括一个具有前缀["Joh", "Joha", "Johan", "Johans", "Johanss", "Johansso"]的属性,并给它较低(或更高,具体取决于您希望结果的出现)等级。或者,如果等级相同,则可以包含同一数组属性的所有前缀。

要清楚,您确实需要使用短语搜索,即: ""Roger Johan""

我没有自己尝试过,但是也许您需要作为短语进行搜索:https://docs.mongodb.com/manual/reference/reference/operator/query/query/query/text/#短语

如果没有,我认为它将分配您的搜索词,然后搜索。

最新更新