我有此查询可从AWS ElasticSearch实例v6.2获取数据
{
"query": {
"bool": {
"must": [
{
"term": {"logLevel": "error"}
},
{
"bool": {
"should": [
{
"match": {"EventCategory": "Home Management"}
}
]
}
}
],
"filter": [{
"range": { "timestamp": { "gte": 155254550880 }}
}
]
}
},
"size": 10,
"from": 0
}
我的数据具有多个EventCategories,例如“家庭管理”和“用户帐户管理”。问题在于
should
内部具有match
返回所有数据,因为短语“Management”属于两个类别。如果我使用term
而不是match
,即使给定值与document中的值完全相同,它也不会返回任何内容。当任何给定类别与其余过滤器匹配时,我需要获取数据。
编辑:
可能没有任何一种或多于一种的
EventCategory
传递给should
子句
最佳答案
我不确定为什么要在should
中添加must
。您是否希望有不止一种should
案件?看起来有点奇怪。
对于您的问题,您不能在已分析的字段上使用term
查询,而只能在keyword
类型的字段上使用。如果您的EventCategory
字段具有默认映射,则可以对term
的默认未分析多字段运行EventCategory
查询,如下所示:
...
{
"term": { "EventCategory.keyword": "Home Management" }
}
...
此外,如果您只想过滤文档,而不关心它们的相关性,建议您将所有条件移至
filter
块中,以加快查询速度并更好地利用缓存。
关于elasticsearch - ElasticSearch查询必须且应该,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55160882/