gpt4 book ai didi

mongodb - 如何使用复合 MongoDB Atlas 搜索查询在整数数组中进行搜索?

转载 作者:行者123 更新时间:2023-12-03 20:48:49 24 4
gpt4 key购买 nike

我正在开发一个函数,它可以帮助我使用 MongoDB Atlas 的全文搜索功能查找按分数排序的类似文档。
我将我的收藏索引设置为“动态”。
我正在寻找文本字段中的相似之处,例如“名称”或“描述”,但我还想查看另一个字段“主题”,该字段存储主题的整数值 (id)。

示例:
假设我有一个引用文件如下:

{
name: "test",
description: "It's a glorious day!",
thematic: [9, 3, 2, 33]
}
我希望我的搜索与这些匹配 int在主题领域,并在分数计算中包括他们的权重。
例如,如果我将我的引用文档与:
{
name: "test2",
description: "It's a glorious night!",
thematic: [9, 3, 6, 22]
}
我想提高分数,因为主题领域共享 93值与引用文件。

问题:
什么 search operator我应该用它来实现这一目标吗?我可以使用 text 输入字符串数组作为查询运算符,但我不知道如何处理整数。
我应该采用另一种方法吗?就像将数组拆分成几个比较 compound.should.term查询?

编辑 :
经过大量的搜索,我找到了这个 herehere :

Atlas Search cannot index numeric or date values if they are part of an array.


在考虑更改对象的整个数据结构之前,我想确保没有解决方法。
例如,可以用 custom analyzers 来完成吗? ?

最佳答案

我通过在我的收藏中添加一个触发器来解决它。每次插入或更新文档时,我都会更新 thematic和其他类似领域的同行,例如_thematic ,我在这里存储整数的字符串值。然后我用这个 _thematic搜索字段。
这是一个演示它的示例代码:

exports = function (changeEvent) {

const fullDocument = changeEvent.fullDocument;
const format = (itemSet) => {
let rst = [];
Object.keys(itemSet).forEach(item => rst.push(itemSet[item].toString()));
return rst;
};
let setter = {
_thematic: fullDocument.thematic ? format(fullDocument.thematic) : [],
};
const docId = changeEvent.documentKey._id;

const collection = context.services.get("my-cluster").db("dev").collection("projects");

const doc = collection.findOneAndUpdate({ _id: docId },
{ $set: setter });

return;
};
我很确定它可以以更简洁的方式完成,所以如果有人发布它,我会将选定的答案切换到她/他。
解决这个问题的另一种方法是制作一个带有字符映射的自定义分析器,它将用对应的字符串替换每个数字。我还没试过这个。见 https://docs.atlas.mongodb.com/reference/atlas-search/analyzers/custom/#mapping
欢迎替代!

关于mongodb - 如何使用复合 MongoDB Atlas 搜索查询在整数数组中进行搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64173357/

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