查询

  1. 地址查询

    1
    2
    3
    4
    5
    查询customer下external 
    _search表示查询
    q=*表示所有
    sort=account_number:asc 按照account_number列升序排列
    GET customer/external/_search?q=*&sort=account_number:asc
  2. 请求体查询 DSL

    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    GET customer/_search
    {

    "query":{

    "match_all":{
    }, 查询所有
    "match":{

    "字段名":"匹配值" 查询某个字段包含模糊匹配写法一样 即倒排索引进行分词 如果中间加空格 会查出包含第一个匹配值或者第二个匹配值的记录
    "字段名.keyword":"匹配值" 精确查找一模一样
    },
    "term":{

    与match相同 建议非文本用term 文本用match
    },
    "match_phrase":{

    "字段名":"匹配值" 不分词 多个匹配值也是整体包含
    },
    "multi_match":{
    多字段匹配 分词
    "query":"查询条件(匹配值)",
    "fields":[字段名(多个)]
    },
    "bool":{
    符合查询 即组合查询
    "must":[
    必须满足 可以写多个上面的匹配
    {

    "match":{

    "字段名":"匹配值"
    }
    },
    {

    "match":{

    "字段名":"匹配值"
    }
    },
    {

    "range":{

    "字段名":{

    "gte":值,
    "lte":值
    } 范围 例如年零 在18-20之间
    }
    },
    ],
    "must_not":[必须不满足 写法同上],
    "should":[满足不满足都行 写法同上],
    "filter":[与上区别在于不计算相关性得分 满足 写法同上]
    },
    "aggs":{
    聚合
    "聚合名字":{

    "聚合类型" terms表示分组 avg表示平均值:{

    "field":"字段名",
    "size": 可写可不写 平均值时不写
    }
    可以进行嵌套聚合 比如分组后求每组平均值
    }
    }
    },
    "sort":[
    {

    "account_number":"asc"
    }
    ],
    "from":0,默认是返回10条数据 from表示从哪开始,size表示要多少条数据
    "size":5
    "_source":["字段名1""字段名2"] 表示返回数据只要哪些字段
    }

mapping 映射

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
查询customer的所有映射 类型
GET /customer/_mapping

创建映射规则
PUT /customer_index
{

"mapping":{

"propeties":{

"字段名":{
"type":"类型"}, 参考官网
}
}
}

添加映射
PUT /customer_index/_mapping
{

"propeties":{

"字段名":{
"type":"类型","index":false}, 参考官网
}
}

不能直接修改映射,想要修改需要数据迁移
1.创建新的映射
PUT /customer_index
{

"mapping":{

"propeties":{

"字段名":{
"type":"类型"}, 参考官网
}
}
}

2.迁移
PUT _reindex 固定写法{

"source":{

"index":
"type":
}
"dest":{
目标
"index"
}
}

分词

利用分词器实现 内置有 默认的是英文

1
2
3
4
5
6
POST _analyze
{

"analyzer":"standard" 标准分词 以空格分隔
"text":"内容"
}

安装ik分词器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 进入elasticsearch 容器
docker exec -it aa520d08c573 /bin/bash
# 进入配置
cd plugins/

# [https://github.com/medcl/elasticsearch-analysis-ik/releases?page=6](https://github.com/medcl/elasticsearch-analysis-ik/releases?page=6)
#下载zip文件 用scp上传到虚拟机 解压
#也可以在外部挂载的 /mydata/elasticsearch/plugins/文件夹进行操作
unzip elasticsearch-analysis-ik-7.4.2.zip

使用
POST _analyze
{

"analyzer":"ik_smart" 智能分词 以空格分隔 ik_max_word 最大单词
"text":"内容"
}

自定义分词器词库

nginx安装参考 http://t.csdn.cn/mXkmnhttp://t.csdn.cn/mXkmn

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#在nginx的挂载目录下的html创建es文件
mkdir /mydata/nginx/html/es
#进入es文件夹
cd es
#编辑分词
vi fenci.txt
#访问
http://服务器ip/es/fenci.txt
#进入ik分词器的挂载目录
cd /mydata/elasticsearch/plugins/ik/config
#编辑配置文件 把刚刚的访问地址放到远程扩展字典的地方
vi IKAnalyzer.cfg.xml
#重启测试
docker restart elasticsearch

作者声明

1
如有问题,欢迎指正!