• 【JAVAEE基础学习(16)】--简述ElasticSearch


    一、搜索:
        在海量数据进行搜索=分词+搜索
            水平全网搜索引擎=百度,谷歌等
            垂直搜索引擎=淘宝,京东,万方,知网等

    二、海量数据存储
        1.静态资源存储:nginx,阿里oss静态存储服务器
        2.分类信息=>经常被查询信息=>前端常量数据=>redis,apolitical域
        3.查询=分类查询+全文搜索

    tip:session仅针对同一个客户端起作用

    tip:  kibana测试连接:http://localhost:5601/app/kibana#/home

    三、倒排索引:
        传统的数据保存方式:
            记录->单词
        倒排索引保存数据:
            单词->记录
        索引引擎基于分词技术构建倒排索引,其存储数据如下:
            分词->文档ID->文档{一般为json格式}

    四、ElasticSearch
        1.概念:
            开源,分布式,全文搜索引擎
            近乎实时的存储,支持集群,可以使用java开发。
            Lucene为核心检索功能,对Lucene进行封装,对外只保留了RESTful API

        2.Lucene:
            Lucene是ElasyicSearch核心,Lucene可以进行处理分词,构建倒排索引等等,
            但Lucene只提供了全文检索功能类库的核心工具包,而Lucene也支持另外一个搜索引擎框架Solr

        3.ElasticSearch和Solr:
            Solr利用Zookeeper进行分布式管理,而ElasyicSearch自带分布式协同管理功能
            ElasyicSearch仅仅支持json数据格式,Solr支持众多数据格式
            ElasyicSearch本身更注重核心功能,高级功能由第三方插件提供,ElasyicSearch实时性较好

        4.ElasticSearch使用场景:
            提供关键字进行全网搜索
            ELK(ElasyicSearch{查询},Logstash{收集},Kibana{数据可视化})实现企业海量日志的处理分析的解决方案

        5.ElasticSearch使用:
            在Windows环境下,到ElasticSearch的解压后的bin目录下点击elasticsearch.bat文件,就可以启动ElasticSearch服务器,在本地浏览器中输入localhost:9200即可查看服务器是否启动成功。
            ElasticSearch无法启动的常见原因:{
                jdk版本不满足要求,一般要求1.8及其以上
                服务器启动窗口闪退,通过路径访问追踪错误,若是“空间不足”,则需要修改config/jvm.options配置文件

    1. {
    2. -Xms1g---》-Xms512m
    3. -Xmx1g---》-Xmx512m
    4. }

            }
            安装ElasticSearch的两个测试工具kibana和Postman,两个工具和tomcat一样,都是立即解压立即使用的绿色工具。其中kibana需要通过浏览器输入http://localhost:5601/app/kibana#/home使用,而postman自带客户端,可以使用其客户端

        6.ElasticSearch相关概念:
            ElasticSearch是文档型数据库,数据以json为文档序列化格式以文件进行存储。
            ElasticSearch与关系型数据库的对照{

    1. ElasticSearch----MySql
    2. 索引Index----数据库DataBase
    3. 类型Type(7.0及其以上版本没有了)----表Table
    4. 文档Docments----行Rows
    5. 字段Fields----列Columns
    6. 映射mapper(对数据的存储规则做一些映射)

            }

    tip:所有新技术的学习都要去官网查看技术手册去学习

    五、ElasticSearch的基本操作:
        1.索引库操作{
            建库:PUT /自定义库名称
            删库:DELETE /目标库
            查看所有索引库:GET /_cat/indices?v
            查看某一个索引库:GET /目标索引库名称
        }
        tip:在6版本自己建立的索引有默认5个分片;在7版本则只有1个;只是使用delete删除索引库不代表真正删除索引库,真正删除索引是在合并索引段或者更新索引的时候
        2.类型(表)及映射(约束)操作{
            tip:在6版本还有类型,7版本建议删除类型,8版本没有类型
            1.建表

    1. {
    2. PUT /索引库名/_mapping/类型表名称{//6版本写法
    3. "properties":{
    4. "字段名称":{
    5. "type【类型】":"类型",
    6. "index【是否索引】":true,
    7. "store【是否存储】":false,
    8. "analyzer【分词器】":"具体分词器",
    9. }
    10. }
    11. }
    12. PUT /索引库名/类型表名称/_mapping?include_type_name=true{//7版本中写6版本的语法
    13. "properties":{
    14. "字段名称":{
    15. "type【类型】":"类型",
    16. "index【是否索引】":true,
    17. "store【是否存储】":false,
    18. "analyzer【分词器】":"具体分词器",
    19. }
    20. }
    21. }
    22. }


            建议:先建索引库后建类型表
            2.查看类型表{
                查看类型表:

    GET /索引库/类型表/_mapping

     GET /索引库/类型表/_mapping?include_type_name=true

            }
            3.建索引库同时建类型表{

    1. PUT /索引库{
    2. "settings":{},
    3. "mappings":{
    4. "类型表名称"{
    5. "properties":{
    6. "字段名称":{
    7. "type【类型】":"类型",
    8. "index【是否索引】":true,
    9. "store【是否存储】":false,
    10. "analyzer【分词器】":"具体分词器",
    11. }
    12. }
    13. }
    14. }
    15. }

    }
            4.对类型表进行数据的增删改查{
                添加{

    1. POST /目标索引库/目标类型表/自定义id号
    2. {
    3. "字段1":"对应值1",
    4. "字段2":"对应值2",
    5. "字段3":对应值3
    6. }

    }
                添加或修改{

    1. POST /目标索引库/目标类型表/自定义目标id号
    2. {
    3. "字段1":"修改值1",
    4. "字段2":"修改值2",
    5. "字段3":修改值3
    6. }
    7. 修改指定字段
    8. POST /目标索引库/目标类型表/自定义目标id号/_update
    9. {
    10. "doc":{
    11. "目标字段":修改值1
    12. }
    13. }

    }
                删除{

    1. DELETE /目标索引库/目标类型表/自定义目标id号
    2. 根据条件删除文档
    3. POST /目标索引库/_delete_by_query
    4. {
    5. "query":{
    6. "match":{
    7. "title":"目标字段" #含目标字段的全部删除
    8. }
    9. }
    10. }

    }
            }
        }
        3.请求体查询DSL(领域特定语言){
            一、查询{
                1.查询所有数据{

    1. GET /shopping/_search
    2. {
    3. "query":{
    4. "match_all":{}
    5. }
    6. }

    }
                2.指定查询{

    1. GET /shopping/_search
    2. {
    3. "query":{
    4. "match":{
    5. "title":"目标"
    6. }
    7. }
    8. }

    }
                3.多字段匹配查询{

    1. GET /shopping/_search
    2. {
    3. "query":{
    4. "multi_match":{
    5. "query":"目标",
    6. "fields":["title","subtitle"]
    7. }
    8. }
    9. }

    }
                4.精确查询(以分词索引作为精确对象){

    1. GET /shopping/_search
    2. {
    3. "query": {
    4. "term": {
    5. "title":{
    6. "value":"目标索引分词"
    7. }
    8. }
    9. }
    10. }

    }
                5.多关键词精准查询{

    1. GET /shopping/_search
    2. {
    3. "query": {
    4. "terms": {
    5. "price":[目标字段1,目标字段2]
    6. }
    7. }
    8. }

    }
                6.结果过滤{

    1. GET /shopping/_search
    2. {
    3. "_source":["title","price"],
    4. (
    5. "_source":{
    6. "includes":["title","price"],
    7. "exclude":["images"]
    8. }
    9. )
    10. "query": {
    11. "terms": {
    12. "price":[1999]
    13. }
    14. }
    15. }

    }
                7.boolean组合{

    1. GET /shopping/_search
    2. {
    3. "query": {
    4. "bool":{
    5. "must":[
    6. {
    7. "match":{
    8. "title":"小米"
    9. }
    10. }
    11. ],
    12. "must_not":[
    13. {
    14. "match":{
    15. "title":"电视"
    16. }
    17. }
    18. ]
    19. "should":[
    20. "match":{
    21. "title":"手机"
    22. }
    23. ]
    24. }
    25. }
    26. }

    }
                8.范围查询{

    1. 范围{
    2. gt是>
    3. gte是>=
    4. lt是<
    5. lte是<=

    }

                   

    1. GET /shopping/_search
    2. {
    3. "query":{
    4. "range":{
    5. "price":{
    6. "gte":2500
    7. "lte":4000
    8. }
    9. }
    10. }
    11. }

                  
                }
                9.模糊查询(纠错查询){
                    3个字符写错很难纠错
                    6个字符内的可以纠错一次
                    6个字符以上可以纠错两次
                   

    1. POST /shopping/product/4
    2. {
    3. "title":"apple手机",
    4. "images":"4.jpg",
    5. "price":5999.00
    6. }
    7. POST /shopping/product/5
    8. {
    9. "title":"apple",
    10. "images":"5.jpg",
    11. "price":3999.00
    12. }
    13. GET /shopping/_search
    14. {
    15. "query": {
    16. "fuzzy": {
    17. "title": "epplle"
    18. }
    19. }
    20. }
    21. 或(不考虑耗费性能的条件下)
    22. GET /shopping/_search
    23. {
    24. "query": {
    25. "fuzzy": {
    26. "title": {
    27. "value":"eplpe",
    28. "fuzziness": 2
    29. }
    30. }
    31. }
    32. }


                }
                10.查询排序{
                    单字段排序{

    1. GET /shopping/_search
    2. {
    3. "query": {
    4. "match_all": {}
    5. },
    6. "sort": [
    7. {
    8. "price": {
    9. "order": "desc""asc"
    10. }
    11. }
    12. ]
    13. }

    }
                    多字段排序{

    1. GET /shopping/_search
    2. {
    3. "query": {
    4. "match_all": {}
    5. },
    6. "sort": [
    7. {
    8. "price": {
    9. "order": "asc"
    10. },
    11. "_score":{
    12. "order": "desc"
    13. }
    14. }
    15. ]
    16. }

    }
                11.高亮查询{

    1. GET /shopping/_search
    2. {
    3. "query": {
    4. "match": {
    5. "title": "华为"
    6. }
    7. },
    8. "highlight": {
    9. "pre_tags":"",
    10. "post_tags": "",
    11. "fields": {
    12. "title": {}
    13. }
    14. }
    15. }

    }
                12.分页查询{

                    查询公式:from=(pageNum-1)*size

    1. GET /shopping/_search
    2. {
    3. "query": {
    4. "match_all": {}
    5. },
    6. "sort": [
    7. {
    8. "price": {
    9. "order": "asc"
    10. },
    11. "_score":{
    12. "order": "desc"
    13. }
    14. }
    15. ],
    16. "from":0,
    17. "size":2
    18. }
    19. }

            }
        }


    六、ElasticSearch集群{
        一、基本概念:
            1.集群cluster:由一个或多个结点组织在一起,它们拥有整个数据,并且提供索引和搜索功能
        二、集群步骤{
            先弄出三个ElasticSearch,然后在config/elasticSearch.yml中修改配置

    1. {
    2. # ---------------------------------- Cluster -----------------------------------
    3. #
    4. # Use a descriptive name for your cluster:
    5. #
    6. cluster.name: my-elasticsearch
    7. cluster.routing.allocation.disk.threshold_enabled: false
    8. #
    9. # ------------------------------------ Node ------------------------------------
    10. #
    11. # Use a descriptive name for the node:
    12. #
    13. node.name: node-1
    14. #
    15. # Add custom attributes to the node:
    16. #
    17. #node.attr.rack: r1
    18. # ---------------------------------- Network -----------------------------------
    19. #
    20. # Set the bind address to a specific IP (IPv4 or IPv6):
    21. #
    22. network.host: 127.0.0.1
    23. #
    24. # Set a custom port for HTTP:
    25. #
    26. http.port: 9201
    27. #
    28. # For more information, consult the network module documentation.
    29. transport.tcp.port: 9301
    30. # --------------------------------- Discovery ----------------------------------
    31. #
    32. # Pass an initial list of hosts to perform discovery when this node is started:
    33. # The default list of hosts is ["127.0.0.1", "[::1]"]
    34. #
    35. discovery.seed_hosts: ["127.0.0.1:9301", "127.0.0.1:9302","127.0.0.1:9303"]
    36. #
    37. # Bootstrap the cluster using an initial set of master-eligible nodes:
    38. #
    39. #cluster.initial_master_nodes: ["node-1", "node-2"]
    40. #
    41. # For more information, consult the discovery and cluster formation module documentation.
    42. #
    43. }


            若在集群之前,单击版本ElasticSearch有数据,那么在集群之后要将原来的数据进行清理,把data文件夹下的内容删除即可。
            隔一定的时间分别启动集群的各个ElasticSearch服务器,有一定间隔时间系因为集群之间要选出一个主机,一个集群只有一个主机,如果没有时间间隔那么集群就会出现多个主机(脑裂问题{脑裂问题的起因也可能是网络出现故障})
        }
    }

  • 相关阅读:
    掌握Conda的艺术:精通channels管理
    [源码解析] NVIDIA HugeCTR,GPU版本参数服务器--- (5) 嵌入式hash表
    SpringMVC学习笔记
    【Luogu】UVA1205 Color a Tree / SP3912 MTREECOL - Color a tree
    Mysql之innodb
    std::vector 的使用陷阱
    OpenShift 4 - 在 OpenShift 上安装 GitLab
    Hazel引擎学习(九)
    《向量数据库指南》——用 Milvus Cloud和 NVIDIA Merlin 搭建高效推荐系统结论
    Huawei 大型 WLAN 组网 AC 间漫游
  • 原文地址:https://blog.csdn.net/qq_55865959/article/details/127672344