elasticSearch的操作
一、索引库的操作:
1、mapping属性:
mapping是对索引库中文档的约束,常见的mapping属性包括:
1.1 type:字段数据类型,常见的简单类型有:
字符串:text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)
数值:long、integer、short、byte、double、float、
布尔:boolean
日期:date
对象:object
注:一个字段可以有多个值,写成数组的形式,但是数组不是字段的数据类型。也就是说,数组形式的字段的类型=数组里的元素的类型。
1.2 index:是否创建索引,默认为true,也就是所有字段都会被创建倒排索引;
1.3 analyzer:使用哪种分词器,结合text类型使用,其他类型都无需分词;
1.4 properties:某字段的子字段,如object的子属性就可以用这个properties来指定。
es中允许一个字段有多个值,但它没有数组的概念,所以只管值的类型即可。
2、创建索引库:
3、查看、删除索引库
4、修改索引库:
es中是不允许修改索引库的,因为索引库一旦创建,它的数据结构就创建好了,也就是它的mapping映射就已经实现了,es是根据这些mapping来创建倒排索引的,如果这个时候修改原有的索引库,那么就会导致倒排索引彻底失效。所以是禁止修改索引库的。
es禁止修改原有的字段,但是可以添加新的字段,语法如下:如果是修改原有字段,则会报错,所以新字段名不能和原来的字段名一致。
二、文档操作
1、新增文档:
2、查看、删除文档:
3、修改文档:
全量修改:逻辑是根据id先将文档删除掉,然后再将新的文档添加进去;
当文档id不存在的时候,这个操作就等价于新增操作;
三、RestClient操作索引库:
1、Java操作es官网:Java High Level REST Client
2、RestClient操作索引库:
2.1 分析数据结构:
mapping要考虑的问题:字段的字段名、数据类型、是否参与搜索、是否分词、如果分词的话分词器是什么?
字段名和数据表的字段名一致即可;
数据类型和数据表的数据类型一致即可;
是否参与搜索和是否分词与业务相关。
注:
1、id在es中要用keyword,而不是long类型;
2、如下图:
3、因为在搜索的时候,可能是根据多个字段进行搜索,但是根据多个字段和根据单个字段进行搜索,显然是根据单个字段进行搜索的效率要高。这个时候又要多个字段的搜索,又要保证效率,es提供了如下的功能:
因此,上图数据表的索引库设计如下:
2.2 初始化JavaRestClient:
2.3 JavaRestClient创建索引库:
其中,MAPPING_TEMPLATE是DSL语句。可以把DSL语句写在一个常量中,然后引用,避免代码过于臃肿。
2.4 JavaRestClient删除索引库:
3、总结:
四、RestClient操作文档:
1、初始化操作上述已经讲解
2、新增文档操作:
从数据库查询数据,然后将这个数据的格式转成索引库需要的格式,然后添加到索引库;
批量导入索引库: