在 Atlas Search 的不同字段中找到一个完整的术语

Fidning a complete term among different fields for Atlas Search

我正在尝试使用图集搜索来搜索姓名。在我的数据集中,名字分为 FirstName 和 LastName,这导致了我的问题。

我在聚合中尝试了以下阶段:

{
    "$search" : { 
        "phrase" : { 
            "query" : "John Doe", 
            "path" : ["FirstName", "LastName"] 
        } 
    } 
},

即使我有一个名字为“John”且姓氏为“Doe”的文档,也找不到任何结果。 如果我搜索 John 或 Doe,我会得到这个结果。我还尝试使用 $text 而不是 Phrase,即使我在进行该搜索时得到了 John Doe,我也会得到 FirstName = John 或 LastName = Doe 的任何其他文档,所以我得到的点击次数比我多得多想要.

基本上我希望搜索 return“John Doe”、“John William Doe”,而不是“Frank Doe”或“John Williams”。

我真的不想为此在数据库中引入一个新字段来组合 FirstName 和 LastName,所以希望有人对此有很好的解决方案!

也许您可以在空格上拆分用户输入,并使用带有两个 must 子句的 compound operator。上面的查询应该是这样的:

"must": [
          {
            "test": {
              "query": "John",
              "path": "FirstName"
            }
          },
          {
            "text": {
              "query": "Doe",
              "path": "LastName"
            }
          }
        ],
        "minimumShouldMatch": 2 // specifying that we need both fields to match
      }