我有一个简单的用例,给定一个术语,我想在 atlas 中启动搜索查询,在 mongo 文档中搜索该关键字,并且我创建了带有附加存储源字段的搜索索引。
现在我尝试运行下面列出的两种查询:
第一:
{
text: {
query: searchKey,
path: ['title', 'description'], // Search on both title and description
},
returnStoredSource: true,
}
第二:
{
compound: {
filter: [
{
text: {
query: searchKey,
path: 'title', // Search on title
},
},
{
text: {
query: searchKey,
path: 'description', // Search on description
},
},
],
},
returnStoredSource: true,
}
两者都被执行,但第二个需要更多时间,我无法理解两者的区别,我只想在字段title
和中进行简单的关键字匹配搜索description
。
有人可以帮忙吗?
您的两个查询都对 MongoDB Atlas 搜索索引中的“标题”和“描述”字段执行文本搜索。但是,第一个查询直接使用文本查询类型,而第二个查询使用具有两个单独文本查询的复合查询类型。
主要区别在于,第一个查询在“标题”或“描述”字段中搜索 searchKey,而第二个查询在“标题”字段和“描述”字段中分别搜索 searchKey。
以下是差异的细分以及为什么第二个查询可能需要更多时间:
1:您的第一个查询使用文本查询类型同时在“标题”和“描述”字段中搜索 searchKey。它将返回 searchKey 出现在任一字段中的文档。
2:您的第二个查询使用复合查询类型,其中包含两个单独的文本查询。每个文本查询都会在“标题”或“描述”字段中搜索 searchKey。复合查询结合了这两个查询的结果。这种方法可能效率较低,因为它执行两次单独的搜索,然后组合结果。
如果您的目标是在“标题”和“描述”字段中进行简单的关键字匹配搜索,则第一个查询(直接使用文本查询)更合适。它在任一字段中搜索关键字,并且与第二个查询相比应该更有效。