ElasticSearch服务集群搭建以及应用(二)

接 ElasticSearch服务集群搭建以及应用(一)

一:ES单机测试及快速入门

1.创建索引库
        ES作为一个搜索服务,对外提供了丰富的Restful接口进行操作,head是ES的可视化管理插件,索引库是一个逻辑概念,它包括了分词列表和文档列表,同一个索引库中存储相同类型的文档,它相当于mysql的表.
    (1)使用postman创建索引库 , API如下
        put类型 http://localhost:9200/索引库名称
        Json参数:

	{ 
		"settings":{ 
			"index":{ 
				"number_of_shards":1, 
				"number_of_replicas":0 
			} 
		} 
	}

number_of_shards:
        设置分片的数量,在集群中通常设置多个分片,表示一个索 引库将拆分成多片分别存储不同的结点,提高了ES的处理能力和高可用性, 入门程序使用单机环境,这里设置为1。

number_of_replicas:
        设置副本的数量,设置副本是为了提高ES的高可靠性, 单机环境设置为0.

创建的结果如下,表示创建成功 :
在这里插入图片描述
    (2)使用head可视化界面创建索引库
        点击head页面上的索引–>新建索引,输入索引名称,分片数,副本数。

2.创建映射
        索引中每一个文档(Document)都包含一个或者多个field,创建映射就是向索引库创建field的过程,document和field的类比关系和关系型数据库类比如下:
        类型(type)-----table表记录(ES9.0之后会彻底删除)
        文档(Document)------Row行记录
        字段(field)-----columns列记录
ES官方建议,在一个索引库中只存储同一类型的文档
    (1)创建映射ES提供的API如下
        post http://localhost:9200/索引库名称/(类型名称)/_mapping
    (2)在索引库es_course里面,创建3个映射,分别是name,description,studymodel,ES6版本没有删除类型名称,所以给一个没有意义的名称即可,这里给doc,在postman发请求如下:
在这里插入图片描述
    (3)在head页面上显示的内容如下:
在这里插入图片描述
3.创建文档
    (1)创建文档ES提供的API如下
        put 或Post http://localhost:9200/索引库名称/(类型名称)/id值
        (如果不指定id值ES会自动生成ID)
    (2)测试生成文档如下,不指定id
在这里插入图片描述
    (3) 在head页面上显示效果如下:
在这里插入图片描述
4.搜索文档
    (1)根据id搜索文档
        get http://localhost:9200/索引库名称/(类型名称)/id
    (2)查询所有记录
        get http://localhost:9200/索引库名称/(类型名称)/_search
    (3)查询名称中包括开发关键字的的记录
        get http://localhost:9200/索引库名称/(类型名称)/_search?q=name:开发
    (4)查询学习模式为201001的记录
        get http://localhost:9200/索引库名称/(类型名称)/_search?q=studymodel:201001
在这里插入图片描述
    took:本次操作花费的时间,单位为毫秒。
    timed_out:请求是否超时
    _shards:说明本次操作共搜索了哪些分片
    hits:搜索命中的记录
    hits.total : 符合条件的文档总数 hits.hits :匹配度较高的前N个文档
    hits.max_score:文档匹配得分,这里为最高分
    _score:每个文档都有一个匹配度得分,按照降序排列。
    _source:显示了文档的原始内容。

二:IK分词器的使用

1.安装IK分词器
        下载IK分词器 , 版本和ES版本保持一致 , 将解压的IK分词器中jar包所在的文件夹复制到ES安装包下的plugin目录下 , 并将该文件夹改为ik以便识别,重启ES服务

2.两种分词模式
        ik分词器有两种分词模式:ik_max_word和ik_smart模式。
(1)ik_max_word
        会将文本做最细粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为“中华人民共和国、中华人民、中华、 华人、人民共和国、人民、共和国、大会堂、大会、会堂等词语。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)ik_smart
        会做最粗粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为中华人民共和国、人民大会堂。
在这里插入图片描述
3.自定义词库
    (1)复制到es的plugins目录下改名的ik目录下的config目录 , 有一个main.dic是自带的词库 , 但是我们还可以自定义词库 , 可以新建一个my.dic,一定注意文件格式设置为utf-8,把我们自定义的词语输进去
    (2)然后在配置文件IKAnalyzer.cfg.xml中 , 在扩展字典那一行写上my.dic ,重启ES服务,自定义词库即可使用
    (3)示例,如下自带词库没有的词语,会被分割成一个个的字
在这里插入图片描述
    (4)如果把这个词语添加到自定义词典中,再分词的效果如下
在这里插入图片描述

三:映射的维护

1.映射维护的方法
    (1)查询所有索引的映射:
        GET: http://localhost:9200/_mapping
    (2)创建映射
        post 请求:http://localhost:9200/索引库名称/(类型名称)/_mapping

{ 
	"properties": { 
		"name": { 
			"type": "text" 
		},
		"description": { 
			"type": "text" 
		},
		"studymodel": { 
			"type": "keyword" 
		} 
	} 
}

    (3)更新映射
        映射创建成功可以添加新字段,已有字段不允许更新。
    (4)删除映射
        通过head页面删除索库引来删除映射。

2.映射常用的类型
    (1)text类型
        对于ik分词器建议是索引时使用ik_max_word将搜索内容进行细粒度分词,搜索时使用ik_smart提高搜索精确性。
        index表示是否索引,默认为true,例如商品的图片地址pic,我们不会根据图片地址搜索,索引pic没有必要索引,就设置为false。

"name": { 
	"type": "text", 
	"analyzer":"ik_max_word", 
	"search_analyzer":"ik_smart",
	“index”:false
} 

    (2)keyword类型
        keyword字段为关键字字段,通常搜索keyword是按照整体搜
索,所以创建keyword字段的索引时是不进行分词的,比如:邮政编码、手机号码、身份证等。keyword字段通常用于过虑、排序、聚合等。进行精准查询 。
    (3)date日期类型
        日期类型不用设置分词器,只用设置format来确定日期格式

	{ 
		"properties": { 
			"timestamp": { 
				"type": "date", 
				"format": "yyyy‐MM‐dd HH:mm:ss||yyyy‐MM‐dd" 
			} 
		} 
	}

    (4)数值类型
        Long,integer,short,byte,double,float,harf_float,scaled_float
            ①尽量选择范围小的类型,提高搜索效率
            ②对于浮点数尽量用比例因子,比如一个价格字段,单位为元,我们将比例因子设置为100这在ES中会按分存储,映射如下:

	"price": { 
		"type": "scaled_float", 
		"scaling_factor": 100 
	}

        由于比例因子为100,如果我们输入的价格是23.45则ES中会将23.45乘以100存储在ES中。
        如果输入的价格是23.456,ES会将23.456乘以100再取一个接近原始值的数,得出2346。
        ③使用比例因子的好处是整型比浮点型更易压缩,节省磁盘空间。
3.综合创建索引的例子

{ 
	"properties": { 
		"description": { 
			"type": "text", 
			"analyzer": "ik_max_word", 
			"search_analyzer": "ik_smart" 
		},
		"name": { 
			"type": "text", 
			"analyzer": "ik_max_word", 
			"search_analyzer": "ik_smart" 
		},
		"pic":{ 
			"type":"text", 
			"index":false 
		}, 
		"price": { 
			"type": "float" 
		},
		"studymodel": { 
			"type": "keyword" 
		},
		"timestamp": { 
			"type": "date", 
			"format": "yyyy‐MM‐dd HH:mm:ss||yyyy‐MM‐dd" 
		} 
	} 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值