我有这个弹性查询无法返回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"
]
}
}
]
}
}
}
答案 0 :(得分:1)
听起来您的letter_score
字段属于text
类型,因此已经过分析,因此令牌A
,B
和E
都有已存储为a
,b
和e
,因此terms
查询将与它们不匹配。
如果是这种情况,那么在索引时已经忽略了令牌a
的概率很高,因为它是一个停用词并且standard
分析器(默认)忽略它们(如果你'重新使用ES 5 +)。
第一种方法是使用match
查询而不是terms
,如下所示:
{
"match": {
"letter_score": "A B E"
}
}
如果仍然无效,我建议您将letter_score
字段的映射更改为keyword
(需要重新编制数据索引),然后您的查询将按现在的样式进行