azure-cognitive-search - 如何在 Azure 搜索中使用 OR 逻辑组合搜索字符串和筛选器,或在查询字符串中使用筛选器逻辑?
问题描述
我有一个索引,我需要使用 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 核心 SDK 进行搜索,但最初通过调用 POST 到 search.windows.net/indexes 来调试查询,因此,展示如何以任何一种方式进行都会对我有所帮助。
解决方案
您可以使用search.ismatch
andsearch.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
推荐阅读
- ruby - 如何在 Trailblazer 的 Reform::Form 中验证查询参数?
- django - 如何比较两个 Django 模型并在第三个模型中显示答案
- c# - 使用动作委托更新 VB.NET 中的进度条
- keycloak - 用于获取 Keycloak 用户数据的 REST API 详细信息
- javascript - 如何从 HTML 代码中下载 div 元素
- arrays - 在嵌套数组上显示 onclick
- reactjs - 无法使 React 路由器 dom 工作,“InvalidCharacterError”
- jquery - ajax替换表中的数据后DataTable排序不起作用
- javascript - Monorepo 中的对等依赖关系
- phpstorm - PhpStorm - 使用本地历史重建项目(删除所有项目文件后)?