参考教程:https://www.bilibili.com/video/av35882450?p=18
https://www.bilibili.com/video/av35882450?p=23
补充:json格式说明
1)对象模式用大括号{}
{ "key1":"value1",
"key2":"value2",
"key3":"value3"
}
2) 数组模式用中括号[]
value里面在嵌套一个”key“:“value” (大括号,中括号均可),相当于一个A
{
"name":["A", "B","C"]
}
json value嵌套json, 用中括号、大括号都OK
一、Rest定义
二、ES内置的rest接口
三、REST创建索引库、添加数据(新增 PUT, POST都行) _create接口,新增数据
1.curl命令
2.curl创建索引库、添加数据
以上,第1个是创建索引库,第2个是添加数据,添加数据必须-H, 否则会报错
3.PUT和POST的区别
PUT 新增数据
POST 新增数据
eg: 往ES中插入数据时,PUT指定了ID, POST不用指定ID,
用PUT插入同一条数据,重复多次,则不会新增数据条数,只是版本数增加了,被修改的还是同一条数据
用POST插入同一条数据,重复多次,则会新增多条数据,只是自动生成的ID不同
4. ES创建索引库、添加数据注意事项
创建索引库tips: IP、端口要单引号
创建数据tips: -H 双引号
IP、端口不用引号
-d 数据单引号
四、REST查询数据------GET
1)根据ID查询
2)_search?q=查询条件1&查询条件2&pretty (_search接参数查询)
3)返回数据在 _source里
4)_search -d ‘{”query“:{"match":{"name":"qiqi"}}}’ (_search -d '' 接DSL查询)
1._search 接参数查询 (查询条件是参数)
总结:1)根据ID查询, 不用加引号
2)根据ID查询, 只显示某个字段( 用_source=name 参数 ),用单引号,用/test/user/1?_source=name&pretty
用?连接参数或第一个参数,_source=name 参数
用&连接多个参数,pretty参数,使返回结果json显示
3) _search接口查询索引库的所有数据
4)根据条件进行查询,用单引号,用_search接口,(用q=查询条件 参数)
_search 接口?q=name:john&age=18&pretty
5)返回结果在_source里
_source只显示某个字段
2._search接DSL查询 (查询条件是一个json串,所以要-H)
1).match 查询 (先对字段 field 进行分词,再查询,知道分词器的存在)
match 查询包含多个关键字可用空格或者逗号隔开, 查询结果为包含多个关键字中的任一个即可
2) term, terms查询(也适用于没有进行分词的字段查询,如keyword, data, 数字,不进行分词,
term和terms 都是不能进行分词的(”xiaoming xiaohong“会被当做一个关键词来查询),不知道分词器存在的查询,仅查询包含某个关键词),
&sort=age:desc 降序查询
term :查询某字段中包含某个关键词的文档
terms: 查询某字段中包含多个关键词中任一关键词的文档
查询结果解释:
max_score :相关度匹配分数 (1是最大的)
3 )from: 从哪一个开始
size : 取几个文档
4)multi_match
在多个字段中查询某一个关键词,任一字段包含这个关键词,即可查询出来
5)match_phrase 短语匹配(当作一个整体,必须完全一样的,顺序也一样的,才能查询出来)
6)可以指定返回的字段
指定返回的字段时,字段名也可以用通配符* 表示任意多个字符
7)排序查询,前缀匹配查询
eg:排序查询
eg: 前缀匹配查询、范围查询
8)wildcard查询,通配符查询,可包含?*
?代表一个字符
* 代表一个或多个字符
9)fuzzy 模糊查询
10)高亮显示 highlight
五、ES中文查询(ik_max_word, ik_smart)
先创建索引库,新增文档
中文查询:
五、_mget接口查询多个文档 (可跨多个索引库查询)(查询条件是一个json串,所以要-H)
tips:json串外层{}, 里层的数组用[], 多个数用逗号隔开,最后一个数不需要逗号
六、HEAD检查文档是否存在
补充:curl --help
-i 的解释:
数据存在,返回如下:
数据不存在,返回如下:
七、修改数据(必须用POST) _update接口,修改数据
八、ES删除- DELETE
九、_bulk接口,执行批量操作
十、ES版本控制
十一、filter查询
注意:text类型,默认分词,并且会把大写转换成小写存储,所以用term 大写, 查询不出来
解决办法,创建mapping时,不让自动索引,或者lowercase 支持大小写转换查询
十二、bool过滤查询
示例:
十三、范围过滤、过滤非空
十四、ES的聚合查询
示例:
求基数:即互不相同的值的个数
分组查询:价格相同的为一组
示例2:
示例3:分组里再嵌套聚合
示例4:分组再按平均年龄降序排序
十五、复合查询
示例:
示例:constant_score 表示用一个常量来代替相关度分数,就不计算相关度分数了