当用到script score query 时,出现java 异常
这种异常多半是对检索出来的数据进行script计算的时候出错了,大多数是空指针异常情况。
解决思路是: 1.在query条件中,将需要script计算的字段的数据过滤掉。比如用到了feature字段进行计算的时候,需要保证feature有值并且是512或 者2048长度的向量值。 2.在script中用逻辑判断绕过不符合的数据,或者对不符合的数据的给一个默认值。(这种方是更灵活,java代码随意写,逻辑判断任你加)
针对图片向量检索,同一张图片不能检索出结果
-
检查检索的字段类型是否是 “dense_vector” 类型,保证检索和被检索的长度是一致的。
-
检查向量字段的外层字段一定不能是数组的类型。一个特征值只能和一个特征比较,不能是多个。也就是特征值字段不能包含在数组中。
-
检查要进行script字段是否存在数据,保证其特征值字段一定是有值的才行。
约定和优化
-
scroll 翻页一定要在代码中手动清理临时快照,尽早释放内存
-
scroll 调用时设置的有效时候只是针对前一次和后一次的时间,不是整个翻页的总时间,所以不用设置很长时间
-
对nested类型的内部字段term检索,没有结果。
nested类型的字段,在存储的时候是被拉平的,所以在match的时候可以直接用普通的matchQuery查询,但要termQuery时,需要用 nestedQuery 才行。没有为什么,就是这样的!
-
所有的查询Es本身是有条数限制的,可以用过 “max_result_window” 调整参数,但是不建议这样做,因为每次查询都会吞 噬内存。可以在查询的时候设置最小score来减少检索结果。
-
所有查询都会返回命中条目,但实际上这个条目不准,主要受 “max_result_window” 影响,最大1w(默认值)。所以,要想 获取总条目,还必须调用es的count接口进行统计。
-
ES默认参数“read_only_allow_delete = false” ,是否允许只读。默认情况下可以删除的。当ES存储的数据的磁盘占用率超过 阀值(85%),read_only_allow_delete 会自动变成true,这是就不允许插入和删除了。
-
index对字段的curd(在index创建后,禁止直接对字段进行curl,包括index Name)
1)将index:A复制到另外一个index:A_backups(相当于copy一份)
2) 将index:A 删除
3)用调整后的字段类型和结构定义重新创建index:A
4)将index:A_backups 复制到index:A -
翻页不支持1w以上的数据
1.游标方式,越往后越慢
2.聚合查出来具体条数。点击后面页码,添加倒叙条件。可以保证后面的页码可以查出来数据 -
翻页最好不要跳页
注:以上复制用ES提供的reindx接口实现。参考地址:https://www.elastic.co/guide/en/elasticsearch/reference/7.6/docs- reindex.html