使用完整的Lucene语法匹配除某些术语外的所有文档

问题描述

我们服务的默认搜索网页使用*完整的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 (将#修改为@)