Linux下,非Docker启动Elasticsearch 6.3.0
1 | 查看java版本,需要1.8版本 |
安装ik分词器插件,以及使用Kibana测试Elasticsearch
1 | 用ftp上传elasticsearch-analysis-ik-6.3.0.zip到/home/panfeng/elasticsearch/plugins/ |
先用RestClient测试
1 | 请求方式:PUT |
注意
Kibana操作Elasticsearch内容不全,更全的内容
</2019/10/10/2019-10-10…16.15.04/>
Kibana操作Elasticsearch
操作索引
创建索引
查看索引设置
1 | 查看指定索引 |
删除索引
1 | DELETE /索引库名 |
映射配置
创建映射字段
1 | PUT /索引库名/_mapping/类型名称 |
查看映射信息
1 | GET /索引库名/_mapping |
字段属性详解
- type
1
2
3
4
5
6
7
8
9
10
11- String类型,又分两种:
- text:可分词,不可参与聚合
- keyword:不可分词,数据会作为完整字段进行匹配,可以参与聚合
- Numerical:数值类型,分两类
- 基本数据类型(一般使用long,interger):long、interger、short、byte、double、float、half_float
- 浮点数的高精度类型:scaled_float
- 需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。
- Date:日期类型
elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。 - index
1
2
3
4
5
6index影响字段的索引情况。
- true:字段会被索引,则可以用来进行搜索。默认值就是true
- false:字段不会被索引,不能用来搜索
index的默认值就是true,也就是说你不进行任何配置,所有字段都会被索引。
但是有些字段是我们不希望被索引的,比如商品的图片信息,就需要手动设置index为false。 - store
1
2
3
4
5
6
7是否将数据进行额外存储。
在学习lucene和solr时,我们知道如果一个字段的store设置为false,那么在文档列表中就不会有这个字段的值,用户的搜索结果中不会显示出来。
但是在Elasticsearch中,即便store设置为false,也可以搜索到结果。
原因是Elasticsearch在创建文档索引时,会将文档中的原始数据备份,保存到一个叫做`_source`的属性中。而且我们可以通过过滤`_source`来选择哪些要显示,哪些不显示。
而如果设置store为true,就会在`_source`以外额外存储一份数据,多余,因此一般我们都会将store设置为false,事实上,**store的默认值就是false。**新增数据
随机生成id
1
2
3
4
5
6
7
8
9
10POST /索引库名/类型名
{
"key":"value"
}
_source:源文档信息,所有的数据都在里面。
_id:这条文档的唯一标示,与文档自己的id字段没有关联自定义id
1
2
3
4POST /索引库名/类型/id值
{
...
}添加字段,修改数据
1
2
3
4修改必须指定id,
- id对应文档存在,则修改
- id对应文档不存在,则新增删除数据
1
DELETE /索引库名/类型名/id值
查询
基本查询
基本语法
1
2
3
4
5
6
7
8
9
10
11GET /索引库名/_search
{
"query":{
"查询类型":{
"查询条件":"查询条件值"
}
}
}
查询类型为 match_all , match , multi_match , term , terms查询所有 match_all
1
2
3
4
5
6GET /heima/_search
{
"query":{
"match_all": {}
}
}1
2query:代表查询对象
match_all:代表查询所有匹配查询 match
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73查询"title"内容有"大牛"的数据
GET /panfeng/_search
{
"query":{
"match": {
"title": "大牛"
}
}
}
or关系,查询"title"内容有"大牛"或"手机"的数据,因为分词器会分词
GET /panfeng/_search
{
"query":{
"match": {
"title": "大牛手机"
}
}
}
and关系,查询"title"内容有"大牛"并且也含有"手机"的数据,因为分词器会分词
GET /panfeng/_search
{
"query":{
"match": {
"title": {
"query": "大牛手机",
"operator": "and"
}
}
}
}
"大牛手机"可以分词"大牛","手机"两个词,匹配任何一个都可以,如果把1改为3不匹配任何
GET /panfeng/_search
{
"query":{
"match":{
"title":{
"query":"大牛手机",
"minimum_should_match": 1
}
}
}
}
"大牛智能手机"可以分词"大牛","智能","手机"三个词
最小匹配3x0.66=1.98,因为1.98<2,所以能匹配三个当中任何一个词都可以
GET /panfeng/_search
{
"query":{
"match":{
"title":{
"query":"大牛智能手机",
"minimum_should_match": "66%"
}
}
}
}
"大牛智能手机"可以分词"大牛","智能","手机"三个词
最小匹配3x0.67=2.01,因为2.01>2,所以能匹配三个当中任何两个词都可以
GET /panfeng/_search
{
"query":{
"match":{
"title":{
"query":"大牛智能手机",
"minimum_should_match": "67%"
}
}
}
}
多字段查询 multi_match
1 | 可以匹配字段"title"或"name" 内容为"大牛"的数据 |
词条查询 term
1 | 在"title"中,可以匹配到词为"大牛"的数据 |
多词条精确查询 terms
1 | 只能匹配到title中含有"大牛"的数据,因为"大牛"是一个词,而"二蛋"不是一个词 |
_source过滤
直接指定字段
1 | 在查询结果的_source中只显示字段"title","price" |
指定includes和excludes
1 | includes:来指定想要显示的字段 |
结果过滤
布尔组合 bool
“bool”把各种其它查询通过”must”与,”must_not”非,”should”或 的方式进行组合
1 | 查询title为手机,price为2222或者3333的数据 |
范围查询
1 | 在range中 gt:大于 gte:大于等于 lt:小于 lte:小于等于 |