elasticsearch入门篇-学习笔记

介绍

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。

原理

Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档,用JSON作为文档序列化的格式.如下:
在这里插入图片描述
Elasticsearch和传统关系型数据库对比如下:
关系数据库 ⇒ 数据库 ⇒ 表 ⇒ 行 ⇒ 列(Columns)
Elasticsearch ⇒ 索引(Index) ⇒ 类型(type) ⇒ 文档(Docments) ⇒ 字段(Fields)
Elasticsearch最关键的就是提供强大的索引能力,
如果我们插入这几条数据:

IDtitlecontent
1咒术回战打妖怪
2钢之炼金术师人体试炼
3进击的巨人打妖怪

Elasticsearch会建立这些索引:
title:

TermPosting List
咒术回战1
钢之炼金术师2
进击的巨人3

content:

TermPosting List
打妖怪[1,3]
人体试炼2

Posting list就是一个int的数组,存储了所有符合某个term的文档id
直接通过内存读取term,不读取磁盘,但不是简单的讲所有的term放在内存
关于Lucene的词典FST深入剖析 这篇文章对索引原理讲的很清晰

本地安装

https://www.elastic.co/cn/elasticsearch/官网下载zip包.
注意最新版本需要jdk版本11,我使用的6.0.0版本对应jdk版本8
解压,点击bat文件
在这里插入图片描述
在这里插入图片描述
表示启动成功,在网页上可以通过http://localhost:9200/访问
在这里插入图片描述

Java API操作

在idea创建工程,导入依赖:

<dependencies>
<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>5.6.8</version>
</dependency>
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>transport</artifactId>
    <version>5.6.8</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-to-slf4j</artifactId>
    <version>2.9.1</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.24</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.7.21</version>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.12</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.10</version>
</dependency>
</dependencies>

创建文档,搜索文档

创建文档:
@Test
public void createIndex() throws Exception {
    //1.创建es客户端对象
    TransportClient transportClient = new PreBuiltTransportClient(Settings.EMPTY)
            .addTransportAddress(new InetSocketTransportAddress(InetAddress
                    .getByName("127.0.0.1"), 9300));
    //2.创建文档内容
    XContentBuilder contentBuilder = XContentFactory.jsonBuilder()
            .startObject()
            .field("id", 1)
            .field("title", "elasticsearch是一个基于lucene的搜索服务")
            .field("content", "ElasticSearch是一个基于Lucene的搜索服务器。" +
                    "它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。" +
                    "Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布," +
                    "是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定," +
                    "可靠,快速,安装使用方便。")
            .endObject();
    //3.创建文档对象
    IndexResponse response = transportClient.prepareIndex("blog1", "article", "1")
            .setSource(contentBuilder)
            .get();
    Map<String,Object> map = new HashMap<String, Object>();
    map.put("id","2");
    map.put("title","这是一个基于lucene的搜索服务");
    map.put("content","这是一个基于Lucene的搜索服务器文件");
    //3.创建文档对象
    IndexResponse response2 = transportClient.prepareIndex("blog1", "article", "2")
            .setSource(map)
            .get();
    //获取返回的状态
    RestStatus status = response.status();
    System.out.println(status);
    //4.释放资源
    transportClient.close();
}

搜索所有的数据
    @Test
    public void searchAll() throws Exception{
        //1创建客户端对象
        TransportClient transportClient = new PreBuiltTransportClient(Settings.EMPTY).
                addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
        //2.构建搜索内容
        SearchResponse response = transportClient.prepareSearch("blog1").setTypes("article")
                .setQuery(QueryBuilders.matchAllQuery())
                .get();
 
 
        //获取搜索结果
        SearchHits hits = response.getHits();
        System.out.println(hits.getTotalHits());
        //遍历结果
        Iterator<SearchHit> iterator = hits.iterator();
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }
        //关闭资源
        transportClient.close();
    }

可直接通过postman增删改查,效果

put表示插入,修改
get请求表示查询,
delete请求表示删除
插入:
在这里插入图片描述
查询:
在这里插入图片描述
根据条件查询:
在这里插入图片描述
删除:
在这里插入图片描述
啾咪啾咪

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值