【问题标题】:Fidning a complete term among different fields for Atlas Search在 Atlas Search 的不同字段中查找完整术语
【发布时间】:2021-01-29 18:40:55
【问题描述】:

我正在尝试使用 Atlas 搜索来搜索名称。在我的数据集中,名称分为 FirstName 和 LastName,这对我来说是个问题。

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

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

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

所以基本上我希望我的搜索返回“John Doe”、“John William Doe”,而不是“Frank Doe”或“John Williams”。

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

【问题讨论】:

    标签: mongodb-atlas mongodb-atlas-search


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-02
      • 2014-08-29
      • 2023-03-26
      • 2014-05-12
      • 2020-06-06
      • 2022-12-10
      • 1970-01-01
      • 2019-01-23
      相关资源
      最近更新 更多