azuresearch search.ismatch 忽略末尾的“1”
azuresearch search.ismatch is ignoring "1" at the end
我有以下记录 -
{
"RoleDetails": "0AC05D80-B1E2-4E13-B1E7-602F6C272117  pqr  1",
"GroupDetails": "0AC05D80-B1E2-4E13-B1E7-602F6C272117  Abc Xyz  1",
},
{
"RoleDetails": "0AC05D80-B1E2-4E13-B1E7-602F6C272117  pqr  1",
"GroupDetails": "0AC05D80-B1E2-4E13-B1E7-602F6C272117 Â Abc Xyz 1 Â 1",
},
{
"RoleDetails": "0AC05D80-B1E2-4E13-B1E7-602F6C272117  pqr  1",
"GroupDetails": "0AC05D80-B1E2-4E13-B1E7-602F6C272117 Â Abc Xyz 2 Â 1",
},
{
"RoleDetails": "0AC05D80-B1E2-4E13-B1E7-602F6C272117  pqr  1",
"GroupDetails": "0AC05D80-B1E2-4E13-B1E7-602F6C272117  Abc Xyz 1 New  1",
}
1)
当我使用以下过滤器时 -
&$filter=search.ismatch('Abc Xyz 1','GroupDetails','simple', 'all')
返回 = 所有记录
预计只有两行(Abc Xyz 1”和“Abc Xyz 1 new”)
2)
当我使用以下过滤器时 -
&$filter=search.ismatch('Abc Xyz 2','GroupDetails','simple', 'all')
已返回 = 返回匹配的记录,即预期的一行 ("Abc Xyz 2")
3)
但是当使用这个过滤器时 -
&$filter=search.ismatch('Abc Xyz 1 new','GroupDetails','simple',
'all')
返回 = 返回匹配的记录,即预期的一行 ("Abc Xyz 1 ")
那么为什么在搜索“Abc Xyz 1”时返回所有记录?
另请注意:我尝试了 "simple" 和 "full" querytype
解决方案
根据 Matthew Gotteiner 提供的答案,我修改了这样的查询 -
&$filter=search.ismatch('"Abc Xyz 1"','GroupDetails','simple',
'all')
成功了!
由于您正在寻找确切的短语,因此您应该使用 phrase search operator 将您的查询用双引号括起来。例如,您可以搜索 "Abc Xyz 1"
.
而不是搜索 Abc Xyz 1
此外,如果您打算使用 and
将搜索与过滤器结合使用,则只需使用 search.ismatch
功能。否则,您可以在 REST API or the searchText
parameter in the .NET SDK
中使用 search
参数
我有以下记录 -
{
"RoleDetails": "0AC05D80-B1E2-4E13-B1E7-602F6C272117  pqr  1",
"GroupDetails": "0AC05D80-B1E2-4E13-B1E7-602F6C272117  Abc Xyz  1",
},
{
"RoleDetails": "0AC05D80-B1E2-4E13-B1E7-602F6C272117  pqr  1",
"GroupDetails": "0AC05D80-B1E2-4E13-B1E7-602F6C272117 Â Abc Xyz 1 Â 1",
},
{
"RoleDetails": "0AC05D80-B1E2-4E13-B1E7-602F6C272117  pqr  1",
"GroupDetails": "0AC05D80-B1E2-4E13-B1E7-602F6C272117 Â Abc Xyz 2 Â 1",
},
{
"RoleDetails": "0AC05D80-B1E2-4E13-B1E7-602F6C272117  pqr  1",
"GroupDetails": "0AC05D80-B1E2-4E13-B1E7-602F6C272117  Abc Xyz 1 New  1",
}
1)
当我使用以下过滤器时 -
&$filter=search.ismatch('Abc Xyz 1','GroupDetails','simple', 'all')
返回 = 所有记录
预计只有两行(Abc Xyz 1”和“Abc Xyz 1 new”)
2)
当我使用以下过滤器时 -
&$filter=search.ismatch('Abc Xyz 2','GroupDetails','simple', 'all')
已返回 = 返回匹配的记录,即预期的一行 ("Abc Xyz 2")
3)
但是当使用这个过滤器时 -
&$filter=search.ismatch('Abc Xyz 1 new','GroupDetails','simple', 'all')
返回 = 返回匹配的记录,即预期的一行 ("Abc Xyz 1 ")
那么为什么在搜索“Abc Xyz 1”时返回所有记录?
另请注意:我尝试了 "simple" 和 "full" querytype
解决方案 根据 Matthew Gotteiner 提供的答案,我修改了这样的查询 -
&$filter=search.ismatch('"Abc Xyz 1"','GroupDetails','simple', 'all')
成功了!
由于您正在寻找确切的短语,因此您应该使用 phrase search operator 将您的查询用双引号括起来。例如,您可以搜索 "Abc Xyz 1"
.
Abc Xyz 1
此外,如果您打算使用 and
将搜索与过滤器结合使用,则只需使用 search.ismatch
功能。否则,您可以在 REST API or the searchText
parameter in the .NET SDK
search
参数