elasticsearch - ElasticSearch查询必须且应该

标签 elasticsearch

我有此查询可从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/

相关文章:

elasticsearch - 存储桶脚本不起作用-Elasticsearch 2.4.2

elasticsearch - Elasticsearch:查询时自定义分析器

security - elasticsearch在正在运行的集群上应用安全性

elasticsearch - 带有filter或bool的ElasticSearch查询

elasticsearch - 如何在 elasticsearch 中组合多个 bool 查询

go - 如何获得索引总数

elasticsearch - 分析器是否会阻止字段突出显示?

sql-server - ElasticSearch和Asp.net Core 2.0

elasticsearch - 如果字段具有值,如何编写 Elasticsearch 查询以在数组中包含值

elasticsearch - 如何对高级查询使用 Elasticsearch :