如何通过添加两个字段作为条件来使用ElasticSearch过滤数据?

v64noz0r  于 2022-11-02  发布在  ElasticSearch
关注(0)|答案(1)|浏览(159)

如何通过添加两个字段作为条件来使用ElasticSearch过滤数据?

类似于以下sql语句

select * from hello where hello.a + hello.b > 10;
yqhsw0fo

yqhsw0fo1#

ElasticSearch在预先计算的情况下提供最佳性能。如果sum已经在索引中,那么一个简单的范围查询将给出结果。

{
    "query": {
        "bool" : {
            "filter" : {
                "range": {
                  "sum_field": {
                    "gte": 10
                  }
                }
            }
        }
    }
}

对于当前的方案,需要使用script query

{
    "query": {
        "bool" : {
            "filter" : {
                "script" : {
                    "script" : {
                        "source": "doc['field1'].value + doc['field2'].value > params.limit",
                        "lang": "painless",
                        "params": {
                          "limit": 10
                        }
                     }
                }
            }
        }
    }
}

脚本运行缓慢,它将为每个文档运行,计算总和并筛选结果。

相关问题