短语查询未分析字段不起作用

时间:2019-01-05 09:22:09

标签: lucene luke

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

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

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

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

注意:我无法控制索引编制过程,因此无法控制要编制索引的值。

1 个答案:

答案 0 :(得分:0)

以下是这里的问题, StandardAnalyzer 有效地删除了[],并且该字段仅留有空字符串。

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

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

field_name:[* TO *]是一种变通方法,可以搜索该字段中包含空值的任何文档,而-有效地消除了这种情况,并最终要求在{{ 1}}