ES入门

倒排索引

  • ES采用倒排索引的方式提升查询效率
  • 在这里插入图片描述
  • 在这里插入图片描述
  • 在这里插入图片描述
  • GET _search
    {
    “query”: {
    “match_all”: {}
    }
    }

PUT /lib/
{
“settings”: {
“number_of_shards”: 3,
“number_of_replicas”: 0
}
}

GET /lib/_settings

GET _all/_settings

添加文档

PUT /lib/user/1
{
“first_name”: “tom”,
“last_name”:“mao”
}

GET /lib/user/

不指定id使用post

POST /lib/user/
{
“first_name”: “tom”,
“last_name”:“mao”
}

修改使用新的文档进行覆盖

PUT /lib/user/1
{
“first_name”: “99999999”,
“last_name”:“mao”
}

GET /lib/user/1

直接修改不覆盖使用post

POST /lib/user/1/_update
{
“doc”:{
“first_name”: 77777
}
}

GET /lib/user/1

删除文档

DELETE /lib/user/1

GET /lib/user/1

批量获取文档

PUT /lib/user/3
{
“name”: 3
}

GET /lib/user/1

GET /_mget
{
“docs”:[
{
“_index”: “lib”,
“_type”: “user”,
“_id”:1
},
{
“_index”: “lib”,
“_type”: “user”,
“_id”:2
}
,
{
“_index”: “lib”,
“_type”: “user”,
“_id”:3
}
]
}

简化写法

GET /lib/user/_mget
{
“ids”: [1,2,3]
}

bulk批量操作

在这里插入图片描述
在这里插入图片描述

# 批量操作bulk

POST /lib2/books/_bulk
{"index":{"_id":1}}
{"title": "java","price":55}
{"index":{"_id":2}}
{"title":"html5","price":45}
{"index":{"_id":3}}
{"title":"php","price":30}
{"index":{"_id":4}}
{"title":"python","price":30}

GET /lib2/books/_mget
{
  "ids":[1,2,3,4]
}

版本控制

乐观锁的方式实现版本控制

mapping

在这里插入图片描述
日期类型和数字类型默认是不分词的字符串类型是默认分词的
mapping规定数据类型和属性

在这里插入图片描述

手动创建mapping

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

基本查询

ES7执行报错ES6可以执行ES7需要增加include_type_name: true 配置

PUT /lib5
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  }, 
  "mappings": {
    "user":{
      "properties":{
        "name": {"type":"text"},
        "address": {"type":"text"},
        "age": {"type":"integer"},
        "interests": {"type":"text"},
        "birthday": {"type":"date"}
      }
    }
  }
}

GET /lib3/user/_search?q=interests:duanlian&sort=age:desc

GET /lib3/user/_search/
{
  "query": {
    "terms": {
      "name": ["lishi","zhaoliu"]
    }
  }
}

match会对查询条件进行分词

GET /lib3/user/_search/
{
  "query": {
    "match": {
      "name": "lishi zhaoliu"
    }
  }
}

-----------
#! Deprecation: [types removal] Specifying types in search requests is deprecated.
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 1.2039728,
    "hits" : [
      {
        "_index" : "lib3",
        "_type" : "user",
        "_id" : "3",
        "_score" : 1.2039728,
        "_source" : {
          "name" : "lishi",
          "address" : "he long jiang sheng tie ling shi",
          "age" : 50,
          "birthday" : "1900-10-14",
          "interests" : "xi huan hejiu,biancheng"
        }
      },
      {
        "_index" : "lib3",
        "_type" : "user",
        "_id" : "1",
        "_score" : 0.6931471,
        "_source" : {
          "name" : "zhaoliu",
          "address" : "he long jiang sheng tie ling shi",
          "age" : 50,
          "birthday" : "1900-10-14",
          "interests" : "xi huan hejiu,duanlian,lvyou"
        }
      }
    ]
  }
}

多属性匹配

GET /lib3/user/_search/
{
  "query": {
    "multi_match": {
      "query":"lishi",
      "fields": ["name","interests"]
    }
  }
}

排序

在这里插入图片描述
前缀匹配/范围匹配
在这里插入图片描述
边界值
在这里插入图片描述

模糊查询

在这里插入图片描述

高亮显示

在这里插入图片描述

Filter查询

不计算相关性,同事可以缓存比query查询要快

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

价格是125并且id是123的并且价格不是30的

在这里插入图片描述

范围过滤

在这里插入图片描述
在这里插入图片描述

不为空的

在这里插入图片描述

聚合查询

GET /lib3/user/_search
{
  "size": 0, 
  "aggs": {
    "age_sum": {
      "avg": {
        "field": "age"
      }
    }
  }
}

在这里插入图片描述
再求平均年龄
在这里插入图片描述
复合查询
在这里插入图片描述

解析ES分布式架构

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

更新文档对于并发问题的处理

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

相关度分数计算

在这里插入图片描述

基于scroll技术的滚动搜索

在这里插入图片描述

java中使用

查询

Settings settings = Settings.builder().put("cluster.name","elasticsearch").build();
        TransportAddress port = new TransportAddress(InetAddress.getByName("127.0.0.1"),9300);
        TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(port);
        GetResponse res = client.prepareGet("lib3", "user", "1").execute().actionGet();
        System.out.println(res);
        client.close();

增加

public static void main(String[] args) throws Exception {

        Settings settings = Settings.builder().put("cluster.name","elasticsearch").build();
        TransportAddress port = new TransportAddress(InetAddress.getByName("127.0.0.1"),9300);
        TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(port);
        XContentBuilder doc = XContentFactory.jsonBuilder()
                .startObject()
                .field("id","100")
                .field("title","java设计模式")
                .endObject();

        IndexResponse response = client.prepareIndex("index1","blog","11").setSource(doc).get();
        System.out.println(response);
        client.close();
    }

删除

 public static void main(String[] args) throws Exception {

        Settings settings = Settings.builder().put("cluster.name","elasticsearch").build();
        TransportAddress port = new TransportAddress(InetAddress.getByName("127.0.0.1"),9300);
        TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(port);
        DeleteResponse response = client.prepareDelete("index1", "blog", "10").get();
        System.out.println(response);
        client.close();
    }

更新

public static void main(String[] args) throws Exception {

        Settings settings = Settings.builder().put("cluster.name","elasticsearch").build();
        TransportAddress port = new TransportAddress(InetAddress.getByName("127.0.0.1"),9300);
        TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(port);
        UpdateRequest request = new UpdateRequest();
        request.index("index1").type("blog").id("11").doc(XContentFactory.jsonBuilder().startObject().field("title","python").endObject());
        UpdateResponse response = client.update(request).get();
        System.out.println(response);
        client.close();
    }

更新或插入

Settings settings = Settings.builder().put("cluster.name","elasticsearch").build();
        TransportAddress port = new TransportAddress(InetAddress.getByName("127.0.0.1"),9300);
        TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(port);
        IndexRequest request = new IndexRequest();
        request.index("index1").type("blog").id("12").source(XContentFactory.jsonBuilder().startObject().field("title","python999999").endObject());
        UpdateRequest request2 = new UpdateRequest();
        request2.index("index1").type("blog").id("12").doc(XContentFactory.jsonBuilder().startObject().field("title","python11111").endObject()).upsert(request);
        UpdateResponse response = client.update(request2).get();
        System.out.println(response);
        client.close();

批量查询

public static void main(String[] args) throws Exception {

        Settings settings = Settings.builder().put("cluster.name","elasticsearch").build();
        TransportAddress port = new TransportAddress(InetAddress.getByName("127.0.0.1"),9300);
        TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(port);
        MultiGetResponse response = client.prepareMultiGet().add("index1", "blog", "12").add("index1", "blog", "10").get();
        for (MultiGetItemResponse respons : response.getResponses()) {
            System.out.println(respons.getResponse());
        }
        client.close();
    }

批量添加

public static void main(String[] args) throws Exception {

        Settings settings = Settings.builder().put("cluster.name","elasticsearch").build();
        TransportAddress port = new TransportAddress(InetAddress.getByName("127.0.0.1"),9300);
        TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(port);
        BulkRequestBuilder bulk = client.prepareBulk("index1", "blog");
        IndexRequest request = new IndexRequest();
        request.source(XContentFactory.jsonBuilder().startObject().field("title","88888888").endObject());
        IndexRequest request2 = new IndexRequest();
        request2.source(XContentFactory.jsonBuilder().startObject().field("title","88888888").endObject());
        bulk.add(request).add(request2);
        bulk.execute().actionGet();
        client.close();
    }

查询所有

public static void main(String[] args) throws Exception {

        Settings settings = Settings.builder().put("cluster.name","elasticsearch").build();
        TransportAddress port = new TransportAddress(InetAddress.getByName("127.0.0.1"),9300);
        TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(port);
        MatchAllQueryBuilder query = QueryBuilders.matchAllQuery();

        SearchResponse response = client.prepareSearch("index1").setQuery(query).setSize(3).get();
        response.getHits().forEach(item->{
            System.out.println(item.getSourceAsString());
        });
        client.close();
    }
 public static void main(String[] args) throws Exception {

        Settings settings = Settings.builder().put("cluster.name","elasticsearch").build();
        TransportAddress port = new TransportAddress(InetAddress.getByName("127.0.0.1"),9300);
        TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(port);
        MatchQueryBuilder query = QueryBuilders.matchQuery("title", "python11111");
        SearchResponse response = client.prepareSearch("index1").setQuery(query).setSize(3).get();
        response.getHits().forEach(item->{
            System.out.println(item.getSourceAsString());
        });
        client.close();
    }

范围查询

public static void main(String[] args) throws Exception {

        Settings settings = Settings.builder().put("cluster.name","elasticsearch").build();
        TransportAddress port = new TransportAddress(InetAddress.getByName("127.0.0.1"),9300);
        TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(port);
        QueryBuilder query = QueryBuilders.rangeQuery("age").from("10").to("60");
        SearchResponse response = client.prepareSearch("lib3").setQuery(query).setSize(3).get();
        response.getHits().forEach(item->{
            System.out.println(item.getSourceAsString());
        });
        client.close();
    }

前缀查询
在这里插入图片描述
模糊查询
在这里插入图片描述

type查询
在这里插入图片描述

最大值

public static void main(String[] args) throws Exception {

        Settings settings = Settings.builder().put("cluster.name","elasticsearch").build();
        TransportAddress port = new TransportAddress(InetAddress.getByName("127.0.0.1"),9300);
        TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(port);
        AggregationBuilder agg = AggregationBuilders.max("age").field("age");
        SearchResponse response = client.prepareSearch("lib3").addAggregation(agg).get();
        Max max = response.getAggregations().get("age");
        System.out.println(max.getValue());
        client.close();
    }

queryString
在这里插入图片描述

组合查询

在这里插入图片描述
不计算相关度
在这里插入图片描述
聚合查询

分组聚合

最少匹配两个才被查出来

GET /movie/_search
{
  "query": {
    "match": {
      "title":{
        "query": "basketball love aliens",
        "operator": "or",
        "minimum_should_match": 2
      }
    }
  }
}

短语查询不会进行分词

在这里插入图片描述

优化查询增加title的权重

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

中文构建和查询使用不同的分词器

在这里插入图片描述
通过空格进行分词
在这里插入图片描述
增加fielddata字段可以增加聚合功能
在这里插入图片描述

距离计算

在这里插入图片描述

重新构建分词器

POST /product/_update_by_query
{
  "query":{
    "bool":{
      "must":[
        {"term":{"name":"米"}},
        {"term":{"name":"菲"}}  
      ]
    }
  }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羽狼2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值