在 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
}
我正在尝试使用图集搜索来搜索姓名。在我的数据集中,名字分为 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
}