您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Elastic Search按嵌套文档的数量过滤

Elastic Search按嵌套文档的数量过滤

除了使用,我认为您别无选择script。像这样:

{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "transactions",
            "query": {
              "bool": {
                "must": [
                  {
                    "match": {
                      "transactions.side": "buyer"
                    }
                  },
                  {
                    "range": {
                      "transactions.date": {
                        "from": "2014-10-24",
                        "to": "2015-10-24"
                      }
                    }
                  }
                ]
              }
            }
          }
        },
        {
          "filtered": {
            "filter": {
              "script": {
                "script": "if(_source.transactions.size<3) return false;fromDate=Date.parse('yyyy-MM-dd',fromDateParam);toDate=Date.parse('yyyy-MM-dd',toDateParam);count=0;for(d in _source.transactions){docsDate=Date.parse('yyyy-MM-dd',d.get('date'));if(docsDate>=fromDate && docsDate<=toDate){count++};if(count==3){return true;}};return false;",
                "params": {
                  "fromDateParam":"2014-10-24",
                  "toDateParam":"2015-10-24"
                }
              }
            }
          }
        }
      ]
    }
  }
}

range对于没有日期匹配的那些文档,实际的过滤器是“优化”的。因此,此文档(范围内没有日期)将不会到达费用更高的script过滤器。

script本身首先检查是否交易的数量少于3。如果是这样,请不要打扰所有日期检查并返回false。如果超过,3则取每个日期并与参数进行比较。一旦3达到计数,请停止查看其余日期并返回true

其他 2022/1/1 18:18:42 有522人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶