初识Elasticsearch

作者: 椰子奶糖 | 来源:发表于2019-07-17 15:09 被阅读44次

Elasticsearch

docker 安装Elasticsearch:

  • docker pull Elasticsearch 下载docker镜像

  • docker images 检查镜像是否存在

  • docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 --name ES01 5acf0e8da90b

    • 启动镜像:
      • -e ES_JAVA_OPTS="-Xms256m -Xmx256m" 设置运行内存最大和最小都是256(我的虚拟机只有2G,而Elasticsearch启动默认会占2G的内存,因此不限制运行内存可能会报错)
      • -d 后台运行
      • -p 端口映射,9200,9300,其中9300 为分布式的时候各节点主机通信端口
      • --name 命名
  • docker pa -a

    • 查看镜像运行状态
    • 容器运行状态
  • 打开web,访问9200端口 ip:9200

  • 得到一个如下JSON,安装成功

  • web访问端口:9200

Elasticsearch基本概念

  • JSON
    Elasticsearch 使用 JavaScript Object Notation(或者 JSON)作为文档的序列化格式。JSON 序列化为大多数编程语言所支持,并且已经成为 NoSQL 领域的标准格式。 它简单、简洁、易于阅读。
    下面这个 JSON 文档代表了一个 user 对象:


    user对象

索引和索引

  • 存储数据到 Elasticsearch 的行为叫做 索引 ,但在索引一个文档之前,需要确定将文档存储在哪里。

  • 一个 Elasticsearch 集群可以 包含多个 索引 ,相应的每个索引可以包含多个 类型 。 这些不同的类型存储着多个 文档 ,每个文档又有 多个 属性 。

  • 前者是动词类似与查找,后者是名词,类似与层次结构、索引,类型、文档关系大约如下:

  • 索引类型文档关系图
    • 可以看出,这种关系很想数据库中库、表、数据的关系
  • 关于两个索引,官方的解释是这样的:

  • 官方API

下面来看一条命令

    PUT /megacorp/employee/1
    {
        "first_name" : "John",
        "last_name" :  "Smith",
        "age" :        25,
        "about" :      "I love to go rock climbing",
        "interests": [ "sports", "music" ]
    }

- 注意,路径 /megacorp/employee/1 包含了三部分的信息:megacorp索引名称,employee类型名称,1特定雇员的ID
  • 类似的检索文档:

                GET /megacorp/employee/1
    

    上面的命令结果是返回刚刚存入的JSON,如下:

          {
            "_index" :   "megacorp",
            "_type" :    "employee",
            "_id" :      "1",
            "_version" : 1,
            "found" :    true,
            "_source" :  {
                "first_name" :  "John",
                "last_name" :   "Smith",
                "age" :         25,
                "about" :       "I love to go rock climbing",
                "interests":  [ "sports", "music" ]
            }
          }
    
  • 除此之外:

         GET /megacorp/employee/_search  //查询该类型下的所有员工
         
         GET /megacorp/employee/_search?q=last_name:Smith       //查询该类型下的名字为Smith的员工
    
  • 使用表达式搜索:

      //表示查询该类型下所有名字为Smith的员工
         GET /megacorp/employee/_search
         {
             "query" : {
                 "match" : {
                     "last_name" : "Smith"
                 }
             }
         }
         //PS:在Postman中GET没有请求体,所以应当用Post请求在body中加上查询表达式
    
  • 总结:PUT更新文档,GET检索文档,另外Head检查文档是否存在(200表示存在,404表示找不到),DELETE删除文档

Springboot与ES

  • springboot默认有两种技术和Elasticsearch交互
    • Jest(默认不生效的)需要导入工具包(io.searchbox.client.JestClient)

      • PUT

           //1、给Es中索引(保存)一个文档;
           Article article = new Article();article.setId(1);
           article.setTitle("gangtieshizengyangliancheng d");
           article.setAuthor("MrChen");article.setContent("gangtieshizheyangliancheng d ");
          //构建一个索引功能
          Index index = new Index.Builder(article).index("mrchen").type("book").build();
          try {    
                   //执行      
                   jestClient.execute(index);
          } catch (IOException e){   
                   e.printStackTrace();
          }
        
      • GET

          //查询表达式
          String json ="{\n" +
                  "    \"query\" : {\n" +
                  "        \"match\" : {\n" +
                  "            \"content\" : \"hello\"\n" +
                  "        }\n" +
                  "    }\n" +
                  "}";
        
          //更多操作:https://github.com/searchbox-io/Jest/tree/master/jest
          //构建搜索功能
         Search search = new Search.Builder(json).addIndex("mrchen").addType("book").build();
          //执行
          try {
              SearchResult result = jestClient.execute(search);
              System.out.println(result.getJsonString());
          } catch (IOException e) {
              e.printStackTrace();
          }
        
    • Spring Data Elasticsearch

        //继承ElasticsearchRepository<Book,Integer>接口
        public interface BookRepository extends ElasticsearchRepository<Book,Integer> {

        //参照
        // https://docs.spring.io/spring-data/elasticsearch/docs/3.0.6.RELEASE/reference/html/
             public List<Book> findByBookNameLike(String bookName);
        }
        
        //用@Document指定索引,类名
          @Document(indexName = "library",type = "book")
          public class Book {...}
          
          //自动加载
          @Autowired
          BookRepository bookRepository;
          
          //则存数据的时候只需将book对象传进去即可
          bookRepository.index(book);
          
          //此外bookRepository的方法需要在接口中定义出来,上面接口定义了一个模糊查询的方法:
          //具体方法参考官方文档(上面URL即是)
          bookRepository.findByBookNameLike("条件")

相关文章

  • Mac 安装ElasticSearch

    本系列只是学习ElasticSearch,初识ElasticSearch,大家一起学习 安装java Mac上我个...

  • 初识elasticsearch

    概念 全文检索 从文本或数据库中、不限定数据字段、自由的萃取出信息的技术运行全文检索任务的程序,一般称作搜索引...

  • ElasticSearch初识

    数据结构 结构化:指具有固定格式或有限长度的数据,如数据库,元数据等。 非结构化:指不定长或无固定格式的数据,如邮...

  • elasticsearch初识

    简单介绍 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎...

  • Elasticsearch初识

    问题一 描述Elasticsearch中讲到的以下基本概念,并说明它们之间的区别和联系:Cluster, Node...

  • 初识ElasticSearch

    第一部分主要介绍了ElasicSearch发展历程、基本概念、一些常用接口使用指南。总体而言跟官方文档差不多,未有...

  • 初识Elasticsearch

    Elasticsearch docker 安装Elasticsearch: docker pull Elastic...

  • 初识ElasticSearch

    ElasticSearch是一个分布式搜索引擎。支持索引自动分片,索引副本机制,restful接口,多数据源,自动...

  • Elasticsearch初识

    开源分布式搜索分析引擎, 基于Java语言开发, 采用Lucene内库构建 近实时 分布式存储, 搜索, 分析引擎...

  • Elasticsearch初识

    一、安装和配置 1.安装 elasticsearch默认不允许以root账号运行,所以创建一个用户创建用户:use...

网友评论

    本文标题:初识Elasticsearch

    本文链接:https://www.haomeiwen.com/subject/rkgqlctx.html