0

我有一个产品搜索索引,其中包含一个包含序列化 JSON 的字段“productOptions”,这意味着它可能包含没有选项的产品的空数组,或者包含产品选项的产品选项的数组:

  • []
  • [{ optionId: "", ... }]

当我在 Luke 中尝试查询+productOptions: "[]"时(使用 StandardAnalyzer),我没有得到任何匹配。我的印象是,只要有完全匹配,StandardAnalyzer 就会搜索未分析的字段 - 所以我不明白为什么我没有得到任何点击。但是,如果我切换到 KeywordAnalyzer,我确实会得到点击,但不能使用 KeywordAnalyzer,因为我正在查询产品选项作为需要 StandardAnalyzer 的更复杂的搜索查询的一部分。

如何编写一个查询来查找所有没有选项的产品(即 productOptions == [])?

注意:我无法控制索引过程,所以我无法控制被索引的值。

4

1 回答 1

0

这里的问题如下,StandardAnalyzer有效地删除[]并只留下空字符串。

这使得稍后搜索相同的字符串[]- 不可能找到任何东西。

找到那些“空”字符串的一种可能性是搜索-field_name:[* TO *],这意味着以下内容:

field_name:[* TO *]是一种 hacky 解决方法,用于搜索在该字段中包含任何内容但为空的任何文档,并且-有效地否定了此条件并最终要求所有包含空数据的文档field_name

于 2019-01-09T14:29:24.670 回答