好的想法是十分钱一打,真正无价的是能够实现这些想法的人。

ES 两个字段的和 范围筛选

Elasticsearch | 作者 daowojia | 发布于2018年04月12日 | 阅读数:9380

mapping 如下

```

  "user": {
    "aliases": {},
    "mappings": {
      "userclass": {
        "properties": {
          "name": {
            "type": "long"
          },
          "kaoshi": {
            "properties": {
              "yuwen": {
                "type": "long"
              },
              "suxue": {
                "type": "long"
              },
              "yingyu": {
                "type": "long"
              }
          }
}
}

```
数据
{"name":"张三","kaoshi":{"yuwen":80,"yingyu":60,"suxue":99}}
{"name":"李四","kaoshi":{"yuwen":20,"yingyu":60,"suxue":45}}
{"name":"二熊","kaoshi":{"yuwen":60,"yingyu":50,"suxue":39}}
...
想查询出 语文和英语 或者英语和数学之和在一定范围内的人
举例: 100<(yuwen+yingyu)<120 的名单
如果写查询语句?
已邀请:

laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自: daowojia

建议参考下:"bucket_selector": 的实现。参考地址:https://www.elastic.co/guide/e ... .html

daowojia

赞同来自: lbx6z

问题已解决: 两种方案
 
最终都要用 script
 
方案一 :  
"query": {
      "bool": {
        "must": [
          [  {
              "script": {
                "script": {
                  "source": "(doc['kaoshi.yuwen'].value+doc['kaoshi.yingyu'].value)<10"
                }
              }
            },{小于条件}
}}
方案二
https://www.elastic.co/guide/e ... .html
{
"bucket_selector": {
"buckets_path": {
"my_var1": "the_sum",
"my_var2": "the_value_count"
},
"script": "params.my_var1 > params.my_var2"
}
}

 
 

yayg2008

赞同来自:

语文和英语 或者英语和数学之和,如果组合是固定的,直接新建字段计算好值,这样查询效率更高。

要回复问题请先登录注册