【发布时间】:2020-10-27 00:56:21
【问题描述】:
我们服务的默认搜索网页使用* 完整的 Lucene 查询来匹配所有文档。这是在用户提供任何搜索词之前。我们想要从搜索结果中排除一些数据(在我们的例子中是测试数据)。
是否可以匹配所有文档但排除所有文档的子集?
例如,假设我们有一个“所有者”字段,并且我们想要排除具有“testA”和“testB”所有者的文档。以下查询似乎不适用于 match all 方法:
查询:search=* -owners:testA -owners:testB&queryType=full&$orderby=created desc 错误:“无法解析查询字符串。有关支持的语法,请参阅 https://aka.ms/azure-search-full-query。”当搜索除* 之外的任何内容时,这种方法可以正常工作。例如:
我为此考虑过$filter 并使用$filter=filterableOwners/all(p: p ne 'testa' and p ne 'testb'),但这有以下缺点:
- 必须使用可过滤字段重建索引
- 无法使用分析器,因此必须通过小写值和过滤器表达式来实现不区分大小写
理想情况下,这可以仅使用带有 Lucene 查询文本的 search 查询参数来完成。
【问题讨论】: