mongoose Mongodb Atlas中的基本文本搜索和过滤文本搜索有什么区别?

wtlkbnrh  于 2023-10-19  发布在  Go
关注(0)|答案(1)|浏览(116)

我有一个简单的用例,给定一个术语,我想在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,
}

两者都得到执行,但第二个是需要更多的时间,我无法理解两者的区别,我只是想有一个简单的关键字匹配搜索在这两个领域titledescription
有人能帮忙吗?

64jmpszr

64jmpszr1#

您的两个查询都在MongoDB Atlas Search索引中的“title”和“description”字段上执行文本搜索。但是,第一个查询直接使用文本查询类型,而第二个查询使用具有两个单独文本查询的复合查询类型。
关键的区别在于第一个查询在“title”或“description”字段中搜索searchKey,而第二个查询在“title”字段中搜索searchKey,并分别在“description”字段中搜索。
以下是差异的细分以及为什么第二个查询可能需要更多时间:
1:您的第一个查询使用文本查询类型同时在“title”和“description”字段中搜索searchKey。它将返回searchKey出现在任一字段中的文档。
2:第二个查询使用复合查询类型,其中包含两个单独的文本查询。每个文本查询在“title”或“description”字段中搜索searchKey。复合查询组合了这两个查询的结果。这种方法可能效率较低,因为它执行两个单独的搜索,然后组合结果。
如果您的目标是在“标题”和“描述”字段中进行简单的关键字匹配搜索,则第一个查询(直接使用文本查询)更合适。它在两个字段中搜索关键字,并且与第二个查询相比应该更高效。

相关问题