美文网首页ElasticSearch
ElasticSearch的简单使用

ElasticSearch的简单使用

作者: 彩虹丶直至黑白 | 来源:发表于2022-08-11 16:34 被阅读0次

    ElasticSearch版本5.3.2,版本较老,仅供参考。

    1、概念

    索引(index)       类似于数据库
    type        类似于表table
    文档(document)    指的是1条数据
    field字段     相当于column
    mapping     设置索引里边每个表的字段、字段类型、是否被索引等等。
    

    2、创建索引

    • 创建一个名字叫zl2的索引,没有设置mappings
    PUT请求
    http://192.168.31.210:9200/zl2
    
    • 给没设置mappings的索引,设置mappings
    POST请求
    http://192.168.31.210:9200/zl2/datatables/_mappings
    参数
    {
        "datatables":{
            "properties":{
                "titlezl2":{
                    "analyzer":"standard",
                    "type":"text"
                },
                "articleIdzl2":{
                        "type":"keyword"
                },
                "contentzl2":{
                    "index": "true",
                    "analyzer":"standard",
                    "type":"text"
                },
                "urlzl2":{
                        "type":"text"
                },
                "releaseTime2":{
                        "type":"date",
                        "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
                }
            }
        }       
    }
    
    • 创建一个名字叫zl3的索引,mappings也设置了
    PUT请求
    http://192.168.31.210:9200/zl3
    参数
    {
        "mappings":{
            "datatables":{
                "properties":{
                    "titlezl":{
                        "analyzer":"standard",
                        "type":"text"
                    },
                    "articleIdzl":{
                        "type":"keyword"
                    },
                    "contentzl":{
                        "index": "true",
                        "analyzer":"standard",
                        "type":"text"
                    },
                    "urlzl":{
                        "type":"text"
                    },
                    "releaseTime":{
                        "type":"date"
                    }
                }
            }       
        }   
    }
    

    3、删除索引

    DELETE请求
    http://192.168.31.210:9200/zl3
    

    4、删除type

    不支持删除mappings里的type,仅支持清空type里的所有文档
    http://192.168.31.210:9200/zl1/777/_delete_by_query?conflicts=proceed
    参数
    {
      "query": {
        "match_all": {}
      }
    }
    

    5、添加数据(document)

    POST请求
    http://192.168.31.210:9200/zl1/{type}/{id}
    不传id会随机生成一个id,如:AYKP_-0wz8JlnsXDPDGd
    例子:
    http://192.168.31.210:9200/zl1/datatables/888
    参数
    {
        "releaseTime":"2022-08-12",
        "articleId":"123456",
        "title":"长沙市317公交车司机素质太差",
        "content":"8月9日早上7点15分,我提早5分钟在长华小区公交车站站台等317路始发公交车,7点18分317路公交车进站,我离车门口仅10米左右,就边戴口罩边拿手机找乘车码边走向车门口,因是始发站,一般都是7点20准时发车,我也就没太着急,等我刚到车门口一两米远,车门关了,我敲车门也不开,始发站的车停留不到10秒就跑了!可以调取监控查看!这严重影响我的出行时间和上班考勤打卡,且严重不注意行车安全!网上一直说长沙公交司机素质差,我还不太信,这次是真的见识到了!希望公交公司对这种素质差司机进行严肃处理,以杜绝隐患!",
        "url":"https://people.rednet.cn/#/leaveMsgDetails?id=4225019"
    }
    

    6、删除数据(document)

    DELETE请求
    http://192.168.31.210:9200/{索引}/{type}/{id}
    例子:
    http://192.168.31.210:9200/zl1/datatables/222
    

    7、更新数据(先删除再新增)

    POST请求
    http://192.168.31.210:9200/{索引}/{type}/{id}
    例子:
    http://192.168.31.210:9200/zl1/datatables/aaa
    参数
    {
        "content":"哈哈哈哈"
    }
    这样id为aaa的document的所有字段都会被清空,只有content有值
    

    8、查询

    • 通过id查询
    GET请求
    http://192.168.31.210:9200/{索引}/{type}/{id}
    例子:
    http://192.168.31.210:9200/zl1/datatables/aaa
    返回:
    {
        "_index": "zl1",
        "_type": "datatables",
        "_id": "aaa",
        "_version": 2,
        "found": true,
        "_source": {
            "content": "哈哈哈哈"
        }
    }
    
    • 通过关键词查询
    POST请求
    http://192.168.31.210:9200/{索引}/{type}/_search 
    例子:
    http://192.168.31.210:9200/zl1/datatables/_search
    参数
    {
        "query":{
            "term":{
                "title":"长"
            }
        }
    }
    查询title里有“长“的结果。
    注意:之前设置的"analyzer":"standard",所以汉字关键词只能有一个汉字。
    
    • 通过querystring查询
    POST请求
    http://192.168.31.210:9200/{索引}/{type}/_search 
    例子:
    http://192.168.31.210:9200/zl1/datatables/_search
    参数
    {
        "query":{
            "query_string":{
                "default_field":"title",
                "query":"长沙市317公交车司机"
            }
        }
    }
    先分词,然后分别查询title字段里有"长"、"沙"、"市"、"317"、"公"、"交"、"车"、"司"、"机"的结果。
    
    • fuzzy 模糊查询
    POST请求
    http://192.168.31.210:9200/{索引}/{type}/_search 
    例子:
    http://192.168.31.210:9200/zl1/datatables/_search
    参数
    {
        "query":{
            "fuzzy":{
                "title":{
                    "value":"长市沙",
                    "fuzziness":2
                 }
            }    
        }
    }
    fuzziness调整次数。
    
    • 另外的查询方式
    range               范围查询
    wildcard        通配符查询
    

    9、分词器

    • 标准分词器(standard)
    GET请求
    http://192.168.31.210:9200/_analyze?analyzer=standard&text=Checking the test.log from the elasticsearch log, I'm just continually getting the following
    英文会被按照单词为单位分词。
    http://192.168.31.210:9200/_analyze?analyzer=hanlp&text=我们是湖南电子科技职业学院2016届的学生
    中文则会按照单个汉字为单位分词。
    
    • ik分词器
    ik_smart
    GET请求
    http://192.168.31.210:9200/_analyze?analyzer=ik_smart&text=我们是湖南电子科技职业学院2016届的学生
    分词结果:我们、湖南、电子科技、职业学院、2016届、学生
    
    ik_max_word
    GET请求
    http://192.168.31.210:9200/_analyze?analyzer=ik_smart&text=我们是湖南电子科技职业学院2016届的学生
    分词结果:我们、我、们、湖南、湖、南、电子科技、电子科、电子、电、子、科技、科、技、职业学院、职业、职、业、学院、学、院、2016、届、学生、学、生
    

    使用ik分词器以后,搜索的时候关键词查询term和query_string查询的时候,就不像standard那样单个汉字为单位,也可以是词语作为一个单位。

    10、ElasticSearch集群

    gossip协议
    未完待续...
    

    相关文章

      网友评论

        本文标题:ElasticSearch的简单使用

        本文链接:https://www.haomeiwen.com/subject/vlxfgrtx.html