排序插件开发-Cava语言

Cava是OpenSearch引擎团队基于llvm实现的一门高效的编程语言,它的语法和Java类似,性能与C++相当。Cava是一门面向对象的编程语言,支持即时编译(jit),支持各种安全检查保证程序更加健壮。使用Cava和OpenSearch提供的cava库,在OpenSearch中可以定制自己的排序插件,相比于OpenSearch支持的表达式,使用Cava实现排序插件具有以下优点:

  • 更强的定制能力:Cava提供了较表达式更加丰富的语法功能,比如for循环,函数定义,类定义等,用户可以实现自己的业务需求

  • 更易于维护:Cava实现的排序插件比表达式更具有可读性,更易于维护

  • 更易于接受:Cava的语法和Java类似,熟悉Java的同学很容易使用Cava进行开发,学习成本较低

重要

  • Cava插件仅支持独享型应用配置 

  • Cava插件目前仅在业务排序中生效

  • Cava语法可在产品文档中 开发指南—>排序插件Cava 模块下查看

流程演示

  1. 创建策略:在“策略管理”页点击“创建”,“应用范围”选择“业务排序”,“类型”选择“cava脚本”:

1

  1. 添加脚本文件:添加脚本文件,编辑cava脚本;也可本地上传脚本文件,支持JSON格式文件:

2

  1. 编译并发布脚本:脚本文件编辑完成后,点击“编译”可对所有脚本文件进行编译,并在下方展示编译状态;编译通过后,点击发布即可发布当前脚本;脚本发布后不可重新编辑

3

  1. 查看排序效果:在搜索测试中输入设置参数second_rank_name=“策略名称”second_rank_type=cava_script

4

代码中参数配置如下:(以Java为例):

...
// 创建参数对象
SearchParams searchParams = new SearchParams(config);
...

//创建rank对象
Rank rank=new Rank();
//设置调用的CAVA脚本
rank.setSecondRankName("cava脚本名称");
//设置排序类型 - CAVA 脚本
rank.setSecondRankType(RankType.CAVA_SCRIPT);
//将排序策略加入到参数对象中
searchParams.setRank(rank);

常见参数获取

  1. 获取向量分:

import com.aliyun.opensearch.cava.features.similarity.ProximaScore;

ProximaScore _proximaScoreVector;
_proximaScoreVector = ProximaScore.create(params, "{{indexes.vector_index}}"); //对应的向量索引名称
float proximaScoreVector = _proximaScoreVector.evaluate(params);

注意事项

  • Cava插件目前仅支持独享型应用配置;

  • Cava脚本单文件大小限制为10K,单个Cava排序策略最多可以创建5个脚本文件,单个应用实例最多支持50个Cava排序策略;

  • Cava脚本发布后不可编辑,如需修改可在策略管理页复制创建Cava脚本类排序策略;

  • SDK中配置的Cava脚本必须是已发布的,未发布的Cava脚本仅支持在搜索测试中测试。