我有一个带有字段“ productOptions”的产品搜索索引,其中包含序列化的JSON,这意味着它可能包含无选项的产品的空数组,或包含产品选项的产品的选项数组:
[]
[{ optionId: "", ... }]
当我在Luke(使用StandardAnalyzer)中尝试查询+productOptions: "[]"
时,没有任何匹配。我的印象是,只要存在完全匹配项,StandardAnalyzer就会搜索未分析的字段-因此我不明白为什么我没有得到任何点击。但是,如果我切换到KeywordAnalyzer,我会做,但由于我要查询产品选项作为需要StandardAnalyzer的更复杂搜索查询的一部分,因此无法使用KeywordAnalyzer。
如何编写查询以查找所有没有选项的产品(即productOptions == [])?
注意:我无法控制索引编制过程,因此无法控制要编制索引的值。
答案 0 :(得分:0)
以下是这里的问题, StandardAnalyzer 有效地删除了[]
,并且该字段仅留有空字符串。
这使得以后搜索相同的字符串[]
-找不到任何东西。
找到这些“空”字符串的一种可能性是搜索-field_name:[* TO *]
,这意味着:
field_name:[* TO *]
是一种变通方法,可以搜索该字段中包含空值的任何文档,而-
有效地消除了这种情况,并最终要求在{{ 1}}