ElasticSearch是面向文档型数据库
构造类似于数据库:indexes(索引库=数据库)-->types(类型=表)-->documents(文档=行)-->field(字段=字段)
但是在7.X开始,Type已经开始被废弃。
正排索引:根据主键id关联内容,然后再找关键字。
倒排索引:根据关键字查询主键id。
选择Solr还是ElasticSearch
- 由于易于使用,Elasticsearch 在新开发者中更受欢迎。一个下载和一个命令就可以启动一切。
- 如果除了搜索文本之外还需要它来处理分析查询,Elasticsearch 是更好的选择。
- 如果需要分布式索引,则需要选择 Elasticsearch。对于需要良好可伸缩性和以及性能分布式环境,Elasticsearch 是更好的选择。
- Elasticsearch 在开源日志管理用例中占据主导地位,许多组织在 Elasticsearch 中索引它们的日志以使其可搜索。
- 如果你喜欢监控和指标,那么请使用 Elasticsearch,因为相对于 Solr,Elasticsearch 暴露了更多的关键指标。
ES使用问题
SSL认证问题
Windows 环境中出现下面的错误信息,是因为开启了 SSL 认证,可以将SSL认证关闭,修改 config/elasticsearch.yml 文件,将 enabled 的值修改为 false
xpack.security.http.ssl:
enabled: false
keystore.path: certs/http.p12
忘记密码
bin目录下面打开cmd
修改命令:elasticsearch-reset-password --username 用户名 -i
回车以后输入y 再输入两次新密码
ES索引相关基础操作
创建索引
创建索引只能使用PUT请求不能使用POST请求,PUT有幂等性特性,而POST没有。
PUT请求:http://localhost:9200/shopping (多次相同请求除了第一会成功,后面的都会提示已存在异常,因为是同一进程)
shopping:索引名。
{
"acknowledged": true,
"shards_acknowledged": true,
"index": "shopping"
}
获取索引信息
GET请求:http://localhost:9200/shopping
shopping:索引名
{
"shopping": {
"aliases": {},
"mappings": {},
"settings": {
"index": {
"routing": {
"allocation": {
"include": {
"_tier_preference": "data_content"
}
}
},
"number_of_shards": "1",
"provided_name": "shopping",
"creation_date": "1683357102325",
"number_of_replicas": "1",
"uuid": "oTVh5cIrS7WomyytmArs0g",
"version": {
"created": "8070199"
}
}
}
}
}
删除索引
DELETE请求:https://localhost:9200/shopping
shopping:索引名
{
"acknowledged": true
}
查询所有索引
GET请求:http://localhost:9200/_cat/indices?v
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open shopping 3XaaMCiWT5CJqu2uwZh2gA 1 1 0 0 225b 225b
ES文档相关操作
从7.X版本以后Type被废弃,所有文档直接存储在索引内。
配置映射关系
PUT请求:http://localhost:9200/shopping/_mapping
配置映射关系需要在创建索引完成后,在添加数据之前进行配置,否则字段的属性类型是不可修改的,默认是text
{
"properties":{
"usename":{ //字段名
"type": "text", //可以分词
"index": true //可以通过索引查询
},
"sex": {
"type": "keyword", //不可以分词,需要完全匹配才能查到
"index": true //可以通过索引查询
},
"age": {
"type": "keyword", //不可以分词,需要完全匹配才能查到
"index": false //不可以通过索引查询(不能查这个字段)
}
}
}
创建文档
创建文档时必需要有json参数
随机id形式创建文档只能使用POST请求不能使用PUT请求,否则会报异常。
POST请求:随机id:http://localhost:9200/shopping/_doc
另外相同参数可以进行多次请求,每次请求返回的id是不同的。id是可以自定义的,只需在请求后面加自定义的id即可。
自定义id形式创建文档既能使用POST请求又能使用PUT请求。
自定义id:http://localhost:9200/shopping/_doc/23333
注:自定义id形式创建文档时_doc可以替换为_create,随机id形式不可以。自定义id形式多次请求,除第一次外都为修改,而随机id形式为多次创建且id不同。
JSON参数:{
"username": "阿桃",
"password": "123456",
"sex": "man",
"age": "26"
}
随机id形式请求返回结果:{
"_index": "shopping",
"_id": "sxQC8IcBaTXEOVHb3Nge",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
自定义id形式请求返回结果{
"_index": "shopping",
"_id": "23333",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 1,
"_primary_term": 1
}
查询文档:主键查询
GET请求:http://localhost:9200/shopping/_doc/23333
//查询成功
{
"_index": "shopping",
"_id": "23333",
"_version": 3,
"_seq_no": 9,
"_primary_term": 1,
"found": true,
"_source": {
"username": "阿桃",
"password": "123456",
"sex": "man",
"age": "26"
}
}
//查询失败
{
"_index": "shopping",
"_id": "23336",
"found": false
}
查询文档:单条件查询
请求路径方式:GET请求:http://localhost:9200/shopping/_search?q=username:大豪(中文时容易乱码)
{
"took": 888,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 3.583519,
"hits": [
{
"_index": "shopping",
"_id": "23333",
"_score": 3.583519,
"_source": {
"username": "大豪",
"password": "123456",
"sex": "man",
"age": "26"
}
}
]
}
}
请求体方式:GET请求:http://localhost:9200/shopping/_search (GET,POST都可以使用)
查询时es会把关键字进行分词,比如"大桃",es会分成"大"和"桃",会把大豪和阿桃都查询出来。
如果想要完全匹配而不分词需要把“match”换成“match_phrase”即可
JSON参数格式
{
"query":{
"match":{
"username":"大豪"
}
},
"from": 0, //分页设置 起始条 计算方式:(页码-1)*页大小 不需要分页时from和size不需要设置
"size": 3, //页大小
"_source": ["username","age"], //过滤,括号内填想要显示的字段 全显示时无需设置该属性
"sort":{ //排序设置 不需要排序时无需设置
"age":{ //需要排序的属性
"order": "asc"
}
},
"highlight":{ //高亮显示
"fields":{ //fields内填写要高亮显示的字段
"username":{}
}
}
}
返回结果
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 3.583519,
"hits": [
{
"_index": "shopping",
"_id": "23333",
"_score": 3.583519,
"_source": {
"username": "大豪",
"password": "123456",
"sex": "man",
"age": "26"
}
}
]
}
}
查询文档:多条件查询
GET请求:http://localhost:9200/shopping/_search
{
"query":{
"bool":{
"must":[ //must是and的意思,则should是or的意思
{
"match": {
"username": "大豪"
}
},
{
"match": {
"password":"123456"
}
}
],
"filter":{ //范围筛选
"range":{
"age":{
"gt": 25 //大于、小于、等于、大于等于、小于等于
}
}
}
}
}
}
查询全部文档
GET请求:http://localhost:9200/shopping/_search
也可以加一个JSON参数查询(可加可不加)
{
"query":{
"match_all":{
}
},
"from": 0, //分页设置 起始条 计算方式:(页码-1)*页大小 不需要分页时from和size不需要设置
"size": 3, //页大小
"_source": ["username","age"], //过滤,括号内填想要显示的字段 全显示时无需设置该属性
"sort":{ //排序设置 不需要排序时无需设置
"age":{ //需要排序的属性
"order": "asc"
}
}
}
返回结果
{
"took": 75,//查询耗费时间 ms
"timed_out": false, //是否超时
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 2,
"relation": "eq"
},
"max_score": 1.0,
"hits": [//所有查询到的结果
{
"_index": "shopping",
"_id": "23333",
"_score": 1.0,
"_source": {
"username": "阿桃",
"password": "123456",
"sex": "man",
"age": "26"
}
},
{
"_index": "shopping",
"_id": "tBQS8IcBaTXEOVHb0tiQ",
"_score": 1.0,
"_source": {
"username": "阿桃",
"password": "123456",
"sex": "man",
"age": "26"
}
}
]
}
}
聚合查询
GET请求:http://localhost:9200/shopping/_search
//eg.1 平均值
{
"aggs":{ //聚合操作
"price_avg":{ //自定义名称
"avg":{ //平均值
"field":"age" //字段名
}
}
},
"size":0 //size设置成0不显示原数据,否则会把原数据显示出来
}
//eg.2 分组
{
"aggs":{ //聚合操作
"price_group":{ //自定义名称
"terms":{ //平均值
"field":"age" //字段名
}
}
},
"size":0 //size设置成0不显示原数据,否则会把原数据显示出来
}
修改文档
- 全量修改
操作和上述的自定义id形式创建文档相同。
- 局部修改
POST请求:http://127.0.0.1:9200/shopping/_update/23333
JSON参数格式
{
"doc":{
"username":"大豪"
}
}
返回结果
{
"_index": "shopping",
"_id": "23333",
"_version": 4,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 13,
"_primary_term": 1
}
删除文档
DELETE请求:http://localhost:9200/shopping/_doc/23333
{
"_index": "shopping",
"_id": "23333",
"_version": 5,
"result": "deleted",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 14,
"_primary_term": 1
}