「java向量检索」向量检索框架
本篇文章给大家谈谈java向量检索,以及向量检索框架对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
es向量搜索插件-knn
1. knn向量检索插件
使用过下面两个插件
优点: 相对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.
优点: 这个是完全对接了es和luence语法的,应该java原生应用,这个不需要安装so库,官网直接就有插件,使用起来比较简单
缺点: 性能相对于上面插件有差距,看官网的QPS在400多左右
java中vector类的成员变量,在main方法中调用时报空指针异常该如何解决?
/**
* 演示Vector的使用。包括Vector的创建、向Vector中添加元素、从Vector中删除元素、
* 统计Vector中元素的个数和遍历Vector中的元素。
*/
public class VectorDemo{
public static void main(String[] args){
//Vector的创建
//使用Vector的构造方法进行创建
Vector v = new Vector(4);
//向Vector中添加元素
//使用add方法直接添加元素
v.add("Test0");
v.add("Test1");
v.add("Test0");
v.add("Test2");
v.add("Test2");
//从Vector中删除元素
v.remove("Test0"); //删除指定内容的元素
v.remove(0); //按照索引号删除元素
//获得Vector中已有元素的个数
int size = v.size();
System.out.println("size:" + size);
//遍历Vector中的元素
for(int i = 0;i v.size();i++){
System.out.println(v.get(i));
}
}
}
-------------
Vector 类提供了实现可增长数组的功能,随着更多元素加入其中,数组变的更大。在删除一些元素之后,数组变小。
Vector 有三个构造函数,
public Vector(int initialCapacity,int capacityIncrement) public Vector(int initialCapacity) public Vector() Vector 运行时创建一个初始的存储容量initialCapacity,存储容量是以capacityIncrement 变量定义的增量增长。初始的存储容量和capacityIncrement 可以在Vector 的构造函数中定义。第二个构造函数只创建初始存储容量。第三个构造函数既不指定初始的存储容量也不指定capacityIncrement。 Vector 类提供的访问方法支持类似数组运算和与Vector 大小相关的运算。类似数组的运算允许向量中增加,删除和插入元素。它们也允许测试矢量的内容和检索指定的元素,与大小相关的运算允许判定字节大小和矢量中元素不数目。 现针对经常用到的对向量增,删,插功能举例描述:
addElement(Object obj) 把组件加到向量尾部,同时大小加1,向量容量比以前大1
insertElementAt(Object obj, int index) 把组件加到所定索引处,此后的内容向后移动1 个单位
setElementAt(Object obj, int index) 把组件加到所定索引处,此处的内容被代替。 removeElement(Object obj) 把向量中含有本组件内容移走。 removeAllElements() 把向量中所有组件移走,向量大小为0。
java中的vector能像数组那样存储int类型的值吗?
当然可以。首先Vector 本身就是可实现自动增长的对象数组。java.util.vector提供了向量类(vector)以实现类似动态数组的功能。在Java语言中没有指针的概念,但如果正确灵活地使用指针又确实可以大大提高程序的质量。比如在c,c++中所谓的“动态数组”一般都由指针来实现。为了弥补这个缺点,Java提供了丰富的类库来方便编程者使用,vector类便是其中之一。事实上,灵活使用数组也可以完成向量类的功能,但向量类中提供大量的方法大大方便了用户的使用。
添加元素功能:
(1)public final synchronized void adddElement(Object obj)
(2)public final synchronized void setElementAt(Object obj,int index)
将index处的对象设置成obj,原来的对象将被覆盖。
(3)public final synchronized void insertElement(Object obj,int index)
在index指定的位置插入obj,原来对象以及此后的对象依次往后顺延。
删除功能:
(1)public final synchronized void removeElement(Object obj)
从向量中删除obj,若有多个存在,则从向量头开始试,删除找到的第一个与obj相同的向量成员。
(2)public final synchronized void removeAllElement();
删除向量所有的对象
(3)public fianl synchronized void removeElementAt(int index)
删除index所指的地方的对象
查询搜索功能:
(1)public final int indexOf(Object obj)
从向量头开始搜索obj,返回所遇到的第一个obj对应的下标,若不存在此obj,返回-1.
(2)public final synchronized int indexOf(Object obj,int index)
从index所表示的下标处开始搜索obj.
(3)public final int lastindexOf(Object obj)
从向量尾部开始逆向搜索obj.
(4)public final synchornized int lastIndex(Object obj,int index)
从index所表示的下标处由尾至头逆向搜索obj.
(5)public final synchornized firstElement()
获取向量对象中的首个obj
(6)public final synchornized Object lastElement()
获取向量对象的最后一个obj
关于java向量检索和向量检索框架的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-23,除非注明,否则均为
原创文章,转载请注明出处。