ElasticSearch初步使用(7.x)

ElasticSearch使用

elasticearch是基于lucene开发的搜索引擎框架,适用于需要实时搜索功能的服务,它能够搭建集群,以及自身已经携带了分片功能(每一个片区都是一个lucene的倒排索引),能够更好的减少搜索的时间。

elasticsearch和solr的选择:
需要使用实时搜索的或者大数据时代,就选es,它可以比以前快50倍的速度!!!
反之可以选用solr。


es和mysql的对比(理解):
elasticsearch和mysql类似
索引库和数据库(database)类似
types(类型)和数据库表(tables)类似(7.x中过时了,8.x中将彻底废弃)
document(文档)和数据库中的每一条数据类似

安装

1.去官网下载压缩包,有各个版本的,下载完成解压即可:
在这里插入图片描述
2.目录结构:
在这里插入图片描述

3.配置文件:
因为es的端口是9200,其他的软件如果需要使用这个端口,就会出现跨域问题(在一个连接中,使用另一个不同ip不同端口的服务),需要配置:

在elasticsearch的conf目录中找到:elasticsearch.yml文件,在最下面添加

http.cors.enabled: true
http.cors.allow-origin: "*"

这两行配置,即可解决跨域问题。

4.启动elasticsearch:
在这里插入图片描述
双击即可。

在这里插入图片描述
运行完毕,在浏览器访问这个地址:在这里插入图片描述
出现这个,就代表es安装完毕!

安装可视化界面

es本身只是一个服务,并没有一个可视化的界面,我们就需要安装一个插件:elasticsearch-head 来支持可视化。

1.下载:
在这里插入图片描述
在github上下载插件包,下载完毕,解压即可。

2.配置es-head环境:
es-head是由node.js支持开发的,如果我们想要运行es-head插件,就必须安装node.js.


安装node.js:
去官网下载,然后双击下一步傻瓜式安装即可。
安装完成,打开cmd,输入:node -v命令查看版本号,如果显示版本,代表node.js安装完毕。
在这里插入图片描述


安装完毕node.js,进入es-head的pom.xml目录下,在此处打开命令行,输入npm install,下载所需文件。
注:如果出现这个错误,那么现实的是哪一个,就下载哪一个即可解决。
在这里插入图片描述

npm install phantomjs-prebuilt@2.1.16 --ignore-scripts
你报错什么版本,就对应什么版本

运行es-head: 在pom.xml所在的目录下打开命令行,输入:
npm run start

即可启动es-head
在这里插入图片描述

在这里插入图片描述
y以上即安装了es还有可视化页面es-head





es索引操作

es采用的是restful风格的访问方式,来及行增删改查索引、文档的操作。
1.添加索引库(直接添加mappings)

PUT http://ip:port/索引库名称
JSON:
{
    
    
	"mappings":{
    
    
		"properties":{
    
    
			"属性名(列名)":{
    
    
				"type":"类型"
			},
			...
		}
	}
}

在这里插入图片描述
在这里插入图片描述

2.创建索引库(先创建,后添加mappings规定)
首先使用

PUT http://ip:端口/索引库名称

创建索引库,
在使用:

PUT http://ip:端口/索引库名称/_mapping
JSON:
{
    
    
	"properties":{
    
    
		"属性名"{
    
    
			设置的规则
		}
	}
}

效果同第一种。

注:在es6.x中有type这个属性,类似于数据库中的一张表,但是在7.x中逐渐停用了这个,在8.x中就放弃了,在7.x之前要添加mapping的话,和这个方式就不一样了
以第一种方式为例:

PUT http://ip:端口/索引库名
JSON:
{
    
    
	“mappings”:{
    
    
		"type(表名)":{
    
    
			"properties":{
    
    
				"属性名":{
    
    
					设置规则...
				},
				....
			}
		}
	}
}

现在已经不用这种方式了

3.删除索引库

DELETE http://ip:端口号/索引库名称

即把整个的索引库删除掉

es文档操作

1.添加文档

POST http://ip:端口号/索引库/_doc/id
(此处的id表示你添加的文档的id,一般和你保存数据的id保持一致,
_doc:es7.x之后,默认types()为_doc,并且不建议再自定义)
Json:
{
    
    
	"属性名":"属性值",
	...
}

即可添加,这种的可以在没有索引库的情况下使用,他会自动的创建索引库,但是属性的类型只能靠es来猜。


2.修改文档
方式1(不推荐):直接覆盖

POST http://ip:端口号/索引库名称/_doc/你要修改的文档id
json:
{
    
    
	"属性值":"要修改的值"
}

不推荐使用,因为当有一个属性没有从新赋值,那么它覆盖之前的时候,就会变为空。

方式2:推荐

POST http://ip:端口号/索引库名称/_doc/文档id/_update
json:
{
    
    
	"doc":{
    
    
		"属性名":"修改的值",
		...
	}
}

这种方式,写了那个属性,就修改哪一个,不写不修改。


3.删除文档: 和删除索引库操作类似,只不过需要加上id
DELETE http://ip:端口号/索引库/_doc/文档id

即可删除文档


重点*es的查询

1.简单查询
根据文档的id查询

GET http://ip:端口号/索引库/_doc/文档的id

结果:
在这里插入图片描述

根据条件查询(类似于mysql的模糊查询)

GET http://ip:端口号/索引库名/_doc/_search
JSON:
{
    
    
	"query":{
    
    
		"match":{
    
    
			"查询字段":"值"
		}
	}
}

在这里插入图片描述

把不用的字段隐藏掉

在这里插入图片描述
过滤之后的结果:
在这里插入图片描述
就会把我们没有用到的tatil隐藏起来


对查询结果进行排序(也就是mysql中的order by,也可以对分数进行排序):
在这里插入图片描述
结果:
在这里插入图片描述
就会根据id进行降序排列(asc反之).


对查询的数据分页(相当于mysql的limit):
在这里插入图片描述
结果:
在这里插入图片描述


bool:boolean类型的,当文档满足了这些条件,才会被查询出来。

must(相当于and的意思):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


should(相当于or的意思,多个条件只要满足一个,就会被查询):

在这里插入图片描述

结果:
在这里插入图片描述


must_not(相当于not,只要不满足这些条件的,就会被查询出来)

在这里插入图片描述

结果:
在这里插入图片描述


filter(过滤条件): 可以使用这个里面的range 获得范围内的数据: gt:大于 gte:大于等于 lt:小于 lte:小于等于

在这里插入图片描述


当我们要对一个属性中的值,给多个条件时,就可以使用空格分割:
例如:
名字中包含‘’张""李"的,这时候就可以使用了

在这里插入图片描述


高亮显示查询:
对结果中的关键字,进行高亮显示。
在这里插入图片描述

在这里插入图片描述

我们还可以自定义标签内容
在这里插入图片描述
这样我们就可以按照需求,让关键字高亮的显示了。

在这里插入图片描述

属性(域)中的type的参数:text和keyword的区别

text默认是可以被分词器解析,而keyword则不能被分词器解析,只能作为一个整体来查询。


term为关键词查询,他所查询的时候,是直接拿着查询数据,去找倒排索引中的分词之后的词典(索引)中查找,而不会先把搜索条件分词在查找。
例如我们使用默认分词器(standard)分存储了张三的文档,那么倒排索引中所存方的就是’张’,‘三’,如果使用term查询’张三’这个词,是查不到数据的,因为词典(索引)中没有张三的这个词,只有‘张’,‘三’。

如果我们使用ik分词器,把张三作为整个词存放到文档中,这个时候直接使用term搜索’张三’是可以查到的,但是单个的查找’张’,‘三’,是查找不到,因为里面就没有这两个的词。

match是代表的模糊查询,只要包含,就能查出来,但是需要keyword表示的字段时,也不会查找出来,因为keyword是没有被分词的。

猜你喜欢

转载自blog.csdn.net/weixin_43431123/article/details/112603485