主要记录疑惑点和容易混淆的地方
type和fields区别
- type是废弃功能,为了简化数据模型和提高性能,不再使用,底层的lucene无此概念。详见https://www.ddkk.com/zhuanlan/search/elasticsearch/1/12.html
- fiels跟type不是一个维度的东西,fiels是字段(term)的属性,主要用来定义一个字段不同类型的搜索能力,比如可以把学校名称同时设置为text、keyword、numtest 3种类型,每种类型可以设置不同的分词器,这样在精确查询时可以使用keyword类型,搜索中文时使用text类型,搜索数字时使用特殊的分词器
doc_value
doc_value可以和倒排索引放一起理解,他是一种数据结构,按列存储,这样设计适合聚合、排序等操作。7版本中字段默认开启了,没开启并且没开fielddata,如果使用了聚合查询或者排序会报错。
segment
segment翻译为段,是lecene的核心概念,可以理解成搜索引擎的最小单位,因为每个segment都包含了一个倒排索引,搜索最终都是落到segment上,查询有相关索引的segment,然后对结果进行汇集。
refresh
指的是缓存刷新时间,可以理解为新增的数据要隔多久才能被搜索到。默认1s,每隔一秒把内存中的buffer(增删改)写入到文件系统的缓存并启用segment,当启用后表示数据可以被查到,在开启之前是搜索不到的,所以refresh可以控制搜索的实时性。
flush
写入文件系统的缓存中的segment,通过flush可以异步写入磁盘,进行持久化,es可以设置flush间隔
支持向量搜索
es8.x支持knn相似算法向量搜索,可以通过这个能力快速实现图搜图、文搜图功能。
- 利用clip-ViT-B-32模型将图转为向量
- 将向量存入es
- 将查询的图转为向量通过es完成图搜图/es安装clip-ViT-B-32模型通过es内置方法完成文搜图