CloudSearch - Return 字段不存在时的结果

CloudSearch - Return results when a field does not exist

是否有 CloudSearch 结构化查询 return 结果在字段中没有值?例如,我有一个名为 target_date 的字段并不总是有值,我想 return 所有没有 target_date 的结果。该字段未归零或设置为默认值;对于没有日期的项目,它根本不存在。

还有一种情况。我需要 return target_date 之后的所有结果,并包括没有现有日期的任何结果。我使用的结构化查询是 target_date:['2000-03-03T00:00:00Z',}。查找不存在日期的查询应该使用 and 运算符,例如:(and target_date:['2000-03-03T00:00:00Z',} [QUERY_GOES_HERE])

我相信你问的和 Amazon Cloudsearch : Filter if exists

一样

总结那里的选项:

  1. 添加一个名为 'has_target_date'
  2. 的新布尔字段
  3. 设置默认值 target_date(例如 1/1/1970)表示它不存在
  4. 黑客:(范围字段=target_date [0,})

这些选项中的任何一个都应该适用于您问题的 QUERY_GOES_HERE 部分。

您还可以构造一个 lonnnng 查询来排除在该字段中具有字符串的任何项目。基本上你说 "Give me everything that doesnt start with A-Z or 0-9"

在初步测试中,我的结果是完全缺少该字段的所有项目。下面的示例代码用于在 "title" 字段上进行复合(结构化)查询,以查找根本没有标题的所有项目

(and (not (prefix field='title' 'a')) (not (prefix field='title' 'b')) (not (prefix field='title' 'c')) (not (prefix field='title' 'd')) (not (prefix field='title' 'e')) (not (prefix field='title' 'f')) (not (prefix field='title' 'g')) (not (prefix field='title' 'h')) (not (prefix field='title' 'i')) (not (prefix field='title' 'j')) (not (prefix field='title' 'k')) (not (prefix field='title' 'l')) (not (prefix field='title' 'm')) (not (prefix field='title' 'n')) (not (prefix field='title' 'o')) (not (prefix field='title' 'p')) (not (prefix field='title' 'q')) (not (prefix field='title' 'r')) (not (prefix field='title' 's')) (not (prefix field='title' 't')) (not (prefix field='title' 'u')) (not (prefix field='title' 'v')) (not (prefix field='title' 'w')) (not (prefix field='title' 'x')) (not (prefix field='title' 'y')) (not (prefix field='title' 'z')) (not (prefix field='title' '1')) (not (prefix field='title' '2')) (not (prefix field='title' '3')) (not (prefix field='title' '4')) (not (prefix field='title' '5')) (not (prefix field='title' '6')) (not (prefix field='title' '7')) (not (prefix field='title' '8')) (not (prefix field='title' '9')) (not (prefix field='title' '0')))