es向量搜索插件-knn

Python021

es向量搜索插件-knn,第1张

1. knn向量检索插件

使用过下面两个插件

https://github.com/opendistro-for-elasticsearch/k-NN

优点: 相对elastiknn,该插件支持把底层生成hnsw一个结构加载进内存,376w数据,768纬度向量,搜索性能在300-400ms左右

缺点: 

1.该插件需要基于nmslib生成一个c的so文件,该文件比较依赖底层操作系统的库,建立项目最好使用docker容器的方式,不然把本地打的so文件,放到其他环境会出现各种bug,比如: [libKNNIndexV1_7_3_6.so_0x6b1da]  _GLOBAL_sub_I_distcomp_sparse_scalar_fast.cc+0x2a

2. 该插件对应于es7.7.1的版本存在各种bug,比如打重复分数、使用cosine距离,但是实际算出来是l2距离,因此建议使用最新的版本,目前最新该插件对应的es版本是7.10.2

2. https://github.com/alexklibisz/elastiknn

优点: 这个是完全对接了es和luence语法的,应该java原生应用,这个不需要安装so库,官网直接就有插件,使用起来比较简单

缺点: 性能相对于上面插件有差距,看官网的QPS在400多左右

java转大数据是非常有优势的,如果想转入大数据开发领域,选择数仓开发是个捷径。千锋教育拥有线上免费Java线上公开课。如果特别想做更底层的开发,也可以选择从数仓开发切入,先接触,再曲线救国。那么数仓开发需要学啥? 1、会一门基础语言:java/python/scala:如果是java相关开发转大数据,那实在是太容易了,这一项就可以略过了。2、分布式存储及调度理论:hdfs、yarn的理论要理解且熟记,这些对于学习spark 或者hive 以及sql的优化是最最基础的知识。

3、sql 框架要会一个:spark sql/hive sql :如果对hive和spark都不懂的话,那就选择学spark,现在离线数仓越来越多的公司切spark了。Spark 相关主要学习spark core 和spark sql;要求sql要写的熟练,调优参数及原理,能懂一些源码就更好了。4、数仓建模、分层理论:这个是数仓的方法论,是一定要掌握的,理论都在《维度建模权威指南-kimball》这本书里,好书是好书,看起来比较枯燥,在看的时候多思考,结合自己正在做的业务,想象一下如果要为现在的业务划分主题该怎么划、业务矩阵该怎么设计等等,大胆想象就ok。5、其它需要了解:大数据相关的架构理论、olap、数据湖等等,知道越多越好,不需要太深入,主要作用是帮助理解大数据的那一套东西;网上的其它公司数仓的架构是啥样子,要知道架构里每个组件的作用是啥。还有一些其它的框架组件:kafka、presto、druid、flink 等了解,写个demo跑跑,知道流程就可。如果想了解更多相关知识,建议到千锋教育了解一下。千锋教育目前在18个城市拥有22个校区,年培养优质人才20000余人,与国内20000余家企业建立人才输送合作关系,院校合作超600所。