Tus*_*are 0 azure-cognitive-search azure-search-.net-sdk
我的 Azure 搜索索引中有以下记录
{
"customerId": "8feda7ca-c9f0-40d9-86d8-434b0bbe94c2",
"registeredName": "TeamPeacock",
"tradingName": "TeamPeacock",
},
{
"customerId": "b445eb04-8d07-4708-a197-770cda3a459e",
"registeredName": "TeamPeacock1",
"tradingName": "TeamPeacock 1",
}
Run Code Online (Sandbox Code Playgroud)
我使用带有通配符/模糊搜索的完整搜索来获取记录。
以下搜索查询无法获取上述记录:
查询 1 失败:
{
"search": "(peacock*) OR (peacock*~) OR (peacock~)",
"queryType": "full",
"searchMode": "all"
}
Run Code Online (Sandbox Code Playgroud)
查询 2 失败:
{
"search": "(peacock*) OR (peacock*~) OR (peacock~)",
"queryType": "full",
"searchMode": "any"
}
Run Code Online (Sandbox Code Playgroud)
查询 3 失败:
{
"search": "(peacock*)",
"queryType": "full",
"searchMode": "any"
}
Run Code Online (Sandbox Code Playgroud)
查询 4 失败:
{
"search": "(peacock*~) OR (peacock~)",
"queryType": "full",
"searchMode": "any"
}
Run Code Online (Sandbox Code Playgroud)
但如果我包含术语“teampeacock”,搜索查询将返回结果。
通过查询:
{
"search": "(teampeacock*) OR (peacock*~) OR (peacock~)",
"queryType": "full",
"searchMode": "all"
}
Run Code Online (Sandbox Code Playgroud)
通过查询:
{
"search": "(teampeacock*~) OR (peacock~)",
"queryType": "full",
"searchMode": "any"
}
Run Code Online (Sandbox Code Playgroud)
为什么使用术语“peacock”搜索没有返回数据?
您可以使用分析 API 来了解 Azure 搜索如何从文本中创建令牌: https://learn.microsoft.com/en-us/rest/api/searchservice/test-analyzer
在您的情况下,预计搜索“peacock*”不会匹配仅包含术语“teampeacock”的文档,因为术语“team”和“peacock”之间没有分隔符。这意味着您的索引中只会创建 1 个代币(“teampeacock”)。由于您在搜索查询中的“peacock”末尾使用了通配符(“peacock*”),因此以“peacock”开头的标记将会匹配,但以“teampeacock”开头的标记不会匹配。
如果要匹配任何包含“peacock”的内容,可以使用以下查询将其用作“中缀”而不是“前缀”:
{
"search": "/.*peacock.*/",
"queryType": "full",
"searchMode":"all"
}
Run Code Online (Sandbox Code Playgroud)
编辑:只是添加作为警告,如果性能是一个问题,您应该知道以这种方式使用通配符效率很低,因为您最终将通过大量索引来查找匹配术语。进行前缀和后缀搜索的更有效方法是在索引时使用 edgeNGram 标记器来创建表示单词开头或结尾的各种标记。有关更多详细信息,您可以查看自定义分析器文档:https://learn.microsoft.com/en-us/azure/search/index-add-custom-analyzers
| 归档时间: |
|
| 查看次数: |
969 次 |
| 最近记录: |