ElasticSearch的简单使用

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的简单使用)