如何解决如何在 Azure 搜索中使用 OR 逻辑组合搜索字符串和过滤器或在查询字符串中使用过滤器逻辑?
我有一个索引,我需要使用 OR 逻辑将搜索字符串与过滤器字符串结合起来 - 因此,它将返回搜索字符串的所有匹配项以及过滤器的所有匹配项
例如,我有一个房间复杂类型属性,可选描述和可选墙壁颜色为整数。
所以,当 1 和 2 代表黑色和深蓝色时,它会类似于
{
"search": "room/description: (\"dark walls\")","queryType": "full","filter": "room/wallColour eq 1 or room/wallColour eq 2 or room/wallColour eq null","top": 10
}
但搜索和过滤器之间存在 OR。
或者,对于 .NET sdk 调用(在过滤器和查询之间使用 OR 逻辑):
var options = new SearchOptions()
{
Size = pageSize,QueryType = SearchQueryType.Full,Filter = filter
};
await searchClient.SearchAsync<Room>(query,options);
如果可以将特定于 int 和特定于 null 的部分从过滤器移动到搜索,我也不介意这样做,只是不知道如何。
我不想将 int 字段转换为字符串以进行搜索,因为我无法控制索引结构。
我使用 .net core SDK 进行搜索,但最初通过调用 POST 到 search.windows.net/indexes 来调试查询,因此,展示如何以任何一种方式执行此操作都会对我有所帮助。
解决方法
您可以使用 search.ismatch
和 search.ismatchscoring
在过滤器表达式中引入搜索。更多细节在这里:
https://docs.microsoft.com/en-us/azure/search/search-query-odata-full-text-search-functions
按照您的示例,您可以将组合过滤器/搜索编写为:
search.ismatchscoring('room/description: ("dark walls")',null,'full','any') or room/wallColour eq 1 or room/wallColour eq 2 or room/wallColour eq null
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。