ES8.2将带来三大新特性

大家期盼已久的ES8.2将可能在5月初发布,该版本会带来3个突出的新特性

  • Support ANN with filtering
    ES8.0支持的knn_search查询首次实现了大数据场景下的向量近邻搜索,但是美中不足的是不支持配合DLL语法进行数据筛选;不过经过社区同学的努力该问题得到了重视,官方承诺会在后续的版本陆续解决,第一步是在8.2中引入了filter语法
POST index/_knn_search
{
 "knn": {
  "field": "image_vector",
  "query_vector": [0.3f, 0.1f, ...],
  "k": 10,
  "num_candidates": 100
 },
 "filter": {
  "term": {
   "file_type": "jpeg"
  }
 }
}

有了这个支持,那么我们可以将检索结果的TopN商品作为过滤条件,通过向量近邻搜索对商品精细化排序了,如实现经典的双塔模型排序

  • Enhance runtime field
    当业务中忘了定义某些字段,或者早期定义的字段类型或类型格式不符合当下业务场景时,可通过新增运行时字段来修正;如 我们希望对商品检索结果按照所属分类进行聚合,但不幸的是存放商品的字段是一个包含多个品类的text字符串,很显然这个字段是不能进行聚合操作的,我们要做的是在runtime_mappings中定义一个类型为keyword的category字段即可
POST my-index-000001/_search
{
  "runtime_mappings": {
    "category": {
      "type": "keyword",
      "script": {
        "source":
        """if (doc['navigator_ids].value.contains('123456'))
        {emit('123456');}
        else if (doc['navigator_ids].value.contains('234567'))
        {emit('234567');}"""
      }
    }
  },
  "query": {
      "navigator_ids": [
        "123456",
        "234567"
      ]
  },
  "_source": false, 
  "size": ,
  "collapse": {
    "field": "category",
    "inner_hits": {
      "size":10,
      "_source": [
        "product_quality_score",
        "title",
        "gid",
        "id",
        "type"
      ]
    }
  },
}
  • Aggregation for sampling documents
    抽样是数据分析中常用的手段,虽然ES提供了强大的数据分析能力,但是在大数据量下进行聚合查询依然会拖慢整个集群,进而影响到线上的正常查询业务;那么通过random_sampler语法可近似查看数据趋势,是一种不错的折中选择
{
  "aggregations": {
    "sampling": {
      "random_sampler": {
        "probability": 0.1
      },
      "aggs": {
        "price_percentiles": {
          "percentiles": {
            "field": "taxful_total_price"
          }
        }
      }
    }
  }
}

你可能感兴趣的:(ES8.2将带来三大新特性)