使用 MongoDB 进行加权文本搜索

问题描述

我有一个从 node.js 服务器访问的 MongoDB Atlas 集群。

我实现了一个文本搜索,我从用户那里获取输入,比如“rainbow”,然后创建一个这样的字符串:“rairainrainbrainbo Rainbow ”。 然后使用该字符串对索引字段进行文本搜索并按分数对结果进行排序。
这是我用来搜索数据库代码

await myCollection.createIndex({ Description: 'text' });

const searchResult = await myCollection.find(
  { $text: { $search: rainbowString } },{ projection: { Description: 1,Price: 1,score: { $Meta: 'textscore' } } }
).sort({ score: { $Meta: 'textscore' } }).limit(20);

// where rainbowString is the string I spoke about earlier

现在我想做一些改进。例如,不会在我的数据库中找到“rainbows”字符串。 (通常,拼错的单词或缩写不会找到匹配项。通过写“pat”,您将找不到“path”或“pet” em>").

我可以让算法在用户输入的每个单词(或任何地方的任何字母)的末尾添加一个s”,以这个字符串“rairain彩虹彩虹彩虹彩虹”。但是,通过这种方式,“rainbows”的得分将高于“rainbow”(这是用户最初输入的内容)。

我想我可以为用户输入的每个单词添加一个额外副本,以进行我自己的加权搜索:“rainbow rairainrainbrainbo Rainbow Rainbows”。然而,对同一个搜索两次是一种资源浪费。想象一下,如果您想使用五个不同的权重(每个权重分配给一组单词)。

所以我的问题是:有没有办法告诉 mongo 我想寻找权重为 4 的“rainbow”以及字符串中的每个单词:“rairainrainbrainbo Rainbows",权重为 1?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)