二十分钟Elasticsearch从零基础到入门

Elasticsearch简介

Elasticsearch是一个开源的数据库,是由Elastic公司开发的,基于lucen基础架构,使用Java语言开发的一个支持多集群,高亮,快速搜索的数据库,由于其天生支持多集群分布式,逐渐超越sloar从而在企业中得到广泛的使用

Elasticsearch基础概念

es和传统的数据库,相对,一些概念的比较如下

Elasticsearch RDMB
数据库 索引
type
docId

需要注意的是在es 7.x后面的版本中,type 默认为 “_doc”,一个数据库中不支持多个表,据官方说是为了提高表的查询效率,由于数据库中的每一个表都要建立一个倒排索引,多个的话,增加复杂度

Elasticsearch倒排索引

es之所以那么快,查询起来效率这么高,主要还是es插入数据的索引机制,同样可以与RDMB数据库做一个关系类比,我们知道mysql查询这么快,是由于建立了B+树,内部建立了数状的索引,这种称之为正排索引,相反,es建立的索引成为倒排索引,在数据插入的时候,就对数据进行了统计,将每一个document经过分词,分词之后统计出现数目的频数,这样查询的时候就可以,根据查询的词快速定位到某一个数目,同时,由于创建的时候,统计的频数,可以对具体内容进行排序,可以类比于百度的搜索排名

Elasticsearch DSL表达式基础语法

介绍es的基础语法之前,简单介绍一下,es的数据类型,数据类型主要为keyword,text,text的数据类型支持进行分词,同样查询的时候,可以进行模糊匹配,类似于mysql中的 ‘like’ 关键字,而keyword类型的数据就只能精准匹配,类似于 ‘==’ ,对数据的处理,无外乎增删改查询,所以将DSL表达式的操作整理为以下几种:

查询

# 精准搜索
GET xxx/_search
{
  "query": {
    "term": {
      "xxx": {
        "value": "andshza"
      }
    }
  }
}

# 范围查找
GET xxx/_search
{
"query": {
  "terms": {
    "xx": [
      "xx",
      "xx"
    ]
    }
  }
}

删除

POST /my-index-000001/_delete_by_query
{
  "query": {
    "match": {
      "user.id": "elkbee"
    }
  }
}

Elasticsearch Java api的使用

es的Java 客户端主要有以下几种,resHighClient ,restLowClient,两种都支持res形式的接口,这里使用resHighClient进行介绍
首先第一步需要引入相关的jar包,这里引入的依赖如下:

`<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>6.4.3</version>
</dependency>

<dependency>
  <groupId>org.elasticsearch</groupId>
  <artifactId>elasticsearch-cli</artifactId>
  <version>6.4.3</version>
  <scope>compile</scope>
</dependency>`

相关的操作es的api如下:

/**
 * 更新
 */
public UpdateResponse updateData(String index, String type, String id, Object source) throws IOException {
    UpdateRequest updateRequest = new UpdateRequest(index, type, id).doc(JSONObject.toJSONString(source),XContentType.JSON);
    return client.update(updateRequest, RequestOptions.DEFAULT);
}

/**
 * 插入
 */
public IndexResponse insertData(String index, String type, String id, Map source) throws IOException {
    IndexRequest indexRequest = new IndexRequest(index, type, id);
    indexRequest.source(source, XContentType.JSON);
    return client.index(indexRequest, RequestOptions.DEFAULT);
}

/**
 * 删除
 */
public DeleteResponse deleteData(String index, String type, String id) throws IOException {
    DeleteRequest deleteRequest = new DeleteRequest(index, type, id);
    return client.delete(deleteRequest, RequestOptions.DEFAULT);
}


/**
 * 查询index下所有数据
 */
public SearchResponse searchIndex(String index, String type) throws IOException {
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
    searchSourceBuilder.query(matchAllQueryBuilder);
    SearchRequest request = new SearchRequest();
    request.indices(index);
    request.types(type);
    request.source(searchSourceBuilder);
    return client.search(request, RequestOptions.DEFAULT);
}

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYW7Ix0b' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片