我在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/#短语
如果没有,我认为它将分配您的搜索词,然后搜索。