ElasticSearch笔记

elasticsearch

ik分词器

两种分词效果

ik_smart 最少切分 你设置的搜索是中国 那么只有输入中国才能搜索到

ik_max_word 最细粒度划分 你设置中国 那么 你输入中、国、中国 都可以受到

手动配置个人的分词器

一般情况下 分词器只会存储词典里的东西 比如 中国 世界等词汇 这些词汇 他们会自动被ik分词器使用 但有时候一些特殊的词字典是不存在的 我们需要手动配置 在配置文件中的IKAnalyzer.cfg定义你自己想用的词汇文件 然后启动es时帮你加载上

Rest风格

一种软件架构的风格 而不是标准 只是提供了一些原则和约束,他主要用于客户端和服务器交互类的软件,基于这个设计可以更简洁,更有层次更易于实现缓存等机制

methodurl地址描述信息
PUTlocalhost:9200/索引名称/类型名称/文档id创建文档(随机id)
POSTlocalhost:9200/索引名称/类型名称创建文档(随机id)
POSTlocalhost:9200/索引名称/类型名称/文档id/_update修改文档
DELETElocalhost:9200/索引名称/类型名称/文档id删除文档
GETlocalhost:9200/索引名称/类型名称/文档id查询文档,通过id
POSTlocalhost:9200/索引名称/类型名称/文档id查询所有数据

索引的基本操作

创建一个索引 
PUT text1
{
	 "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "age": {
        "type": "long"
      },
      "birth": {
        "type": "date"
      }
    }
  }
}
这一个操作相当于建立一个数据库 并且设置了名字等字段
PUT test/type01/1
{
	"name": "张三""age": 5
}
创建索引 并且建立一个文档建立一个用户1 添加了字段和值

获取
GET test1 

GET test1/user/1/_search?q=name:张三

GET test1/user/1/_search
{
"query": {
"match": {
	"name": "张三"
}
}
}

修改
1.PUT test/type01/1
{
	"name": "张三1""age": 5
}
暴力修改法 把所有的字段重新输入一遍 但注意必须都重写 少一个 他就给你删除
2.POST test/type1/1/_update
{
"name": "李四"
}

删除
DELETE test1

查询常用的命令

query 查询条件
(match 准确查询/bool布尔查询{must 必须符合的条件一个或多个/should 或者 符合一个就行}sort 排序
form+size 分页查询
filter 过滤条件
	range范围
		gt gte lt lte 大于 大于等于 小于 小于等于
高亮字段 highlight-》field字段-》name:{}
自定义的高亮条件 pre_tags:前缀 post_tags:后缀 前缀+内容+后缀 完整的高亮

两种类型的区别 text 和 keyword

text类型的数据 会被分词器解析 所有数据可以拆分搜索

keyword会被当成一个整体 无法被分词器拆开 搜索必须要完整的字符串

springboot集成es的基本操作

索引

 @Autowired
    @Qualifier("restHighLevelClient")
    private RestHighLevelClient client;
    @Test
    void contextLoads() throws IOException {
        //创建索引
        CreateIndexRequest request = new CreateIndexRequest("zxh_study");
        //将创建好的索引发送到客户端 类型是默认类型
        CreateIndexResponse indexResponse = client.indices().create(request, RequestOptions.DEFAULT);
        System.out.println(
                indexResponse
        );
    }
    //判断索引是否存在
    @Test
    void text1() throws IOException {
        //获取索引
        GetIndexRequest request = new GetIndexRequest("zxh_study");
        //判断客户端是否存在索引
        boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
        System.out.println(exists);

    }
    //删除一个索引
    @Test
    void text2() throws IOException {
        DeleteIndexRequest request = new DeleteIndexRequest("zxh_study");
        //删除这个索引
        AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
        System.out.println(delete.isAcknowledged());

    }

文档的基础操作

 //添加数据
    @Test
    void text3() throws IOException {
        User user = new User("你", 5);
        //创建请求
        IndexRequest request = new IndexRequest("zxh_study");
        //写入id
        request.id("1");
        request.timeout("1s");
        //将写好的数据放入请求中 然后转换
        request.source(JSON.toJSONString(user), XContentType.JSON);
        //往客户端发送请求
        IndexResponse index = client.index(request, RequestOptions.DEFAULT);
        System.out.println(index.toString());//获取你上传的信息
        System.out.println(index.status());//对应的数据状态 你是创建还是修改还是删除
    }
    //获取文档 判断文档是否存在
    @Test
    void text4() throws IOException {
        GetRequest request = new GetRequest("zxh_study", "1");
        //不获取返回值中的_source下的东西 也就是数据
        request.fetchSourceContext(new FetchSourceContext(false));
        request.storedFields("_none_");
        boolean exists = client.exists(request, RequestOptions.DEFAULT);
        System.out.println(exists);
    }
    //获取文档信息
    @Test
    void text5() throws IOException {
        GetRequest request = new GetRequest("zxh_study", "1");
        GetResponse getResponse = client.get(request, RequestOptions.DEFAULT);
        System.out.println(getResponse.getSourceAsString());


    }
    //更新数据
    @Test
    void text6() throws IOException {
        UpdateRequest updateRequest = new UpdateRequest("zxh_study", "1");
        User user = new User("张三", 6);
        updateRequest.doc(JSON.toJSONString(user),XContentType.JSON);
        UpdateResponse update = client.update(updateRequest, RequestOptions.DEFAULT);
        System.out.println(update.status());

    }
    //精确查询用户
    @Test
    void test7() throws IOException {
        //构建搜索条件
        SearchRequest request = new SearchRequest("zxh_study");
        //添加你想要的条件 比如精确查询 或者排序 或者分页等等
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "zxh");
        sourceBuilder.query(termQueryBuilder);
        //将条件写好放入请求中
        request.source(sourceBuilder);
        //发送请求
        SearchResponse searchResponse = client.search(request, RequestOptions.DEFAULT);

        //获取响应回来的数据
        System.out.println(JSON.toJSONString(searchResponse.getHits()));

        for (SearchHit documents:searchResponse.getHits().getHits()
             ) {
            System.out.println(documents.getSourceAsMap());
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值