问题描述
我们服务的默认搜索网页使用*
完整的Lucene查询来匹配所有文档。这是在用户提供任何搜索词之前。有些数据(在我们的情况下为测试数据)要从搜索结果中排除。
是否可以匹配所有文档,但排除所有文档的子集?
例如,假设我们有一个“所有者”字段,并且我们想排除拥有“ testA”和“ testB”所有者的文档。以下查询似乎不适用于全部匹配方法:
Query: search=* -owners:testA -owners:testB&queryType=full&$orderby=created desc Error: "Failed to parse query string. See https://aka.ms/azure-search-full-query for supported syntax."
搜索除*
以外的任何内容时,此方法可以正常工作。例如:
Query: search=foo -owners:testA -owners:testB&queryType=full&$orderby=created desc Result: (many documents matched)
为此,我考虑了$filter
并使用$filter=filterableOwners/all(p: p ne 'testa' and p ne 'testb')
,但这有以下缺点:
- 索引必须使用可过滤字段进行重建
- 无法使用分析器,因此必须通过减小值和过滤器表达式的大小写来实现不区分大小写
理想情况下,可以仅使用带有Lucene查询文本的search
查询参数。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)