ElasticSearch入门及基础操作

ElasticSearch入门及基础操作

一、概述

ElasticSearch简称ES,ES是一个开源的高扩展的分布式全文搜索引擎,是整个Elastic Stack技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好。可以扩展到上百台服务器,处理PB级别的数据。

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的[全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。

**倒排索引:**倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)。

二、基本操作

1、索引

创建一个叫shopping的索引,使用postman工具发送PUT请求,命令如下:

http://127.0.0.1:9200/shopping

在这里插入图片描述
​ 获取索引:命令不变,将PUT请求换成GET请求即可

​ 删除索引:同理,改成DELETE请求

2、文档

​ 索引已经建好,创建文档并添加数据。发送如下POST请求,添加的数据格式为JSON格式

http://127.0.0.1:9200/shopping/_doc

​ 请求体内容为:

{
    "title":"小米手机",
    "category":"小米",
    "image":"http://www.xxxx.com/doge.jpg",
    "price":3999.00
}

也可以在_doc后面跟上id来指定id,请求格式如下(这种指定id的方式使用POST和PUT请求都可以,没有指定id的方式只能使用POST请求且每次生成的id是不一样的):

http://127.0.0.1:9200/shopping/_doc/1001

主键查询:

根据id来查询(GET请求):

http://127.0.0.1:9200/shopping/_doc/1001

在这里插入图片描述

全查询(GET请求):

http://127.0.0.1:9200/shopping/_search

3、修改

全量数据的修改(PUT请求):

http://127.0.0.1:9200/shopping/_doc/1001
{
    "title":"小米手机222",
    "category":"小米",
    "image":"http://www.xxxx.com/doge.jpg",
    "price":4999.00
}

在这里插入图片描述

局部修改(POST请求):

http://127.0.0.1:9200/shopping/_update/1001

JSON数据格式(只修改id为1001的title的值):

{
    "doc":{
        "title":"华为手机"
    }
}

删除数据(DELETE请求):

http://127.0.0.1:9200/shopping/_doc/1001

4、复杂查询

条件查询

GET请求

http://127.0.0.1:9200/shopping/_search?q=category:小米

不过这种方式中文容易出现乱码,所以推荐将参数放在body中进行查询,如下:

http://127.0.0.1:9200/shopping/_search

Body请求json数据为:

{
	"query":{
        "match":{
            "category":"小米"
        }
    }
}

分页查询

Body请求JSON格式为:

{
	"query":{
        "match_all":{
        }
    },
    "from":0,
    "size":2  
}

分页+只显示想要的字段+排序

{
	"query":{
        "match_all":{
        }
    },
    "from":0,
    "size":2 ,
    "_source":["title","price"],
    "sort":{
        "price":{
            "order":"desc"
        }
    }
}

多条件查询

must为必须条件,如果想用或者,则改为should即可

{
    "query":{
        "bool":{
            "must":[
                {
                    "match":{
                        "category":"小米"
                    }
                },{
                    "match":{
                        "price":3999.00
                    }
                }
            ]
        }
    }
}

查询分类为小米或华为的、价格区间大于1000的JSON格式:

{
    "query":{
        "bool":{
            "should":[
                {
                    "match":{
                        "category":"小米"
                    }
                },{
                    "match":{
                        "category":"华为"
                    }
                }
            ],
            "filter":{
                "range":{
                    "price":{
                        "gt":1000
                    }
                }
            }
        }
    }
}

当保存文档数据时,ES会将数据文字进行分词拆解操作,并将拆解后的数据保存到倒排索引当中这样即使使用文字的一部分,也能查询到数据,这种检索方式我们称之为全文检索,ES也会将查询内容进行分词在倒排索引中去进行匹配。

{
    "query":{
        "match":{
            "category":"米为"
        }
    }
} 

如上,“米为”进行分词,拆成“米”和“为”,所以就都能查询有“米”和“为的”。如果要使用完全匹配,则可以使用“match_phrase”。

对某个字段进行高亮显示:

{
    "query":{
        "match":{
            "category":"米为"
        }
    },
    "highlight":{
        "fields":{
            "category":{}
        }
    }
}

聚合查询

分组

{
    "aggs":{    //聚合操作
        "price_group":{ //名称,随意起名
            "terms":{   //分组
                "field":"price"     //分组字段
            }
        }
    },
    "size":0    //不显示原始结果
} 

平均值

{
    "aggs":{    //聚合操作
        "price_avg":{ //名称,随意起名
            "avg":{   //平均值
                "field":"price"     //分组字段
            }
        }
    },
    "size":0    //不显示原始结果
}  

4、映射

先创建一个user的索引(PUT):

http://127.0.0.1:9200/user

再创建_mapping映射(PUT)

http://127.0.0.1:9200/user/_mapping
{
    "properties":{
        "name":{
            "type":"text",
            "index":"true"
        },
        "sex":{
            "type":"keyword",
            "index":"true"
        },
        "tel":{
            "type":"text",
            "index":"false"
        }
    }
}

添加数据(PUT)

http://127.0.0.1:9200/user/_create/1001
{
    "name":"小米",
    "sex":"男",
    "tel":"1111"
}

其中:属性name:可以正常查询

​ 属性sex:需要全部匹配才能查询

​ 属性tel:作为查询条件是查询不到的

http://127.0.0.1:9200/user/_search
{
    "query":{
        "match":{
            "name":"小"
        }
    }
}

与java封装的基本操作项目地址:https://gitee.com/jackSparrowQAQ/ElasticSearchPro

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值