我有一个简单的用例,给定一个术语,我想在atlas中启动一个搜索查询,在mongo文档中搜索该关键字,然后创建一个带有存储源字段的搜索索引。
现在我有2种查询,我试图运行下面列出:
第一名:
{
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
。
有人能帮忙吗?
1条答案
按热度按时间64jmpszr1#
您的两个查询都在MongoDB Atlas Search索引中的“title”和“description”字段上执行文本搜索。但是,第一个查询直接使用文本查询类型,而第二个查询使用具有两个单独文本查询的复合查询类型。
关键的区别在于第一个查询在“title”或“description”字段中搜索searchKey,而第二个查询在“title”字段中搜索searchKey,并分别在“description”字段中搜索。
以下是差异的细分以及为什么第二个查询可能需要更多时间:
1:您的第一个查询使用文本查询类型同时在“title”和“description”字段中搜索searchKey。它将返回searchKey出现在任一字段中的文档。
2:第二个查询使用复合查询类型,其中包含两个单独的文本查询。每个文本查询在“title”或“description”字段中搜索searchKey。复合查询组合了这两个查询的结果。这种方法可能效率较低,因为它执行两个单独的搜索,然后组合结果。
如果您的目标是在“标题”和“描述”字段中进行简单的关键字匹配搜索,则第一个查询(直接使用文本查询)更合适。它在两个字段中搜索关键字,并且与第二个查询相比应该更高效。