Elasticsearch入门学习

  1. Elasticsearch是一个基于Lucene的搜索服务,它提供了分布式多用户能力的全文搜索引擎,基于RESTful web接口。

  2. Elasticsearch是使用Java语言开发的,是当前流行的企业级搜索引擎,设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

  3. 优点:

    1. 横向可扩展性: 只需增加一台服务器,做一点配置,启动es就可以并入集群。
    2. 分片机制提供更好的分不性,同一个索引分成多个分片(sharding),这点类似于HDFS的块机制,来提升处理效率。
    3. 高可用: 提供复制(replica)机制,一个分片可以设置多个复制,使得某台服务器宕机的情况下,集群仍旧可以正常运转,并会把由于服务器宕机丢失的复制恢复到其他可用的节点上,这点也类似于HDFS的复制机制(HDFS中默认是3份复制)。
    4. 速度快,负载能力强,在面对海量的数据时,搜索速度极快,在同样的硬件资源下,进行大量数据的搜索时,相比一些传统的数据搜索软件,es上手容易,很快可以搭建一个站内搜索引擎。
  4. 缺点:

    1. 各节点的一致性问题,器默认的机制是多播机制,同步元数据信息,但是在比较繁忙的集群中,可能会由于网络的阻塞,或者节点处理能力达到饱和,导致各节点元数据不一致–也就是所谓的脑裂问题,会使得集群处于不一致状态。目前并没有一个彻底解决该问题的方案,但是可以通过将工作节点与元数据节点分开部署的方案来缓解这种情况。
    2. 没有细致的权限管理机制,也就是说,没有像MySQL那样分各种用户,没有用户有不同的权限,所以在操作上的限制需要自己开发一个系统来完成。
  5. Elasticsearch与关系型数据库的对应关系

    关系型数据库Elasticsearch
    数据库Database索引Index,支持全文搜索
    表Table类型Type
    数据行Row文档Document,但不需要固定结构,不同文档可以拒用不同字段集合
    数据列Column字段Field
    模式Schema映像Mapping
  6. Elasticsearch的增删改查操作

  7. 创建索引:

    PUT /db_index

    http://192.168.18.177:9200/db_index — 通过浏览器增加(put)

  8. 查看索引:

    GET /db_index

    http://192.168.18.177:9200/db_index — 通过浏览器查看

  9. 删除索引: DELETE /db_index

  10. 添加文档,格式为: PUT /索引名称/类型/id

    PUT /db_index/user/1
    {
    “name”: “Jack”,
    “sex”: 1,
    “age”: 25,
    “book”: “Spring Boot 入门到精通”,
    “remark”: “hello world”
    }

  11. 修改的语句和添加的语句一模一样

  12. 查看文档: GET /索引名称/类型/id

    GET /db_index/user/1

  13. 删除文档: DELETE /索引名称/类型/id

  14. 查看某个类型中的所有文档: GET /索引名称/类型/_search

    GET /db_index/user/_search

    select * from user

  15. 条件查询: GET /索引名称/类型/_search?q=*?*

    GET /db_index/user/_search?q=age:28

    select * from user where age = 28

  16. 范围查询: GET /索引名称/类型/_search?q=* [ ** TO **] (TO 必须为大写)

    GET /db_index/user/_search?q=age:[25 TO 26]

  17. 批量查询: GET /db_index/user/_mget

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

    select * from user where id in (1,2)

  18. 查看年龄小于等于28:GET /db_index/user/_search?q=age:<=**

    GET /db_index/user/_search?q=age:<=28

    select * from user where age <= 28

  19. 查询年龄大于: GET /db_index/user/_search?q=age:>**

    GET /db_index/user/_search?q=age:>28

    select * from user where age > 28

  20. 分页查询: GET /db_index/user/_search?q=age:[25 TO 26]&from=&size=

    GET /db_index/user/_search?q=age:[25 TO 26]&from=0&size=3

    select * from user where age between 25 and 26 limit 0,3

  21. 对查询结果只输出某些字段:

    GET /db_index/user/_search?q=age:[25 TO 26]&_source=name,age

    select name,age from user where age between 25 and 26

  22. 对查询结果进行排序:

    GET /db_index/user/_search?q=age:[25 TO 26]&sort=age:asc

    select * from user where age between 25 and 26 order by age asc

  23. 多索引和多类别的查询,参考 https://es.xiaoleilu.com/050_Search/10_Multi_index_multi_type.htmls

  24. ES提供了强大的查询语言DSL,它可以允许我们进行更强大、复杂的查询。DSL中有Query和Filter两种查询方式。

  25. Query查询,会在ES中索引的数据都会存储一个_score的分值,分值越高就代表越匹配

  26. 根据名称精确查询姓名term,term查询不会对字段进行分词查询,会采用精确匹配。

    采用term精确匹配,查询字段映射类型为keyword。

    POST /db_index/user/_search
    {
    “query”: {
    “term”: {
    “name”: “jack”
    }
    }
    }

    select * from user where name = “jack”

  27. 根据备注信息模糊查询match,match会根据该字段的分词器,进行分词查询:

    POST /db_index/user/_search
    {
    “from”: 0,
    “size”: 1,
    “query”: {
    “match”: {
    “book”: “spring”
    }
    }
    }

    select * from user where book like “%spring%”

  28. 多字段模糊匹配查询与精准查询,multi_match

    POST /db_index/user/_search
    {
    “query”: {
    “multi_match”: {
    “query”: “spring hadoop”,
    “fields”: [“book”, “remark”]
    }
    }
    }

    select * from user where book like “%spring%” or book like “%hadoop%” or remark like “%spring%”

    or remark like “%hadoop%”

  29. 未指定字段条件查询query_string,含and 与 or 条件:

    POST /db_index/user/_search
    {
    “query”: {
    “query_string”: {
    “query”: “(Spring Cloud AND 入门到精通) OR Spring Boot”
    }
    }
    }

  30. 指定字段条件查询query_string,含and 与 or 条件:

    POST /db_index/user/_search{
    “query”: {
    “query_string”: {
    “query”: “Spring Boot OR 入门到精通”,
    “fields”: [“book”,“remark”]
    }
    }
    }

  31. 范围查询

    range范围关键字

    gte大于等于

    lte 小于等于

    gt 大于

    lt 小于

    now 当前时间

    POST /db_index/user/_search
    {
    “query”: {
    “range”: {
    “age”: {
    “gte”: 25,
    “lte”: 28
    }
    }
    }
    }

    select * from user where age between 25 and 28

  32. 分页、输出字段、排序综合查询

    POST /db_index/user/_search
    {
    “query” : {
    “range” : {
    “age” : {
    “gte”:25,
    “lte”:28
    }
    }
    },
    “from”: 0,
    “size”: 2,
    “_source”: [“name”, “age”, “book”],
    “sort”: {“age”:“desc”}
    }

  33. Filter过滤方式查询,它的查询不会计算相关性分值,也不会对结果进行排序,因此效率会高点,查询的结果可以被缓存

  34. Filter Context对数据进行过滤

    POST /db_index/user/_search
    {
    “query”: {
    “bool”: {
    “filter”: {
    “term”:{
    “age”:25
    }
    }
    }
    }
    }

  35. 映射相当于数据表中的表结构

  36. 映射可以分为动态映射和静态映射

    1. 动态映射: 在关系型数据库中需要先床架数据库,再创建数据表,并创建表字段,类型,长度,主键等,最后才能基于表插入数据,ES中的mapping映射,在文档写入ES时,会根据文档字段自动识别类型,这种机制称为动态映射。
    2. 静态映射: 是在ES中事先定义好映射,包含文档的个字段类型、分词器等,这种方式称为静态映射。
  37. 动态映射的规则:

    JSON数据自动推测的类型
    null没有字段呗添加
    true或falseboolean类型
    小数float
    数字long
    日期date或text
    字符串text
    数组有数据的第一个非空值决定
    JSON对象object类型
  38. ES文档映射支持的数据类型:

    1. 字符串String:String包含的text和keyword
      1. text ,该类型被用来索引长文本,在创建索引前会将这些文本进行分词,转化为词的组合,建立索引,;允许es来检索这些词,text类型不能用来排序和聚合。
      2. keyword: 这类型不能分词,可以被用来检索过滤、排序和组合,keyword不可以用text进行分词模糊检索。
    2. 数值型:long, Integer,short,byte,double,float
    3. 日期型: date
    4. 布尔型: boolean
    5. 二级制型: binary
    6. 复杂数据类型
    7. 地理位置类型
    8. 特定类型
  39. 获取映射: GET /db_index/user/_mapping

  40. 创建静态映射

    1. 建立索引: PUT /db_index

    2. 创建静态映射:

      POST /db_index/_mapping/user
      {
      	"user":{
      		"properties":{
                  "name":{
                  	"type":"keyword"
                  },
                  "sex":{
                  	"type":"integer"
                  },
                  "age":{
                 		"type":"integer"
                  },
                  "book":{
                  	"type":"text"
                  },
                  "remark":{
                  	"type":"text"
                  },
                  "test":{
                  	"type":"keyword"
                  }
      		}
      	}
      }	
      
    3. 根据静态映射创建文档

      PUT /db_index/user/1
      	{
              "name": "Jack",
              "sex": 1,
              "age": 25,
              "book": "Spring Boot 入门到精通",
              "remark": "hello world"
      	}	
      
  41. 在ES中不允许直接修改映射的类型,如需修改,方法为:

    1. 如果要推倒现有的映射,首先需要重新建立一个静态索引

    2. 然后把之前索引里面的数据导入到新的索引里面

      POST _reindex
      	{
              "source": {
              	"index": "db_index"
              },
              "dest": {
              	"index": "db_index_2"
              }
      	}
      
    3. 删除之前的索引

      DELETE /db_index
      
    4. 为新索引起个别名,为原索引名

      PUT /db_index_2/_alias/db_index
      
  42. keyword映射只能精准查询,不能分词查询,能聚合排序

  43. text映射能模糊查询,能分词查询,不能聚合、排序

  44. 数据库领域中确保并发更新的两种方法:

    1. 悲观并发控制

      ​ 被关系型数据库广泛使用,它嘉定变更冲突可能发生,因此阻塞访问资源以防止冲突。一个典型的例子就是读一行数据之前现将其锁住,确保只有放置锁的线程能够对这行数据进行修改。

    2. 乐观并发控制

      ​ ES中使用这种方式,假定冲突是不可能发生的,并且不会阻塞正在尝试的操作。然而,如果源数据在读取过程当中被修改,更新将会失败,应用程序接下来将决定接下来该如何解决冲突。例如可以重试更新、使用新的数据、或者将相关情况报告给用户。效率更高。

  45. ES是基于倒排索引实现的

    分词 --> 去重 --> 排序

  46. 查看分词器分词后的结果

    GET _analyze
    {
      "analyzer": "ik_smart",
      "text": "流浪地球"
    }
    
  47. ik中文分词器自定义词语

    1. 在/opt/elasticsearch-6.6.0/plugins/ik/config下新创建一个custom文件夹

    2. 创建一个my_word.dic文件,内容自己添加

    3. 在/opt/elasticsearch-6.6.0/plugins/ik/configIKAnalyzer.cfg.xml下添加

      <entry key="ext_dict">custom/my_word.dic</entry>
      
    4. 重启es

  48. 创建静态映射时指定text类型的ik分词器

    POST /db_index/_mapping/user
    	{
    		"user":{
    			"properties":{
                    "name":{
                    	"type":"keyword"
                    },
                    "sex":{
                    	"type":"integer"
                    },
                    "age":{
                    	"type":"integer"
                    },
                    "book":{
                        "type":"text",
                        "analyzer":"ik_smart",
                        "search_analyzer":"ik_smart"
                    },
                    "remark":{
                    	"type":"text"
                    },
                    "test":{
                    	"type":"keyword"
                    }
    			}
    		}
    	}
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园失物招领系统管理系统按照操作主体分为管理员和用户。管理员的功能包括字典管理、论坛管理、公告信息管理、失物招领管理、失物认领管理、寻物启示管理、寻物认领管理、用户管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 校园失物招领系统管理系统可以提高校园失物招领系统信息管理问题的解决效率,优化校园失物招领系统信息处理流程,保证校园失物招领系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 ,管理员权限操作的功能包括管理公告,管理校园失物招领系统信息,包括失物招领管理,培训管理,寻物启事管理,薪资管理等,可以管理公告。 失物招领管理界面,管理员在失物招领管理界面中可以对界面中显示,可以对失物招领信息的失物招领状态进行查看,可以添加新的失物招领信息等。寻物启事管理界面,管理员在寻物启事管理界面中查看寻物启事种类信息,寻物启事描述信息,新增寻物启事信息等。公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值