术语查询不返回字符串列表的结果

时间:2017-06-01 17:39:35

标签: elasticsearch

我有这个弹性查询无法返回terms.letter_score的所需结果。我确定索引中有可用的匹配项。此查询(不包括letter_score)返回预期的筛选结果,但不返回letter_score。唯一的区别是(据我所知),cat_id值是整数与字符串的列表。什么可能是这里的问题的想法?我基本上试图让它与letter_score列表中的任何值匹配。

由于

{
   "size": 10,
   "query": {
      "bool": {
         "filter": [
            {
               "terms": {
                  "cat_id": [
                     1, 
                     2,
                     4
                  ]
               }
            },
            {
               "terms": {
                  "letter_score": [
                     "A",
                     "B",
                     "E"
                  ]
               }
            }
         ]
      }
   }
}

1 个答案:

答案 0 :(得分:1)

听起来您的letter_score字段属于text类型,因此已经过分析,因此令牌ABE都有已存储为abe,因此terms查询将与它们不匹配。

如果是这种情况,那么在索引时已经忽略了令牌a的概率很高,因为它是一个停用词并且standard分析器(默认)忽略它们(如果你'重新使用ES 5 +)。

第一种方法是使用match查询而不是terms,如下所示:

{
   "match": {
      "letter_score": "A B E"
   }
}

如果仍然无效,我建议您将letter_score字段的映射更改为keyword(需要重新编制数据索引),然后您的查询将按现在的样式进行