【基础组件15】elasticsearch 入门(二)Rest基本操作

参考教程: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 表示用一个常量来代替相关度分数,就不计算相关度分数了

原文地址:https://www.cnblogs.com/Agnes1994/p/12333995.html